diff --git a/dist/cjs/whyDidYouRender.js b/dist/cjs/whyDidYouRender.js index 510a3db..d9d14c3 100644 --- a/dist/cjs/whyDidYouRender.js +++ b/dist/cjs/whyDidYouRender.js @@ -1,8 +1,8 @@ /** - * @welldone-software/why-did-you-render 4.2.2 + * @welldone-software/why-did-you-render 4.2.3 * MIT Licensed * Generated by Vitali Zaidman (https://github.com/vzaidman) - * Generated at 2020-05-20 + * Generated at 2020-05-30 */ 'use strict'; @@ -156,7 +156,7 @@ function _possibleConstructorReturn(self, call) { function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); - return function () { + return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; @@ -274,9 +274,12 @@ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } -function _createForOfIteratorHelper(o) { +function _createForOfIteratorHelper(o, allowArrayLike) { + var it; + if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { - if (Array.isArray(o) || (o = _unsupportedIterableToArray(o))) { + if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { + if (it) o = it; var i = 0; var F = function () {}; @@ -302,8 +305,7 @@ function _createForOfIteratorHelper(o) { throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } - var it, - normalCompletion = true, + var normalCompletion = true, didErr = false, err; return { @@ -782,6 +784,31 @@ function findObjectsDifferences(userPrevObj, userNextObj) { }, []); } +function getOwnerDifferences(_ref) { + var prevOwnerData = _ref.prevOwnerData, + nextOwnerData = _ref.nextOwnerData; + + if (!prevOwnerData || !nextOwnerData) { + return false; + } + + var hookDifferences = prevOwnerData.hooks.map(function (_ref2, i) { + var hookName = _ref2.hookName, + result = _ref2.result; + return { + hookName: hookName, + differences: findObjectsDifferences(result, nextOwnerData.hooks[i].result, { + shallow: false + }) + }; + }); + return { + propsDifferences: findObjectsDifferences(prevOwnerData.props, nextOwnerData.props), + stateDifferences: findObjectsDifferences(prevOwnerData.state, nextOwnerData.state), + hookDifferences: hookDifferences.length > 0 ? hookDifferences : false + }; +} + function getUpdateReason(prevProps, prevState, prevHook, nextProps, nextState, nextHook, ownerDataMap) { var prevOwnerData = ownerDataMap.get(prevProps); var nextOwnerData = ownerDataMap.get(nextProps); @@ -791,35 +818,25 @@ function getUpdateReason(prevProps, prevState, prevHook, nextProps, nextState, n hookDifferences: findObjectsDifferences(prevHook, nextHook, { shallow: false }), - ownerDifferences: prevOwnerData != null && nextOwnerData != null ? { - propsDifferences: findObjectsDifferences(prevOwnerData.props, nextOwnerData.props), - stateDifferences: findObjectsDifferences(prevOwnerData.state, nextOwnerData.state), - hookDifferences: prevOwnerData.hooks.map(function (_ref, i) { - var hookName = _ref.hookName, - result = _ref.result; - return { - hookName: hookName, - differences: findObjectsDifferences(result, nextOwnerData.hooks[i].result, { - shallow: false - }) - }; - }) - } : false + ownerDifferences: getOwnerDifferences({ + prevOwnerData: prevOwnerData, + nextOwnerData: nextOwnerData + }) }; } -function getUpdateInfo(_ref2) { - var Component = _ref2.Component, - displayName = _ref2.displayName, - hookName = _ref2.hookName, - prevProps = _ref2.prevProps, - prevState = _ref2.prevState, - prevHook = _ref2.prevHook, - nextProps = _ref2.nextProps, - nextState = _ref2.nextState, - nextHook = _ref2.nextHook, - options = _ref2.options, - ownerDataMap = _ref2.ownerDataMap; +function getUpdateInfo(_ref3) { + var Component = _ref3.Component, + displayName = _ref3.displayName, + hookName = _ref3.hookName, + prevProps = _ref3.prevProps, + prevState = _ref3.prevState, + prevHook = _ref3.prevHook, + nextProps = _ref3.nextProps, + nextState = _ref3.nextState, + nextHook = _ref3.nextHook, + options = _ref3.options, + ownerDataMap = _ref3.ownerDataMap; return { Component: Component, displayName: displayName, @@ -904,7 +921,7 @@ function patchClassComponent(ClassComponent, displayName, React, options, ownerD var _super = _createSuper(WDYRPatchedClassComponent); function WDYRPatchedClassComponent(props, context) { - var _this; + var _thisSuper, _this; _classCallCheck(this, WDYRPatchedClassComponent); @@ -913,7 +930,7 @@ function patchClassComponent(ClassComponent, displayName, React, options, ownerD renderNumber: 0 }; - var origRender = _get(_getPrototypeOf(WDYRPatchedClassComponent.prototype), "render", _assertThisInitialized(_this)) || _this.render; // this probably means render is an arrow function or this.render.bind(this) was called on the original class + var origRender = _get((_thisSuper = _assertThisInitialized(_this), _getPrototypeOf(WDYRPatchedClassComponent.prototype)), "render", _thisSuper) || _this.render; // this probably means render is an arrow function or this.render.bind(this) was called on the original class var renderIsABindedFunction = origRender !== ClassComponent.prototype.render; @@ -1149,6 +1166,24 @@ function getPatchedComponent(componentsMap, Component, displayName, React, optio return WDYRPatchedComponent; } +function getIsSupportedComponentType(Comp) { + if (!Comp) { + return false; + } + + if (typeof Comp === 'function') { + return true; + } + + if (isMemoComponent(Comp)) { + return getIsSupportedComponentType(Comp.type); + } + + if (isForwardRefComponent(Comp)) { + return getIsSupportedComponentType(Comp.render); + } +} + var hooksConfig = { useState: { path: '0' @@ -1193,7 +1228,7 @@ function whyDidYouRender(React, userOptions) { } try { - isShouldTrack = (typeof componentNameOrComponent === 'function' || isMemoComponent(componentNameOrComponent) || isForwardRefComponent(componentNameOrComponent)) && shouldTrack({ + isShouldTrack = getIsSupportedComponentType(componentNameOrComponent) && shouldTrack({ Component: componentNameOrComponent, displayName: getDisplayName(componentNameOrComponent), React: React, @@ -1208,7 +1243,7 @@ function whyDidYouRender(React, userOptions) { if (options.logOwnerReasons) { var OwnerInstance = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner.current; - if (OwnerInstance != null) { + if (OwnerInstance) { var Component = OwnerInstance.type.ComponentForHooksTracking || OwnerInstance.type; var _displayName = getDisplayName(Component); diff --git a/dist/cjs/whyDidYouRender.min.js b/dist/cjs/whyDidYouRender.min.js index 5bb4da2..3cd679c 100644 --- a/dist/cjs/whyDidYouRender.min.js +++ b/dist/cjs/whyDidYouRender.min.js @@ -1,9 +1,9 @@ /** - * @welldone-software/why-did-you-render 4.2.2 + * @welldone-software/why-did-you-render 4.2.3 * MIT Licensed * Generated by Vitali Zaidman (https://github.com/vzaidman) - * Generated at 2020-05-20 + * Generated at 2020-05-30 */ -"use strict";function e(e){return e&&"object"==typeof e&&"default"in e?e.default:e}var t=e(require("lodash/get")),r=e(require("lodash/isString")),n=e(require("lodash/reduce")),o=e(require("lodash/has")),a=e(require("lodash/keys")),i=e(require("lodash/isSet")),c=e(require("lodash/isFunction")),s=e(require("lodash/isRegExp")),f=e(require("lodash/isDate")),u=e(require("lodash/isPlainObject")),p=e(require("lodash/isArray")),l=e(require("lodash/defaults"));function d(e,t){for(var r=0;re.length)&&(t=e.length);for(var r=0,n=new Array(t);r=e.length?{done:!0}:{done:!1,value:e[t++]}},e:function(e){throw e},f:r}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var n,o,a=!0,i=!1;return{s:function(){n=e[Symbol.iterator]()},n:function(){var e=n.next();return a=e.done,e},e:function(e){i=!0,o=e},f:function(){try{a||null==n.return||n.return()}finally{if(i)throw o}}}}var N,j="different",C="deepEquals",x="date",T="regex",P="reactElement",Y="function",H="function"==typeof Symbol&&Symbol.for,I=H?Symbol.for("react.memo"):60115,L=H?Symbol.for("react.forward_ref"):60112,A=(y(N={},j,"different objects."),y(N,C,"different objects that are equal by value."),y(N,x,"different date objects with the same value."),y(N,T,"different regular expressions with the same value."),y(N,P,"different React elements (remember that the syntax always produces a *NEW* immutable React element so a component that receives as props always re-renders.)."),y(N,Y,"different functions with the same name."),N),M=!1;function W(e){var t=e.Component,r=e.displayName,n=e.hookName,o=e.prefixMessage,a=e.diffObjType,i=e.differences,c=e.values,s=e.options;i&&i.length>0?(s.consoleLog(y({},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," result]"):"".concat(a,"."),"%c").concat(t,"%c"),"color:".concat(s.diffNameColor,";"),"color:".concat(s.diffPathColor,";"),"color:default;"),s.consoleLog("".concat(A[r]," (more info at ").concat(n?"http://bit.ly/wdyr3":"http://bit.ly/wdyr02",")")),s.consoleLog(y({},"prev ".concat(t),o),"!==",y({},"next ".concat(t),i)),s.consoleGroupEnd()}))):i&&(s.consoleLog(y({},r,t),"".concat(o," the ").concat(a," object itself changed but its values are all equal."),"props"===a?"This could have been avoided by making the component pure, or by preventing its father from re-rendering.":"This usually means this component called setState when no changes in its state actually occurred.","More info at ".concat("http://bit.ly/wdyr02")),s.consoleLog("prev ".concat(a,":"),c.prev," !== ",c.next,":next ".concat(a)))}function F(e){var t=e.Component,r=e.displayName,n=e.hookName,o=e.prevProps,a=e.prevState,i=e.prevHook,c=e.nextProps,s=e.nextState,f=e.nextHook,u=e.reason,p=e.options,l=e.ownerDataMap;if(function(e,t,r){return!M&&(!!r.logOnDifferentValues||(!(!t.whyDidYouRender||!t.whyDidYouRender.logOnDifferentValues)||!(e.propsDifferences&&e.propsDifferences.some((function(e){return e.diffType===j}))||e.stateDifferences&&e.stateDifferences.some((function(e){return e.diffType===j}))||e.hookDifferences&&e.hookDifferences.some((function(e){return e.diffType===j})))))}(u,t,p)){p.consoleGroup("%c".concat(r),"color: ".concat(p.titleColor,";"));var d="Re-rendered because";if(u.propsDifferences&&(W({Component:t,displayName:r,prefixMessage:d,diffObjType:"props",differences:u.propsDifferences,values:{prev:o,next:c},options:p}),d="And because"),u.stateDifferences&&W({Component:t,displayName:r,prefixMessage:d,diffObjType:"state",differences:u.stateDifferences,values:{prev:a,next:s},options:p}),u.hookDifferences&&W({Component:t,displayName:r,prefixMessage:d,diffObjType:"hook",differences:u.hookDifferences,values:{prev:i,next:f},hookName:n,options:p}),u.propsDifferences&&u.ownerDifferences){var h=l.get(o),m=l.get(c);p.consoleGroup("Rendered by ".concat(m.displayName));var v="Re-rendered because";u.ownerDifferences.propsDifferences&&(W({Component:m.Component,displayName:m.displayName,prefixMessage:v,diffObjType:"props",differences:u.ownerDifferences.propsDifferences,values:{prev:h.props,next:m.props},options:p}),v="And because"),u.ownerDifferences.stateDifferences&&W({Component:m.Component,displayName:m.displayName,prefixMessage:v,diffObjType:"state",differences:u.ownerDifferences.stateDifferences,values:{prev:h.state,next:m.state},options:p}),u.ownerDifferences.hookDifferences&&u.ownerDifferences.hookDifferences.forEach((function(e,t){var r=e.hookName,n=e.differences;return W({Component:m.Component,displayName:m.displayName,prefixMessage:v,diffObjType:"hook",differences:n,values:{prev:h.hooks[t].result,next:m.hooks[t].result},hookName:r,options:p})})),p.consoleGroupEnd()}u.propsDifferences||u.stateDifferences||u.hookDifferences||p.consoleLog(y({},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("http://bit.ly/wdyr02")),p.consoleGroupEnd()}}function q(e){return e&&"undefined"!=typeof module&&module.hot&&module.hot.addStatusHandler&&module.hot.addStatusHandler((function(t){"idle"===t&&(M=!0,setTimeout((function(){M=!1}),e))})),F}var U=function(){};function G(e){return e.displayName||e.name||e.type&&G(e.type)||e.render&&G(e.render)||(r(e)?e:void 0)}var V="undefined"!=typeof Element,B="function"==typeof Symbol&&Symbol.for?Symbol.for("react.element"):60103,$=function(e){return e.$$typeof===B};function z(e,t,r,n,o){return r.push({diffType:o,pathString:n,prevValue:e,nextValue:t}),o!==j}function J(e,t,r){try{var n=[];return function e(t,r,n){var l=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"";if(t===r)return!0;if(!t||!r)return z(t,r,n,l,j);if(p(t)&&p(r)){var d=t.length;if(d!==r.length)return z(R(t),R(r),n,l,j);for(var y=[],h=0,v=d;v--;v>0){var b=e(t[v],r[v],y,"".concat(l,"[").concat(v,"]"));b&&h++}return h===d?z(R(t),R(r),n,l,C):(n.push.apply(n,y),z(R(t),R(r),n,l,j))}if(i(t)&&i(r)){if(t.size!==r.size)return z(new Set(t),new Set(r),n,l,j);var g,D=S(t);try{for(D.s();!(g=D.n()).done;){var w=g.value;if(!r.has(w))return z(new Set(t),new Set(r),n,l,j)}}catch(e){D.e(e)}finally{D.f()}return z(new Set(t),new Set(r),n,l,C)}if(f(t)&&f(r))return t.getTime()===r.getTime()?z(new Date(t),new Date(r),n,l,x):z(new Date(t),new Date(r),n,l,j);if(s(t)&&s(r))return t.toString()===r.toString()?z(t,r,n,l,T):z(t,r,n,l,j);if(V&&t instanceof Element&&r instanceof Element)return z(t,r,n,l,j);if($(t)&&$(r)){if(t.type!==r.type)return z(t,r,n,l,j);var _=e(t.props,r.props,[],"".concat(l,".props"));return z(t,r,n,l,_?P:j)}if(c(t)&&c(r))return t.name===r.name?z(t,r,n,l,Y):z(t,r,n,l,j);if(u(t)&&u(r)){var O=a(t),k=O.length;if(k!==a(r).length)return z(m({},t),m({},r),n,l,j);for(var E=k;E--;E>0)if(!o(r,O[E]))return z(m({},t),m({},r),n,l,j);for(var N=[],H=0,I=k;I--;I>0){var L=O[I],A=e(t[L],r[L],N,"".concat(l,".").concat(L));A&&H++}return H===k?z(m({},t),m({},r),n,l,C):(n.push.apply(n,N),z(m({},t),m({},r),n,l,j))}return z(t,r,n,l,j)}(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 K={};function Q(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=r.shallow,a=void 0===o||o;if(e===t)return!1;if(!a)return J(e,t);var i=e||K,c=t||K,s=Object.keys(m(m({},i),c));return n(s,(function(e,t){var r=J(i[t],c[t],t);return r&&(e=[].concat(R(e),R(r))),e}),[])}function X(e,t,r,n,o,a,i){var c=i.get(e),s=i.get(n);return{propsDifferences:Q(e,n),stateDifferences:Q(t,o),hookDifferences:Q(r,a,{shallow:!1}),ownerDifferences:null!=c&&null!=s&&{propsDifferences:Q(c.props,s.props),stateDifferences:Q(c.state,s.state),hookDifferences:c.hooks.map((function(e,t){return{hookName:e.hookName,differences:Q(e.result,s.hooks[t].result,{shallow:!1})}}))}}}function Z(e){var t=e.Component,r=e.displayName,n=e.hookName,o=e.prevProps,a=e.prevState,i=e.prevHook,c=e.nextProps,s=e.nextState,f=e.nextHook,u=e.options,p=e.ownerDataMap;return{Component:t,displayName:r,hookName:n,prevProps:o,prevState:a,prevHook:i,nextProps:c,nextState:s,nextHook:f,options:u,ownerDataMap:p,reason:X(o,a,i,c,s,f,p)}}function ee(e){return e.prototype&&!!e.prototype.isReactComponent}function te(e){return e.$$typeof===I}function re(e){return e.$$typeof===L}function ne(e){var t=e.Component,r=e.displayName,n=e.options,o=e.React,a=e.isHookChange;return!function(e,t){return t.exclude&&t.exclude.length>0&&t.exclude.some((function(t){return t.test(e)}))}(r,n)&&(!1!==t.whyDidYouRender&&((!a||!t.whyDidYouRender||!1!==t.whyDidYouRender.trackHooks)&&!!(t.whyDidYouRender||n.trackAllPureComponents&&(t&&t.prototype instanceof o.PureComponent||te(t))||function(e,t){return t.include&&t.include.length>0&&t.include.some((function(t){return t.test(e)}))}(r,n))))}function oe(e,t,r,n,o){var a=function(r){!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&&b(e,t)}(f,r);var a,i,c,s=w(f);function f(t,r){var n;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,f),(n=s.call(this,t,r))._WDYR={renderNumber:0};var o=_(v(f.prototype),"render",g(n))||n.render;return o!==e.prototype.render&&(n.render=function(){return f.prototype.render.apply(g(n)),o()}),n}return a=f,(i=[{key:"render",value:function(){if(this._WDYR.renderNumber++,"isStrictMode"in this._WDYR||(this._WDYR.isStrictMode=function(e){for(var t=e&&e._reactInternalFiber;t;){if(1&t.mode)return!0;t=t.return}return!1}(this)),!this._WDYR.isStrictMode||this._WDYR.renderNumber%2!=1){if(this._WDYR.prevProps){var r=Z({Component:e,displayName:t,prevProps:this._WDYR.prevProps,prevState:this._WDYR.prevState,nextProps:this.props,nextState:this.state,options:n,ownerDataMap:o});n.notifier(r)}this._WDYR.prevProps=this.props,this._WDYR.prevState=this.state}return _(v(f.prototype),"render",this)?_(v(f.prototype),"render",this).call(this):null}}])&&d(a.prototype,i),c&&d(a,c),f}(e);try{a.displayName=t}catch(e){}return l(a,e),a}function ae(e,t,r,n,o,a){var i="string"==typeof e?function(e,t){return function(r){return t.createElement(e,r)}}(e,n):e;function c(){var e=arguments[0],c=n.useRef(),s=c.current;if(c.current=e,s){var f=Z({Component:i,displayName:r,prevProps:s,nextProps:e,options:o,ownerDataMap:a}),u=!f.reason.propsDifferences||t&&0===f.reason.propsDifferences.length;u||o.notifier(f)}return i.apply(void 0,arguments)}try{c.displayName=r}catch(e){}return c.ComponentForHooksTracking=i,l(c,i),c}var ie=Symbol("initial-hook-value");function ce(e,r,n,o,a,i,c){var s=r.path,f=s?t(n,s):n;c.current.push({hookName:e,result:f});var u=o.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED&&o.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner.current,p=o.useRef(ie);if(!u)return n;var l=u.type.ComponentForHooksTracking||u.type,d=G(l);if(!ne({Component:l,displayName:d,options:a,React:o,isHookChange:!0}))return n;var y=p.current;if(p.current=n,y!==ie){var h=Z({Component:l,displayName:d,hookName:e,prevHook:s?t(y,s):y,nextHook:f,options:a,ownerDataMap:i});h.reason.hookDifferences&&a.notifier(h)}return n}function se(e,t,r,n,o,a){return te(t)?function e(t,r,n,o,a){var i=t.type,c=ee(i),s=re(i),f=te(i),u=s?i.render:i,p=c?oe(u,r,0,o,a):f?e(u,r,n,o,a):ae(u,!0,r,n,o,a);try{p.displayName=G(u)}catch(e){}p.ComponentForHooksTracking=t,l(p,u);var d=n.memo(s?n.forwardRef(p):p,t.compare);try{d.displayName=r}catch(e){}return l(d,t),d}(t,r,n,o,a):re(t)?function(e,t,r,n,o){var a=e.render,i=te(a),c=i?a.type:a,s=ae(c,i,t,r,n,o);s.displayName=G(c),s.ComponentForHooksTracking=c,l(s,c);var f=r.forwardRef(i?r.memo(s,a.compare):s);try{f.displayName=t}catch(e){}return l(f,e),f}(t,r,n,o,a):ee(t)?oe(t,r,0,o,a):ae(t,!1,r,n,o,a)}function fe(e,t,r,n,o,a){if(e.has(t))return e.get(t);var i=se(0,t,r,n,o,a);return e.set(t,i),i}var ue={useState:{path:"0"},useReducer:{path:"0"},useContext:!0,useMemo:!0};function pe(e,t){var r=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=console.group,r=console.groupEnd;e.collapseGroups?t=console.groupCollapsed:e.onlyLogs&&(t=console.log,r=U);var n=e.notifier||q("hotReloadBufferMs"in e?e.hotReloadBufferMs:500);return m({include:null,exclude:null,notifier:n,onlyLogs:!1,consoleLog:console.log,consoleGroup:t,consoleGroupEnd:r,logOnDifferentValues:!1,logOwnerReasons:!1,trackHooks:!0,titleColor:"#058",diffNameColor:"blue",diffPathColor:"red",trackExtraHooks:[],trackAllPureComponents:!1},e)}(t),n=e.createElement,o=e.createFactory,a=new WeakMap,i=new WeakMap,c={current:[]},s=null;if(e.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED&&Object.defineProperty(e.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,"current",{get:function(){return s},set:function(e){s=e,c.current=[]}}),e.createElement=function(t){for(var o=null,s=null,f=null,u=arguments.length,p=new Array(u>1?u-1:0),l=1;le.length)&&(r=e.length);for(var t=0,n=new Array(r);t=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,i=!0,c=!1;return{s:function(){t=e[Symbol.iterator]()},n:function(){var e=t.next();return i=e.done,e},e:function(e){c=!0,a=e},f:function(){try{i||null==t.return||t.return()}finally{if(c)throw a}}}}var N,j="different",x="deepEquals",C="date",T="regex",P="reactElement",Y="function",H="function"==typeof Symbol&&Symbol.for,I=H?Symbol.for("react.memo"):60115,L=H?Symbol.for("react.forward_ref"):60112,A=(y(N={},j,"different objects."),y(N,x,"different objects that are equal by value."),y(N,C,"different date objects with the same value."),y(N,T,"different regular expressions with the same value."),y(N,P,"different React elements (remember that the syntax always produces a *NEW* immutable React element so a component that receives as props always re-renders.)."),y(N,Y,"different functions with the same name."),N),M=!1;function W(e){var r=e.Component,t=e.displayName,n=e.hookName,o=e.prefixMessage,a=e.diffObjType,i=e.differences,c=e.values,s=e.options;i&&i.length>0?(s.consoleLog(y({},t,r),"".concat(o," of ").concat(a," changes:")),i.forEach((function(e){var r=e.pathString,t=e.diffType,o=e.prevValue,i=e.nextValue;s.consoleGroup("%c".concat("hook"===a?"[hook ".concat(n," result]"):"".concat(a,"."),"%c").concat(r,"%c"),"color:".concat(s.diffNameColor,";"),"color:".concat(s.diffPathColor,";"),"color:default;"),s.consoleLog("".concat(A[t]," (more info at ").concat(n?"http://bit.ly/wdyr3":"http://bit.ly/wdyr02",")")),s.consoleLog(y({},"prev ".concat(r),o),"!==",y({},"next ".concat(r),i)),s.consoleGroupEnd()}))):i&&(s.consoleLog(y({},t,r),"".concat(o," the ").concat(a," object itself changed but its values are all equal."),"props"===a?"This could have been avoided by making the component pure, or by preventing its father from re-rendering.":"This usually means this component called setState when no changes in its state actually occurred.","More info at ".concat("http://bit.ly/wdyr02")),s.consoleLog("prev ".concat(a,":"),c.prev," !== ",c.next,":next ".concat(a)))}function F(e){var r=e.Component,t=e.displayName,n=e.hookName,o=e.prevProps,a=e.prevState,i=e.prevHook,c=e.nextProps,s=e.nextState,f=e.nextHook,u=e.reason,p=e.options,l=e.ownerDataMap;if(function(e,r,t){return!M&&(!!t.logOnDifferentValues||(!(!r.whyDidYouRender||!r.whyDidYouRender.logOnDifferentValues)||!(e.propsDifferences&&e.propsDifferences.some((function(e){return e.diffType===j}))||e.stateDifferences&&e.stateDifferences.some((function(e){return e.diffType===j}))||e.hookDifferences&&e.hookDifferences.some((function(e){return e.diffType===j})))))}(u,r,p)){p.consoleGroup("%c".concat(t),"color: ".concat(p.titleColor,";"));var d="Re-rendered because";if(u.propsDifferences&&(W({Component:r,displayName:t,prefixMessage:d,diffObjType:"props",differences:u.propsDifferences,values:{prev:o,next:c},options:p}),d="And because"),u.stateDifferences&&W({Component:r,displayName:t,prefixMessage:d,diffObjType:"state",differences:u.stateDifferences,values:{prev:a,next:s},options:p}),u.hookDifferences&&W({Component:r,displayName:t,prefixMessage:d,diffObjType:"hook",differences:u.hookDifferences,values:{prev:i,next:f},hookName:n,options:p}),u.propsDifferences&&u.ownerDifferences){var h=l.get(o),m=l.get(c);p.consoleGroup("Rendered by ".concat(m.displayName));var v="Re-rendered because";u.ownerDifferences.propsDifferences&&(W({Component:m.Component,displayName:m.displayName,prefixMessage:v,diffObjType:"props",differences:u.ownerDifferences.propsDifferences,values:{prev:h.props,next:m.props},options:p}),v="And because"),u.ownerDifferences.stateDifferences&&W({Component:m.Component,displayName:m.displayName,prefixMessage:v,diffObjType:"state",differences:u.ownerDifferences.stateDifferences,values:{prev:h.state,next:m.state},options:p}),u.ownerDifferences.hookDifferences&&u.ownerDifferences.hookDifferences.forEach((function(e,r){var t=e.hookName,n=e.differences;return W({Component:m.Component,displayName:m.displayName,prefixMessage:v,diffObjType:"hook",differences:n,values:{prev:h.hooks[r].result,next:m.hooks[r].result},hookName:t,options:p})})),p.consoleGroupEnd()}u.propsDifferences||u.stateDifferences||u.hookDifferences||p.consoleLog(y({},t,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("http://bit.ly/wdyr02")),p.consoleGroupEnd()}}function q(e){return e&&"undefined"!=typeof module&&module.hot&&module.hot.addStatusHandler&&module.hot.addStatusHandler((function(r){"idle"===r&&(M=!0,setTimeout((function(){M=!1}),e))})),F}var U=function(){};function G(e){return e.displayName||e.name||e.type&&G(e.type)||e.render&&G(e.render)||(t(e)?e:void 0)}var V="undefined"!=typeof Element,B="function"==typeof Symbol&&Symbol.for?Symbol.for("react.element"):60103,$=function(e){return e.$$typeof===B};function z(e,r,t,n,o){return t.push({diffType:o,pathString:n,prevValue:e,nextValue:r}),o!==j}function J(e,r,t){try{var n=[];return function e(r,t,n){var l=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"";if(r===t)return!0;if(!r||!t)return z(r,t,n,l,j);if(p(r)&&p(t)){var d=r.length;if(d!==t.length)return z(R(r),R(t),n,l,j);for(var y=[],h=0,v=d;v--;v>0){var b=e(r[v],t[v],y,"".concat(l,"[").concat(v,"]"));b&&h++}return h===d?z(R(r),R(t),n,l,x):(n.push.apply(n,y),z(R(r),R(t),n,l,j))}if(i(r)&&i(t)){if(r.size!==t.size)return z(new Set(r),new Set(t),n,l,j);var g,D=S(r);try{for(D.s();!(g=D.n()).done;){var w=g.value;if(!t.has(w))return z(new Set(r),new Set(t),n,l,j)}}catch(e){D.e(e)}finally{D.f()}return z(new Set(r),new Set(t),n,l,x)}if(f(r)&&f(t))return r.getTime()===t.getTime()?z(new Date(r),new Date(t),n,l,C):z(new Date(r),new Date(t),n,l,j);if(s(r)&&s(t))return r.toString()===t.toString()?z(r,t,n,l,T):z(r,t,n,l,j);if(V&&r instanceof Element&&t instanceof Element)return z(r,t,n,l,j);if($(r)&&$(t)){if(r.type!==t.type)return z(r,t,n,l,j);var _=e(r.props,t.props,[],"".concat(l,".props"));return z(r,t,n,l,_?P:j)}if(c(r)&&c(t))return r.name===t.name?z(r,t,n,l,Y):z(r,t,n,l,j);if(u(r)&&u(t)){var O=a(r),k=O.length;if(k!==a(t).length)return z(m({},r),m({},t),n,l,j);for(var E=k;E--;E>0)if(!o(t,O[E]))return z(m({},r),m({},t),n,l,j);for(var N=[],H=0,I=k;I--;I>0){var L=O[I],A=e(r[L],t[L],N,"".concat(l,".").concat(L));A&&H++}return H===k?z(m({},r),m({},t),n,l,x):(n.push.apply(n,N),z(m({},r),m({},t),n,l,j))}return z(r,t,n,l,j)}(e,r,n,t),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 K={};function Q(e,r){var t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=t.shallow,a=void 0===o||o;if(e===r)return!1;if(!a)return J(e,r);var i=e||K,c=r||K,s=Object.keys(m(m({},i),c));return n(s,(function(e,r){var t=J(i[r],c[r],r);return t&&(e=[].concat(R(e),R(t))),e}),[])}function X(e){var r=e.prevOwnerData,t=e.nextOwnerData;if(!r||!t)return!1;var n=r.hooks.map((function(e,r){return{hookName:e.hookName,differences:Q(e.result,t.hooks[r].result,{shallow:!1})}}));return{propsDifferences:Q(r.props,t.props),stateDifferences:Q(r.state,t.state),hookDifferences:n.length>0&&n}}function Z(e,r,t,n,o,a,i){var c=i.get(e),s=i.get(n);return{propsDifferences:Q(e,n),stateDifferences:Q(r,o),hookDifferences:Q(t,a,{shallow:!1}),ownerDifferences:X({prevOwnerData:c,nextOwnerData:s})}}function ee(e){var r=e.Component,t=e.displayName,n=e.hookName,o=e.prevProps,a=e.prevState,i=e.prevHook,c=e.nextProps,s=e.nextState,f=e.nextHook,u=e.options,p=e.ownerDataMap;return{Component:r,displayName:t,hookName:n,prevProps:o,prevState:a,prevHook:i,nextProps:c,nextState:s,nextHook:f,options:u,ownerDataMap:p,reason:Z(o,a,i,c,s,f,p)}}function re(e){return e.prototype&&!!e.prototype.isReactComponent}function te(e){return e.$$typeof===I}function ne(e){return e.$$typeof===L}function oe(e){var r=e.Component,t=e.displayName,n=e.options,o=e.React,a=e.isHookChange;return!function(e,r){return r.exclude&&r.exclude.length>0&&r.exclude.some((function(r){return r.test(e)}))}(t,n)&&(!1!==r.whyDidYouRender&&((!a||!r.whyDidYouRender||!1!==r.whyDidYouRender.trackHooks)&&!!(r.whyDidYouRender||n.trackAllPureComponents&&(r&&r.prototype instanceof o.PureComponent||te(r))||function(e,r){return r.include&&r.include.length>0&&r.include.some((function(r){return r.test(e)}))}(t,n))))}function ae(e,r,t,n,o){var a=function(t){!function(e,r){if("function"!=typeof r&&null!==r)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(r&&r.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),r&&b(e,r)}(f,t);var a,i,c,s=w(f);function f(r,t){var n,o;!function(e,r){if(!(e instanceof r))throw new TypeError("Cannot call a class as a function")}(this,f),(o=s.call(this,r,t))._WDYR={renderNumber:0};var a=_((n=g(o),v(f.prototype)),"render",n)||o.render;return a!==e.prototype.render&&(o.render=function(){return f.prototype.render.apply(g(o)),a()}),o}return a=f,(i=[{key:"render",value:function(){if(this._WDYR.renderNumber++,"isStrictMode"in this._WDYR||(this._WDYR.isStrictMode=function(e){for(var r=e&&e._reactInternalFiber;r;){if(1&r.mode)return!0;r=r.return}return!1}(this)),!this._WDYR.isStrictMode||this._WDYR.renderNumber%2!=1){if(this._WDYR.prevProps){var t=ee({Component:e,displayName:r,prevProps:this._WDYR.prevProps,prevState:this._WDYR.prevState,nextProps:this.props,nextState:this.state,options:n,ownerDataMap:o});n.notifier(t)}this._WDYR.prevProps=this.props,this._WDYR.prevState=this.state}return _(v(f.prototype),"render",this)?_(v(f.prototype),"render",this).call(this):null}}])&&d(a.prototype,i),c&&d(a,c),f}(e);try{a.displayName=r}catch(e){}return l(a,e),a}function ie(e,r,t,n,o,a){var i="string"==typeof e?function(e,r){return function(t){return r.createElement(e,t)}}(e,n):e;function c(){var e=arguments[0],c=n.useRef(),s=c.current;if(c.current=e,s){var f=ee({Component:i,displayName:t,prevProps:s,nextProps:e,options:o,ownerDataMap:a}),u=!f.reason.propsDifferences||r&&0===f.reason.propsDifferences.length;u||o.notifier(f)}return i.apply(void 0,arguments)}try{c.displayName=t}catch(e){}return c.ComponentForHooksTracking=i,l(c,i),c}var ce=Symbol("initial-hook-value");function se(e,t,n,o,a,i,c){var s=t.path,f=s?r(n,s):n;c.current.push({hookName:e,result:f});var u=o.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED&&o.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner.current,p=o.useRef(ce);if(!u)return n;var l=u.type.ComponentForHooksTracking||u.type,d=G(l);if(!oe({Component:l,displayName:d,options:a,React:o,isHookChange:!0}))return n;var y=p.current;if(p.current=n,y!==ce){var h=ee({Component:l,displayName:d,hookName:e,prevHook:s?r(y,s):y,nextHook:f,options:a,ownerDataMap:i});h.reason.hookDifferences&&a.notifier(h)}return n}function fe(e,r,t,n,o,a){return te(r)?function e(r,t,n,o,a){var i=r.type,c=re(i),s=ne(i),f=te(i),u=s?i.render:i,p=c?ae(u,t,0,o,a):f?e(u,t,n,o,a):ie(u,!0,t,n,o,a);try{p.displayName=G(u)}catch(e){}p.ComponentForHooksTracking=r,l(p,u);var d=n.memo(s?n.forwardRef(p):p,r.compare);try{d.displayName=t}catch(e){}return l(d,r),d}(r,t,n,o,a):ne(r)?function(e,r,t,n,o){var a=e.render,i=te(a),c=i?a.type:a,s=ie(c,i,r,t,n,o);s.displayName=G(c),s.ComponentForHooksTracking=c,l(s,c);var f=t.forwardRef(i?t.memo(s,a.compare):s);try{f.displayName=r}catch(e){}return l(f,e),f}(r,t,n,o,a):re(r)?ae(r,t,0,o,a):ie(r,!1,t,n,o,a)}function ue(e,r,t,n,o,a){if(e.has(r))return e.get(r);var i=fe(0,r,t,n,o,a);return e.set(r,i),i}function pe(e){return!!e&&("function"==typeof e||(te(e)?pe(e.type):ne(e)?pe(e.render):void 0))}var le={useState:{path:"0"},useReducer:{path:"0"},useContext:!0,useMemo:!0};function de(e,r){var t=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=console.group,t=console.groupEnd;e.collapseGroups?r=console.groupCollapsed:e.onlyLogs&&(r=console.log,t=U);var n=e.notifier||q("hotReloadBufferMs"in e?e.hotReloadBufferMs:500);return m({include:null,exclude:null,notifier:n,onlyLogs:!1,consoleLog:console.log,consoleGroup:r,consoleGroupEnd:t,logOnDifferentValues:!1,logOwnerReasons:!1,trackHooks:!0,titleColor:"#058",diffNameColor:"blue",diffPathColor:"red",trackExtraHooks:[],trackAllPureComponents:!1},e)}(r),n=e.createElement,o=e.createFactory,a=new WeakMap,i=new WeakMap,c={current:[]},s=null;if(e.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED&&Object.defineProperty(e.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,"current",{get:function(){return s},set:function(e){s=e,c.current=[]}}),e.createElement=function(r){for(var o=null,s=null,f=null,u=arguments.length,p=new Array(u>1?u-1:0),l=1;l syntax always produces a *NEW* immutable React element so a component that receives as props always re-renders.).',\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} result]` : `${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 its values are all equal.`,\r\n diffObjType === 'props' ?\r\n 'This could have been avoided by making the component pure, or by preventing its father from re-rendering.' :\r\n 'This usually means this component called setState when no changes in its 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, ownerDataMap} = 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\r\n if(reason.propsDifferences && reason.ownerDifferences){\r\n const prevOwnerData = ownerDataMap.get(prevProps)\r\n const nextOwnerData = ownerDataMap.get(nextProps)\r\n\r\n options.consoleGroup(`Rendered by ${nextOwnerData.displayName}`)\r\n let prefixMessage = 'Re-rendered because'\r\n\r\n if(reason.ownerDifferences.propsDifferences){\r\n logDifference({\r\n Component: nextOwnerData.Component,\r\n displayName: nextOwnerData.displayName,\r\n prefixMessage,\r\n diffObjType: 'props',\r\n differences: reason.ownerDifferences.propsDifferences,\r\n values: {prev: prevOwnerData.props, next: nextOwnerData.props},\r\n options\r\n })\r\n prefixMessage = 'And because'\r\n }\r\n\r\n if(reason.ownerDifferences.stateDifferences){\r\n logDifference({\r\n Component: nextOwnerData.Component,\r\n displayName: nextOwnerData.displayName,\r\n prefixMessage,\r\n diffObjType: 'state',\r\n differences: reason.ownerDifferences.stateDifferences,\r\n values: {prev: prevOwnerData.state, next: nextOwnerData.state},\r\n options\r\n })\r\n }\r\n\r\n if(reason.ownerDifferences.hookDifferences){\r\n reason.ownerDifferences.hookDifferences.forEach(({hookName, differences}, i) =>\r\n logDifference({\r\n Component: nextOwnerData.Component,\r\n displayName: nextOwnerData.displayName,\r\n prefixMessage,\r\n diffObjType: 'hook',\r\n differences,\r\n values: {prev: prevOwnerData.hooks[i].result, next: nextOwnerData.hooks[i].result},\r\n hookName,\r\n options\r\n })\r\n )\r\n }\r\n options.consoleGroupEnd()\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(typeof(module) !== 'undefined' && 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 ('hotReloadBufferMs' in userOptions) ? 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 logOwnerReasons: false,\r\n trackHooks: true,\r\n titleColor: '#058',\r\n diffNameColor: 'blue',\r\n diffPathColor: 'red',\r\n trackExtraHooks: [],\r\n trackAllPureComponents: false,\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 (type.render && getDisplayName(type.render)) ||\r\n (isString(type) ? type : undefined)\r\n )\r\n}\r\n","import {isArray, isPlainObject, isDate, isRegExp, isFunction, isSet, 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 arrayLength = a.length\r\n if(arrayLength !== b.length){\r\n return trackDiff([...a], [...b], diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n const arrayItemDiffs = []\r\n let numberOfDeepEqualsItems = 0\r\n for(let i = arrayLength; i--; i > 0){\r\n const diffEquals = accumulateDeepEqualDiffs(a[i], b[i], arrayItemDiffs, `${pathString}[${i}]`)\r\n if(diffEquals){\r\n numberOfDeepEqualsItems++\r\n }\r\n }\r\n\r\n if(numberOfDeepEqualsItems === arrayLength){\r\n return trackDiff([...a], [...b], diffsAccumulator, pathString, diffTypes.deepEquals)\r\n }\r\n\r\n diffsAccumulator.push(...arrayItemDiffs)\r\n\r\n return trackDiff([...a], [...b], diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isSet(a) && isSet(b)){\r\n if(a.size !== b.size){\r\n return trackDiff(new Set(a), new Set(b), diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n for(const valA of a){\r\n if(!b.has(valA)){\r\n return trackDiff(new Set(a), new Set(b), diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n }\r\n\r\n return trackDiff(new Set(a), new Set(b), diffsAccumulator, pathString, diffTypes.deepEquals)\r\n }\r\n\r\n if(isDate(a) && isDate(b)){\r\n return a.getTime() === b.getTime() ?\r\n trackDiff(new Date(a), new Date(b), diffsAccumulator, pathString, diffTypes.date) :\r\n trackDiff(new Date(a), new Date(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 if(a.type !== b.type){\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n const reactElementPropsAreDeepEqual =\r\n accumulateDeepEqualDiffs(a.props, b.props, [], `${pathString}.props`)\r\n\r\n return reactElementPropsAreDeepEqual ?\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 keysLength = keys.length\r\n if(keysLength !== getKeys(b).length){\r\n return trackDiff({...a}, {...b}, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n for(let i = keysLength; i--; 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 const objectValuesDiffs = []\r\n let numberOfDeepEqualsObjectValues = 0\r\n for(let i = keysLength; i--; i > 0){\r\n const key = keys[i]\r\n const deepEquals = accumulateDeepEqualDiffs(a[key], b[key], objectValuesDiffs, `${pathString}.${key}`)\r\n if(deepEquals){\r\n numberOfDeepEqualsObjectValues++\r\n }\r\n }\r\n\r\n if(numberOfDeepEqualsObjectValues === keysLength){\r\n return trackDiff({...a}, {...b}, diffsAccumulator, pathString, diffTypes.deepEquals)\r\n }\r\n\r\n diffsAccumulator.push(...objectValuesDiffs)\r\n\r\n return 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, ownerDataMap){\r\n const prevOwnerData = ownerDataMap.get(prevProps)\r\n const nextOwnerData = ownerDataMap.get(nextProps)\r\n\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 ownerDifferences: prevOwnerData != null && nextOwnerData != null ? {\r\n propsDifferences: findObjectsDifferences(prevOwnerData.props, nextOwnerData.props),\r\n stateDifferences: findObjectsDifferences(prevOwnerData.state, nextOwnerData.state),\r\n hookDifferences: prevOwnerData.hooks.map(({hookName, result}, i) => ({\r\n hookName,\r\n differences: findObjectsDifferences(result, nextOwnerData.hooks[i].result, {shallow: false})\r\n }))\r\n } : false\r\n }\r\n}\r\n\r\nexport default function getUpdateInfo({Component, displayName, hookName, prevProps, prevState, prevHook, nextProps, nextState, nextHook, options, ownerDataMap}){\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 ownerDataMap,\r\n reason: getUpdateReason(prevProps, prevState, prevHook, nextProps, nextState, nextHook, ownerDataMap)\r\n }\r\n}\r\n","// copied from https://github.com/facebook/react/blob/master/packages/react-reconciler/src/ReactTypeOfMode.js\r\nimport {REACT_FORWARD_REF_TYPE, REACT_MEMO_TYPE} from './consts'\r\n\r\nconst StrictMode = 0b0001\r\n\r\n// based on \"findStrictRoot\" from https://github.com/facebook/react/blob/master/packages/react-reconciler/src/ReactStrictModeWarnings.js\r\n// notice: this is only used for class components. functional components doesn't re-rendered inside strict mode\r\nexport function checkIfInsideAStrictModeTree(reactComponentInstance){\r\n let reactInternalFiber = reactComponentInstance && reactComponentInstance._reactInternalFiber\r\n while(reactInternalFiber){\r\n if(reactInternalFiber.mode & StrictMode){\r\n return true\r\n }\r\n reactInternalFiber = reactInternalFiber.return\r\n }\r\n return false\r\n}\r\n\r\nexport function isReactClassComponent(Component){\r\n return Component.prototype && !!Component.prototype.isReactComponent\r\n}\r\n\r\nexport function isMemoComponent(Component){\r\n return Component.$$typeof === REACT_MEMO_TYPE\r\n}\r\n\r\nexport function isForwardRefComponent(Component){\r\n return Component.$$typeof === REACT_FORWARD_REF_TYPE\r\n}\r\n","import {isMemoComponent} from './utils'\r\n\r\nfunction 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, React, isHookChange}){\r\n if(shouldExclude(displayName, options)){\r\n return false\r\n }\r\n\r\n if(Component.whyDidYouRender === false){\r\n return false\r\n }\r\n\r\n if(isHookChange && (\r\n Component.whyDidYouRender && Component.whyDidYouRender.trackHooks === false\r\n )){\r\n return false\r\n }\r\n\r\n return !!(\r\n Component.whyDidYouRender || (\r\n options.trackAllPureComponents && (\r\n (Component && Component.prototype instanceof React.PureComponent) ||\r\n isMemoComponent(Component)\r\n )\r\n ) ||\r\n shouldInclude(displayName, options)\r\n )\r\n}\r\n","import {defaults} from 'lodash'\r\n\r\nimport {checkIfInsideAStrictModeTree} from '../utils'\r\nimport getUpdateInfo from '../getUpdateInfo'\r\n\r\nexport default function patchClassComponent(ClassComponent, displayName, React, options, ownerDataMap){\r\n class WDYRPatchedClassComponent extends ClassComponent{\r\n constructor(props, context){\r\n super(props, context)\r\n\r\n this._WDYR = {\r\n renderNumber: 0\r\n }\r\n\r\n const origRender = super.render || this.render\r\n // this probably means render is an arrow function or this.render.bind(this) was called on the original class\r\n const renderIsABindedFunction = origRender !== ClassComponent.prototype.render\r\n if(renderIsABindedFunction){\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 this._WDYR.renderNumber++\r\n\r\n if(!('isStrictMode' in this._WDYR)){\r\n this._WDYR.isStrictMode = checkIfInsideAStrictModeTree(this)\r\n }\r\n\r\n // in strict mode- ignore every other render\r\n if(!(this._WDYR.isStrictMode && this._WDYR.renderNumber % 2 === 1)){\r\n if(this._WDYR.prevProps){\r\n const updateInfo = getUpdateInfo({\r\n Component: ClassComponent,\r\n displayName,\r\n prevProps: this._WDYR.prevProps,\r\n prevState: this._WDYR.prevState,\r\n nextProps: this.props,\r\n nextState: this.state,\r\n options,\r\n ownerDataMap\r\n })\r\n\r\n options.notifier(updateInfo)\r\n }\r\n\r\n this._WDYR.prevProps = this.props\r\n this._WDYR.prevState = this.state\r\n }\r\n\r\n return super.render ? super.render() : null\r\n }\r\n }\r\n\r\n try{\r\n WDYRPatchedClassComponent.displayName = displayName\r\n }catch(e){\r\n // not crucial if displayName couldn't be set\r\n }\r\n\r\n defaults(WDYRPatchedClassComponent, ClassComponent)\r\n\r\n return WDYRPatchedClassComponent\r\n}\r\n","import {defaults} from 'lodash'\r\n\r\nimport getUpdateInfo from '../getUpdateInfo'\r\n\r\nconst getFunctionalComponentFromStringComponent = (componentTypeStr, React) => props => (\r\n React.createElement(componentTypeStr, props)\r\n)\r\n\r\nexport default function patchFunctionalOrStrComponent(FunctionalOrStringComponent, isPure, displayName, React, options, ownerDataMap){\r\n const FunctionalComponent = typeof(FunctionalOrStringComponent) === 'string' ?\r\n getFunctionalComponentFromStringComponent(FunctionalOrStringComponent, React) :\r\n FunctionalOrStringComponent\r\n\r\n function WDYRFunctionalComponent(){\r\n const nextProps = arguments[0]\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 updateInfo = getUpdateInfo({\r\n Component: FunctionalComponent,\r\n displayName,\r\n prevProps,\r\n nextProps,\r\n options,\r\n ownerDataMap\r\n })\r\n\r\n const notifiedByHooks = (\r\n !updateInfo.reason.propsDifferences || (\r\n (isPure && updateInfo.reason.propsDifferences.length === 0)\r\n )\r\n )\r\n\r\n if(!notifiedByHooks){\r\n options.notifier(updateInfo)\r\n }\r\n }\r\n\r\n return FunctionalComponent(...arguments)\r\n }\r\n\r\n try{\r\n WDYRFunctionalComponent.displayName = displayName\r\n }catch(e){\r\n // not crucial if displayName couldn't be set\r\n }\r\n\r\n WDYRFunctionalComponent.ComponentForHooksTracking = FunctionalComponent\r\n defaults(WDYRFunctionalComponent, FunctionalComponent)\r\n\r\n return WDYRFunctionalComponent\r\n}\r\n","import {get} 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\nimport patchClassComponent from './patches/patchClassComponent'\r\nimport patchFunctionalOrStrComponent from './patches/patchFunctionalOrStrComponent'\r\nimport patchMemoComponent from './patches/patchMemoComponent'\r\nimport patchForwardRefComponent from './patches/patchForwardRefComponent'\r\n\r\nimport {isForwardRefComponent, isMemoComponent, isReactClassComponent} from './utils'\r\n\r\nconst initialHookValue = Symbol('initial-hook-value')\r\nfunction trackHookChanges(hookName, {path: hookPath}, hookResult, React, options, ownerDataMap, hooksRef){\r\n const nextHook = hookPath ? get(hookResult, hookPath) : hookResult\r\n hooksRef.current.push({hookName, result: nextHook})\r\n const ComponentHookDispatchedFromInstance = (\r\n React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED &&\r\n React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner.current\r\n )\r\n\r\n const prevHookResultRef = React.useRef(initialHookValue)\r\n\r\n if(!ComponentHookDispatchedFromInstance){\r\n return hookResult\r\n }\r\n\r\n const Component = ComponentHookDispatchedFromInstance.type.ComponentForHooksTracking || ComponentHookDispatchedFromInstance.type\r\n const displayName = getDisplayName(Component)\r\n\r\n const isShouldTrack = shouldTrack({Component, displayName, options, React, isHookChange: true})\r\n if(!isShouldTrack){\r\n return hookResult\r\n }\r\n\r\n const prevHookResult = prevHookResultRef.current\r\n prevHookResultRef.current = hookResult\r\n\r\n if(prevHookResult !== initialHookValue){\r\n const notification = getUpdateInfo({\r\n Component: Component,\r\n displayName,\r\n hookName,\r\n prevHook: hookPath ? get(prevHookResult, hookPath) : prevHookResult,\r\n nextHook,\r\n options,\r\n ownerDataMap\r\n })\r\n\r\n if(notification.reason.hookDifferences){\r\n options.notifier(notification)\r\n }\r\n }\r\n\r\n return hookResult\r\n}\r\n\r\nfunction createPatchedComponent(componentsMap, Component, displayName, React, options, ownerDataMap){\r\n if(isMemoComponent(Component)){\r\n return patchMemoComponent(Component, displayName, React, options, ownerDataMap)\r\n }\r\n\r\n if(isForwardRefComponent(Component)){\r\n return patchForwardRefComponent(Component, displayName, React, options, ownerDataMap)\r\n }\r\n\r\n if(isReactClassComponent(Component)){\r\n return patchClassComponent(Component, displayName, React, options, ownerDataMap)\r\n }\r\n\r\n return patchFunctionalOrStrComponent(Component, false, displayName, React, options, ownerDataMap)\r\n}\r\n\r\nfunction getPatchedComponent(componentsMap, Component, displayName, React, options, ownerDataMap){\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, ownerDataMap)\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 const ownerDataMap = new WeakMap()\r\n const hooksRef = {current: []}\r\n\r\n // Intercept assignments to ReactCurrentOwner.current and reset hooksRef\r\n let currentOwner = null\r\n if(React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED){\r\n Object.defineProperty(React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner, 'current', {\r\n get(){\r\n return currentOwner\r\n },\r\n set(value){\r\n currentOwner = value\r\n hooksRef.current = []\r\n }\r\n })\r\n }\r\n\r\n React.createElement = function(componentNameOrComponent, ...rest){\r\n let isShouldTrack = null\r\n let displayName = null\r\n let WDYRPatchedComponent = null\r\n\r\n try{\r\n isShouldTrack = (\r\n (\r\n typeof componentNameOrComponent === 'function' ||\r\n isMemoComponent(componentNameOrComponent) ||\r\n isForwardRefComponent(componentNameOrComponent)\r\n ) &&\r\n shouldTrack({Component: componentNameOrComponent, displayName: getDisplayName(componentNameOrComponent), React, options})\r\n )\r\n\r\n if(isShouldTrack){\r\n displayName = (\r\n componentNameOrComponent &&\r\n componentNameOrComponent.whyDidYouRender &&\r\n componentNameOrComponent.whyDidYouRender.customName ||\r\n getDisplayName(componentNameOrComponent)\r\n )\r\n\r\n WDYRPatchedComponent = getPatchedComponent(componentsMap, componentNameOrComponent, displayName, React, options, ownerDataMap)\r\n\r\n const element = origCreateElement.apply(React, [WDYRPatchedComponent, ...rest])\r\n if(options.logOwnerReasons){\r\n const OwnerInstance = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner.current\r\n if(OwnerInstance != null){\r\n const Component = OwnerInstance.type.ComponentForHooksTracking || OwnerInstance.type\r\n const displayName = getDisplayName(Component)\r\n ownerDataMap.set(element.props, {\r\n Component,\r\n displayName,\r\n props: OwnerInstance.pendingProps,\r\n state: OwnerInstance.stateNode != null ? OwnerInstance.stateNode.state : null,\r\n hooks: hooksRef.current\r\n })\r\n }\r\n }\r\n\r\n return element\r\n }\r\n }\r\n catch(e){\r\n options.consoleLog('whyDidYouRender error. Please file a bug at https://github.com/welldone-software/why-did-you-render/issues.', {\r\n errorInfo: {\r\n error: e,\r\n componentNameOrComponent,\r\n rest,\r\n options,\r\n isShouldTrack,\r\n displayName,\r\n WDYRPatchedComponent\r\n }\r\n })\r\n }\r\n\r\n return origCreateElement.apply(React, [componentNameOrComponent, ...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 if(options.trackHooks){\r\n const nativeHooks = Object.entries(hooksConfig).map(([hookName, hookTrackingConfig]) => {\r\n return [React, hookName, hookTrackingConfig]\r\n })\r\n\r\n const hooksToTrack = [\r\n ...nativeHooks,\r\n ...options.trackExtraHooks\r\n ]\r\n\r\n hooksToTrack.forEach(([hookParent, hookName, hookTrackingConfig = {}]) => {\r\n const originalHook = hookParent[hookName]\r\n const newHookName = hookName[0].toUpperCase() + hookName.slice(1)\r\n const newHook = function(...args){\r\n const hookResult = originalHook.call(this, ...args)\r\n trackHookChanges(hookName, hookTrackingConfig, hookResult, React, options, ownerDataMap, hooksRef)\r\n return hookResult\r\n }\r\n Object.defineProperty(newHook, 'name', {value: newHookName, writable: false})\r\n Object.assign(newHook, {originalHook})\r\n hookParent[hookName] = newHook\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\r\n componentsMap = null\r\n\r\n const hooksToRevert = [\r\n ...Object.keys(hooksConfig).map(hookName => [React, hookName]),\r\n ...options.trackExtraHooks\r\n ]\r\n hooksToRevert.forEach(([hookParent, hookName]) => {\r\n if(hookParent[hookName].originalHook){\r\n hookParent[hookName] = hookParent[hookName].originalHook\r\n }\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","import {defaults} from 'lodash'\r\n\r\nimport getDisplayName from '../getDisplayName'\r\n\r\nimport {isForwardRefComponent, isMemoComponent, isReactClassComponent} from '../utils'\r\nimport patchClassComponent from './patchClassComponent'\r\nimport patchFunctionalOrStrComponent from './patchFunctionalOrStrComponent'\r\n\r\nexport default function patchMemoComponent(MemoComponent, displayName, React, options, ownerDataMap){\r\n const {type: InnerMemoComponent} = MemoComponent\r\n\r\n const isInnerMemoComponentAClassComponent = isReactClassComponent(InnerMemoComponent)\r\n const isInnerMemoComponentForwardRefs = isForwardRefComponent(InnerMemoComponent)\r\n const isInnerMemoComponentAnotherMemoComponent = isMemoComponent(InnerMemoComponent)\r\n\r\n const WrappedFunctionalComponent = isInnerMemoComponentForwardRefs ?\r\n InnerMemoComponent.render :\r\n InnerMemoComponent\r\n\r\n const PatchedInnerComponent = isInnerMemoComponentAClassComponent ?\r\n patchClassComponent(WrappedFunctionalComponent, displayName, React, options, ownerDataMap) :\r\n (isInnerMemoComponentAnotherMemoComponent ?\r\n patchMemoComponent(WrappedFunctionalComponent, displayName, React, options, ownerDataMap) :\r\n patchFunctionalOrStrComponent(WrappedFunctionalComponent, true, displayName, React, options, ownerDataMap)\r\n )\r\n\r\n try{\r\n PatchedInnerComponent.displayName = getDisplayName(WrappedFunctionalComponent)\r\n }catch(e){\r\n // not crucial if displayName couldn't be set\r\n }\r\n\r\n PatchedInnerComponent.ComponentForHooksTracking = MemoComponent\r\n defaults(PatchedInnerComponent, WrappedFunctionalComponent)\r\n\r\n const WDYRMemoizedFunctionalComponent = React.memo(\r\n isInnerMemoComponentForwardRefs ? React.forwardRef(PatchedInnerComponent) : PatchedInnerComponent,\r\n MemoComponent.compare\r\n )\r\n\r\n try{\r\n WDYRMemoizedFunctionalComponent.displayName = displayName\r\n }catch(e){\r\n // not crucial if displayName couldn't be set\r\n }\r\n\r\n defaults(WDYRMemoizedFunctionalComponent, MemoComponent)\r\n\r\n return WDYRMemoizedFunctionalComponent\r\n}\r\n","import {defaults} from 'lodash'\r\n\r\nimport getDisplayName from '../getDisplayName'\r\nimport {isMemoComponent} from '../utils'\r\nimport patchFunctionalOrStrComponent from './patchFunctionalOrStrComponent'\r\n\r\nexport default function patchForwardRefComponent(ForwardRefComponent, displayName, React, options, ownerDataMap){\r\n const {render: InnerForwardRefComponent} = ForwardRefComponent\r\n\r\n const isInnerComponentMemoized = isMemoComponent(InnerForwardRefComponent)\r\n const WrappedFunctionalComponent = isInnerComponentMemoized ?\r\n InnerForwardRefComponent.type : InnerForwardRefComponent\r\n\r\n const WDYRWrappedByReactForwardRefFunctionalComponent = (\r\n patchFunctionalOrStrComponent(WrappedFunctionalComponent, isInnerComponentMemoized, displayName, React, options, ownerDataMap)\r\n )\r\n\r\n WDYRWrappedByReactForwardRefFunctionalComponent.displayName = getDisplayName(WrappedFunctionalComponent)\r\n WDYRWrappedByReactForwardRefFunctionalComponent.ComponentForHooksTracking = WrappedFunctionalComponent\r\n defaults(WDYRWrappedByReactForwardRefFunctionalComponent, WrappedFunctionalComponent)\r\n\r\n const WDYRForwardRefFunctionalComponent = React.forwardRef(\r\n isInnerComponentMemoized ?\r\n React.memo(WDYRWrappedByReactForwardRefFunctionalComponent, InnerForwardRefComponent.compare) :\r\n WDYRWrappedByReactForwardRefFunctionalComponent\r\n )\r\n\r\n try{\r\n WDYRForwardRefFunctionalComponent.displayName = displayName\r\n }catch(e){\r\n // not crucial if displayName couldn't be set\r\n }\r\n\r\n defaults(WDYRForwardRefFunctionalComponent, ForwardRefComponent)\r\n\r\n return WDYRForwardRefFunctionalComponent\r\n}\r\n","import whyDidYouRender from './whyDidYouRender'\r\nimport defaultNotifier from './defaultNotifier'\r\n\r\nwhyDidYouRender.defaultNotifier = defaultNotifier\r\nexport default whyDidYouRender\r\n"],"names":["diffTypes","hasSymbol","Symbol","REACT_MEMO_TYPE","REACT_FORWARD_REF_TYPE","diffTypesDescriptions","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","ownerDataMap","logOnDifferentValues","whyDidYouRender","propsDifferences","some","diff","stateDifferences","hookDifferences","shouldLog","titleColor","ownerDifferences","prevOwnerData","get","nextOwnerData","props","state","i","hooks","result","createDefaultNotifier","hotReloadBufferMs","module","hot","addStatusHandler","status","setTimeout","emptyFn","getDisplayName","type","name","render","_isString","undefined","hasElementType","Element","REACT_ELEMENT_TYPE","isReactElement","object","$$typeof","trackDiff","a","b","diffsAccumulator","push","calculateDeepEqualDiffs","initialPathString","diffs","accumulateDeepEqualDiffs","_isArray","arrayLength","arrayItemDiffs","numberOfDeepEqualsItems","diffEquals","_isSet","size","Set","valA","has","_isDate","getTime","Date","_isRegExp","toString","reactElementPropsAreDeepEqual","_isFunction","_isPlainObject","keys","_keys","keysLength","_has","objectValuesDiffs","numberOfDeepEqualsObjectValues","key","deepEquals","error","message","match","number","console","warn","emptyObject","findObjectsDifferences","userPrevObj","userNextObj","shallow","prevObj","nextObj","keysOfBothObjects","Object","_reduce","deepEqualDiffs","getUpdateReason","map","getUpdateInfo","isReactClassComponent","prototype","isReactComponent","isMemoComponent","isForwardRefComponent","shouldTrack","React","isHookChange","exclude","regex","test","shouldExclude","trackHooks","trackAllPureComponents","PureComponent","include","shouldInclude","patchClassComponent","ClassComponent","WDYRPatchedClassComponent","context","_WDYR","renderNumber","origRender","_get","_this","apply","this","isStrictMode","reactComponentInstance","reactInternalFiber","_reactInternalFiber","mode","checkIfInsideAStrictModeTree","notifier","e","patchFunctionalOrStrComponent","FunctionalOrStringComponent","isPure","FunctionalComponent","componentTypeStr","createElement","getFunctionalComponentFromStringComponent","WDYRFunctionalComponent","arguments","ref","useRef","current","notifiedByHooks","ComponentForHooksTracking","initialHookValue","trackHookChanges","hookResult","hooksRef","hookPath","path","ComponentHookDispatchedFromInstance","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","ReactCurrentOwner","prevHookResultRef","prevHookResult","notification","createPatchedComponent","componentsMap","patchMemoComponent","MemoComponent","InnerMemoComponent","isInnerMemoComponentAClassComponent","isInnerMemoComponentForwardRefs","isInnerMemoComponentAnotherMemoComponent","WrappedFunctionalComponent","PatchedInnerComponent","WDYRMemoizedFunctionalComponent","memo","forwardRef","compare","ForwardRefComponent","InnerForwardRefComponent","isInnerComponentMemoized","WDYRWrappedByReactForwardRefFunctionalComponent","WDYRForwardRefFunctionalComponent","patchForwardRefComponent","getPatchedComponent","WDYRPatchedComponent","set","hooksConfig","useState","useReducer","useContext","useMemo","userOptions","group","groupEnd","collapseGroups","groupCollapsed","onlyLogs","log","logOwnerReasons","trackExtraHooks","normalizeOptions","origCreateElement","origCreateFactory","createFactory","WeakMap","currentOwner","defineProperty","value","componentNameOrComponent","isShouldTrack","rest","customName","element","OwnerInstance","pendingProps","stateNode","errorInfo","assign","factory","bind","nativeHooks","entries","hookTrackingConfig","hookParent","originalHook","newHookName","toUpperCase","slice","newHook","args","call","writable","__REVERT_WHY_DID_YOU_RENDER__"],"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/utils.js","../../src/shouldTrack.js","../../src/patches/patchClassComponent.js","../../src/patches/patchFunctionalOrStrComponent.js","../../src/whyDidYouRender.js","../../src/patches/patchMemoComponent.js","../../src/patches/patchForwardRefComponent.js","../../src/index.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\r\n// copied from packages/shared/ReactSymbols.js in https://github.com/facebook/react\r\nconst hasSymbol = typeof Symbol === 'function' && Symbol.for\r\nexport const REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3\r\nexport const REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0\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 (remember that the syntax always produces a *NEW* immutable React element so a component that receives as props always re-renders.).',\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} result]` : `${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 its values are all equal.`,\r\n diffObjType === 'props' ?\r\n 'This could have been avoided by making the component pure, or by preventing its father from re-rendering.' :\r\n 'This usually means this component called setState when no changes in its 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, ownerDataMap} = 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\r\n if(reason.propsDifferences && reason.ownerDifferences){\r\n const prevOwnerData = ownerDataMap.get(prevProps)\r\n const nextOwnerData = ownerDataMap.get(nextProps)\r\n\r\n options.consoleGroup(`Rendered by ${nextOwnerData.displayName}`)\r\n let prefixMessage = 'Re-rendered because'\r\n\r\n if(reason.ownerDifferences.propsDifferences){\r\n logDifference({\r\n Component: nextOwnerData.Component,\r\n displayName: nextOwnerData.displayName,\r\n prefixMessage,\r\n diffObjType: 'props',\r\n differences: reason.ownerDifferences.propsDifferences,\r\n values: {prev: prevOwnerData.props, next: nextOwnerData.props},\r\n options\r\n })\r\n prefixMessage = 'And because'\r\n }\r\n\r\n if(reason.ownerDifferences.stateDifferences){\r\n logDifference({\r\n Component: nextOwnerData.Component,\r\n displayName: nextOwnerData.displayName,\r\n prefixMessage,\r\n diffObjType: 'state',\r\n differences: reason.ownerDifferences.stateDifferences,\r\n values: {prev: prevOwnerData.state, next: nextOwnerData.state},\r\n options\r\n })\r\n }\r\n\r\n if(reason.ownerDifferences.hookDifferences){\r\n reason.ownerDifferences.hookDifferences.forEach(({hookName, differences}, i) =>\r\n logDifference({\r\n Component: nextOwnerData.Component,\r\n displayName: nextOwnerData.displayName,\r\n prefixMessage,\r\n diffObjType: 'hook',\r\n differences,\r\n values: {prev: prevOwnerData.hooks[i].result, next: nextOwnerData.hooks[i].result},\r\n hookName,\r\n options\r\n })\r\n )\r\n }\r\n options.consoleGroupEnd()\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(typeof(module) !== 'undefined' && 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 ('hotReloadBufferMs' in userOptions) ? 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 logOwnerReasons: false,\r\n trackHooks: true,\r\n titleColor: '#058',\r\n diffNameColor: 'blue',\r\n diffPathColor: 'red',\r\n trackExtraHooks: [],\r\n trackAllPureComponents: false,\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 (type.render && getDisplayName(type.render)) ||\r\n (isString(type) ? type : undefined)\r\n )\r\n}\r\n","import {isArray, isPlainObject, isDate, isRegExp, isFunction, isSet, 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 arrayLength = a.length\r\n if(arrayLength !== b.length){\r\n return trackDiff([...a], [...b], diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n const arrayItemDiffs = []\r\n let numberOfDeepEqualsItems = 0\r\n for(let i = arrayLength; i--; i > 0){\r\n const diffEquals = accumulateDeepEqualDiffs(a[i], b[i], arrayItemDiffs, `${pathString}[${i}]`)\r\n if(diffEquals){\r\n numberOfDeepEqualsItems++\r\n }\r\n }\r\n\r\n if(numberOfDeepEqualsItems === arrayLength){\r\n return trackDiff([...a], [...b], diffsAccumulator, pathString, diffTypes.deepEquals)\r\n }\r\n\r\n diffsAccumulator.push(...arrayItemDiffs)\r\n\r\n return trackDiff([...a], [...b], diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isSet(a) && isSet(b)){\r\n if(a.size !== b.size){\r\n return trackDiff(new Set(a), new Set(b), diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n for(const valA of a){\r\n if(!b.has(valA)){\r\n return trackDiff(new Set(a), new Set(b), diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n }\r\n\r\n return trackDiff(new Set(a), new Set(b), diffsAccumulator, pathString, diffTypes.deepEquals)\r\n }\r\n\r\n if(isDate(a) && isDate(b)){\r\n return a.getTime() === b.getTime() ?\r\n trackDiff(new Date(a), new Date(b), diffsAccumulator, pathString, diffTypes.date) :\r\n trackDiff(new Date(a), new Date(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 if(a.type !== b.type){\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n const reactElementPropsAreDeepEqual =\r\n accumulateDeepEqualDiffs(a.props, b.props, [], `${pathString}.props`)\r\n\r\n return reactElementPropsAreDeepEqual ?\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 keysLength = keys.length\r\n if(keysLength !== getKeys(b).length){\r\n return trackDiff({...a}, {...b}, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n for(let i = keysLength; i--; 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 const objectValuesDiffs = []\r\n let numberOfDeepEqualsObjectValues = 0\r\n for(let i = keysLength; i--; i > 0){\r\n const key = keys[i]\r\n const deepEquals = accumulateDeepEqualDiffs(a[key], b[key], objectValuesDiffs, `${pathString}.${key}`)\r\n if(deepEquals){\r\n numberOfDeepEqualsObjectValues++\r\n }\r\n }\r\n\r\n if(numberOfDeepEqualsObjectValues === keysLength){\r\n return trackDiff({...a}, {...b}, diffsAccumulator, pathString, diffTypes.deepEquals)\r\n }\r\n\r\n diffsAccumulator.push(...objectValuesDiffs)\r\n\r\n return 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 getOwnerDifferences({prevOwnerData, nextOwnerData}){\r\n if(!prevOwnerData || !nextOwnerData){\r\n return false\r\n }\r\n\r\n const hookDifferences = prevOwnerData.hooks.map(({hookName, result}, i) => ({\r\n hookName,\r\n differences: findObjectsDifferences(result, nextOwnerData.hooks[i].result, {shallow: false})\r\n }))\r\n\r\n return {\r\n propsDifferences: findObjectsDifferences(prevOwnerData.props, nextOwnerData.props),\r\n stateDifferences: findObjectsDifferences(prevOwnerData.state, nextOwnerData.state),\r\n hookDifferences: hookDifferences.length > 0 ? hookDifferences : false\r\n }\r\n}\r\n\r\nfunction getUpdateReason(prevProps, prevState, prevHook, nextProps, nextState, nextHook, ownerDataMap){\r\n const prevOwnerData = ownerDataMap.get(prevProps)\r\n const nextOwnerData = ownerDataMap.get(nextProps)\r\n\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 ownerDifferences: getOwnerDifferences({prevOwnerData, nextOwnerData})\r\n }\r\n}\r\n\r\nexport default function getUpdateInfo({Component, displayName, hookName, prevProps, prevState, prevHook, nextProps, nextState, nextHook, options, ownerDataMap}){\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 ownerDataMap,\r\n reason: getUpdateReason(prevProps, prevState, prevHook, nextProps, nextState, nextHook, ownerDataMap)\r\n }\r\n}\r\n","// copied from https://github.com/facebook/react/blob/master/packages/react-reconciler/src/ReactTypeOfMode.js\r\nimport {REACT_FORWARD_REF_TYPE, REACT_MEMO_TYPE} from './consts'\r\n\r\nconst StrictMode = 0b0001\r\n\r\n// based on \"findStrictRoot\" from https://github.com/facebook/react/blob/master/packages/react-reconciler/src/ReactStrictModeWarnings.js\r\n// notice: this is only used for class components. functional components doesn't re-rendered inside strict mode\r\nexport function checkIfInsideAStrictModeTree(reactComponentInstance){\r\n let reactInternalFiber = reactComponentInstance && reactComponentInstance._reactInternalFiber\r\n while(reactInternalFiber){\r\n if(reactInternalFiber.mode & StrictMode){\r\n return true\r\n }\r\n reactInternalFiber = reactInternalFiber.return\r\n }\r\n return false\r\n}\r\n\r\nexport function isReactClassComponent(Component){\r\n return Component.prototype && !!Component.prototype.isReactComponent\r\n}\r\n\r\nexport function isMemoComponent(Component){\r\n return Component.$$typeof === REACT_MEMO_TYPE\r\n}\r\n\r\nexport function isForwardRefComponent(Component){\r\n return Component.$$typeof === REACT_FORWARD_REF_TYPE\r\n}\r\n","import {isMemoComponent} from './utils'\r\n\r\nfunction 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, React, isHookChange}){\r\n if(shouldExclude(displayName, options)){\r\n return false\r\n }\r\n\r\n if(Component.whyDidYouRender === false){\r\n return false\r\n }\r\n\r\n if(isHookChange && (\r\n Component.whyDidYouRender && Component.whyDidYouRender.trackHooks === false\r\n )){\r\n return false\r\n }\r\n\r\n return !!(\r\n Component.whyDidYouRender || (\r\n options.trackAllPureComponents && (\r\n (Component && Component.prototype instanceof React.PureComponent) ||\r\n isMemoComponent(Component)\r\n )\r\n ) ||\r\n shouldInclude(displayName, options)\r\n )\r\n}\r\n","import {defaults} from 'lodash'\r\n\r\nimport {checkIfInsideAStrictModeTree} from '../utils'\r\nimport getUpdateInfo from '../getUpdateInfo'\r\n\r\nexport default function patchClassComponent(ClassComponent, displayName, React, options, ownerDataMap){\r\n class WDYRPatchedClassComponent extends ClassComponent{\r\n constructor(props, context){\r\n super(props, context)\r\n\r\n this._WDYR = {\r\n renderNumber: 0\r\n }\r\n\r\n const origRender = super.render || this.render\r\n // this probably means render is an arrow function or this.render.bind(this) was called on the original class\r\n const renderIsABindedFunction = origRender !== ClassComponent.prototype.render\r\n if(renderIsABindedFunction){\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 this._WDYR.renderNumber++\r\n\r\n if(!('isStrictMode' in this._WDYR)){\r\n this._WDYR.isStrictMode = checkIfInsideAStrictModeTree(this)\r\n }\r\n\r\n // in strict mode- ignore every other render\r\n if(!(this._WDYR.isStrictMode && this._WDYR.renderNumber % 2 === 1)){\r\n if(this._WDYR.prevProps){\r\n const updateInfo = getUpdateInfo({\r\n Component: ClassComponent,\r\n displayName,\r\n prevProps: this._WDYR.prevProps,\r\n prevState: this._WDYR.prevState,\r\n nextProps: this.props,\r\n nextState: this.state,\r\n options,\r\n ownerDataMap\r\n })\r\n\r\n options.notifier(updateInfo)\r\n }\r\n\r\n this._WDYR.prevProps = this.props\r\n this._WDYR.prevState = this.state\r\n }\r\n\r\n return super.render ? super.render() : null\r\n }\r\n }\r\n\r\n try{\r\n WDYRPatchedClassComponent.displayName = displayName\r\n }catch(e){\r\n // not crucial if displayName couldn't be set\r\n }\r\n\r\n defaults(WDYRPatchedClassComponent, ClassComponent)\r\n\r\n return WDYRPatchedClassComponent\r\n}\r\n","import {defaults} from 'lodash'\r\n\r\nimport getUpdateInfo from '../getUpdateInfo'\r\n\r\nconst getFunctionalComponentFromStringComponent = (componentTypeStr, React) => props => (\r\n React.createElement(componentTypeStr, props)\r\n)\r\n\r\nexport default function patchFunctionalOrStrComponent(FunctionalOrStringComponent, isPure, displayName, React, options, ownerDataMap){\r\n const FunctionalComponent = typeof(FunctionalOrStringComponent) === 'string' ?\r\n getFunctionalComponentFromStringComponent(FunctionalOrStringComponent, React) :\r\n FunctionalOrStringComponent\r\n\r\n function WDYRFunctionalComponent(){\r\n const nextProps = arguments[0]\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 updateInfo = getUpdateInfo({\r\n Component: FunctionalComponent,\r\n displayName,\r\n prevProps,\r\n nextProps,\r\n options,\r\n ownerDataMap\r\n })\r\n\r\n const notifiedByHooks = (\r\n !updateInfo.reason.propsDifferences || (\r\n (isPure && updateInfo.reason.propsDifferences.length === 0)\r\n )\r\n )\r\n\r\n if(!notifiedByHooks){\r\n options.notifier(updateInfo)\r\n }\r\n }\r\n\r\n return FunctionalComponent(...arguments)\r\n }\r\n\r\n try{\r\n WDYRFunctionalComponent.displayName = displayName\r\n }catch(e){\r\n // not crucial if displayName couldn't be set\r\n }\r\n\r\n WDYRFunctionalComponent.ComponentForHooksTracking = FunctionalComponent\r\n defaults(WDYRFunctionalComponent, FunctionalComponent)\r\n\r\n return WDYRFunctionalComponent\r\n}\r\n","import {get} 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\nimport patchClassComponent from './patches/patchClassComponent'\r\nimport patchFunctionalOrStrComponent from './patches/patchFunctionalOrStrComponent'\r\nimport patchMemoComponent from './patches/patchMemoComponent'\r\nimport patchForwardRefComponent from './patches/patchForwardRefComponent'\r\n\r\nimport {isForwardRefComponent, isMemoComponent, isReactClassComponent} from './utils'\r\n\r\nconst initialHookValue = Symbol('initial-hook-value')\r\nfunction trackHookChanges(hookName, {path: hookPath}, hookResult, React, options, ownerDataMap, hooksRef){\r\n const nextHook = hookPath ? get(hookResult, hookPath) : hookResult\r\n hooksRef.current.push({hookName, result: nextHook})\r\n const ComponentHookDispatchedFromInstance = (\r\n React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED &&\r\n React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner.current\r\n )\r\n\r\n const prevHookResultRef = React.useRef(initialHookValue)\r\n\r\n if(!ComponentHookDispatchedFromInstance){\r\n return hookResult\r\n }\r\n\r\n const Component = ComponentHookDispatchedFromInstance.type.ComponentForHooksTracking || ComponentHookDispatchedFromInstance.type\r\n const displayName = getDisplayName(Component)\r\n\r\n const isShouldTrack = shouldTrack({Component, displayName, options, React, isHookChange: true})\r\n if(!isShouldTrack){\r\n return hookResult\r\n }\r\n\r\n const prevHookResult = prevHookResultRef.current\r\n prevHookResultRef.current = hookResult\r\n\r\n if(prevHookResult !== initialHookValue){\r\n const notification = getUpdateInfo({\r\n Component: Component,\r\n displayName,\r\n hookName,\r\n prevHook: hookPath ? get(prevHookResult, hookPath) : prevHookResult,\r\n nextHook,\r\n options,\r\n ownerDataMap\r\n })\r\n\r\n if(notification.reason.hookDifferences){\r\n options.notifier(notification)\r\n }\r\n }\r\n\r\n return hookResult\r\n}\r\n\r\nfunction createPatchedComponent(componentsMap, Component, displayName, React, options, ownerDataMap){\r\n if(isMemoComponent(Component)){\r\n return patchMemoComponent(Component, displayName, React, options, ownerDataMap)\r\n }\r\n\r\n if(isForwardRefComponent(Component)){\r\n return patchForwardRefComponent(Component, displayName, React, options, ownerDataMap)\r\n }\r\n\r\n if(isReactClassComponent(Component)){\r\n return patchClassComponent(Component, displayName, React, options, ownerDataMap)\r\n }\r\n\r\n return patchFunctionalOrStrComponent(Component, false, displayName, React, options, ownerDataMap)\r\n}\r\n\r\nfunction getPatchedComponent(componentsMap, Component, displayName, React, options, ownerDataMap){\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, ownerDataMap)\r\n\r\n componentsMap.set(Component, WDYRPatchedComponent)\r\n return WDYRPatchedComponent\r\n}\r\n\r\nfunction getIsSupportedComponentType(Comp){\r\n if(!Comp){\r\n return false\r\n }\r\n\r\n if(typeof Comp === 'function'){\r\n return true\r\n }\r\n\r\n if(isMemoComponent(Comp)){\r\n return getIsSupportedComponentType(Comp.type)\r\n }\r\n\r\n if(isForwardRefComponent(Comp)){\r\n return getIsSupportedComponentType(Comp.render)\r\n }\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 const ownerDataMap = new WeakMap()\r\n const hooksRef = {current: []}\r\n\r\n // Intercept assignments to ReactCurrentOwner.current and reset hooksRef\r\n let currentOwner = null\r\n if(React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED){\r\n Object.defineProperty(React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner, 'current', {\r\n get(){\r\n return currentOwner\r\n },\r\n set(value){\r\n currentOwner = value\r\n hooksRef.current = []\r\n }\r\n })\r\n }\r\n\r\n React.createElement = function(componentNameOrComponent, ...rest){\r\n let isShouldTrack = null\r\n let displayName = null\r\n let WDYRPatchedComponent = null\r\n\r\n try{\r\n isShouldTrack = (\r\n getIsSupportedComponentType(componentNameOrComponent) &&\r\n shouldTrack({Component: componentNameOrComponent, displayName: getDisplayName(componentNameOrComponent), React, options})\r\n )\r\n\r\n if(isShouldTrack){\r\n displayName = (\r\n componentNameOrComponent &&\r\n componentNameOrComponent.whyDidYouRender &&\r\n componentNameOrComponent.whyDidYouRender.customName ||\r\n getDisplayName(componentNameOrComponent)\r\n )\r\n\r\n WDYRPatchedComponent = getPatchedComponent(componentsMap, componentNameOrComponent, displayName, React, options, ownerDataMap)\r\n\r\n const element = origCreateElement.apply(React, [WDYRPatchedComponent, ...rest])\r\n if(options.logOwnerReasons){\r\n const OwnerInstance = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner.current\r\n if(OwnerInstance){\r\n const Component = OwnerInstance.type.ComponentForHooksTracking || OwnerInstance.type\r\n const displayName = getDisplayName(Component)\r\n ownerDataMap.set(element.props, {\r\n Component,\r\n displayName,\r\n props: OwnerInstance.pendingProps,\r\n state: OwnerInstance.stateNode != null ? OwnerInstance.stateNode.state : null,\r\n hooks: hooksRef.current\r\n })\r\n }\r\n }\r\n\r\n return element\r\n }\r\n }\r\n catch(e){\r\n options.consoleLog('whyDidYouRender error. Please file a bug at https://github.com/welldone-software/why-did-you-render/issues.', {\r\n errorInfo: {\r\n error: e,\r\n componentNameOrComponent,\r\n rest,\r\n options,\r\n isShouldTrack,\r\n displayName,\r\n WDYRPatchedComponent\r\n }\r\n })\r\n }\r\n\r\n return origCreateElement.apply(React, [componentNameOrComponent, ...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 if(options.trackHooks){\r\n const nativeHooks = Object.entries(hooksConfig).map(([hookName, hookTrackingConfig]) => {\r\n return [React, hookName, hookTrackingConfig]\r\n })\r\n\r\n const hooksToTrack = [\r\n ...nativeHooks,\r\n ...options.trackExtraHooks\r\n ]\r\n\r\n hooksToTrack.forEach(([hookParent, hookName, hookTrackingConfig = {}]) => {\r\n const originalHook = hookParent[hookName]\r\n const newHookName = hookName[0].toUpperCase() + hookName.slice(1)\r\n const newHook = function(...args){\r\n const hookResult = originalHook.call(this, ...args)\r\n trackHookChanges(hookName, hookTrackingConfig, hookResult, React, options, ownerDataMap, hooksRef)\r\n return hookResult\r\n }\r\n Object.defineProperty(newHook, 'name', {value: newHookName, writable: false})\r\n Object.assign(newHook, {originalHook})\r\n hookParent[hookName] = newHook\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\r\n componentsMap = null\r\n\r\n const hooksToRevert = [\r\n ...Object.keys(hooksConfig).map(hookName => [React, hookName]),\r\n ...options.trackExtraHooks\r\n ]\r\n hooksToRevert.forEach(([hookParent, hookName]) => {\r\n if(hookParent[hookName].originalHook){\r\n hookParent[hookName] = hookParent[hookName].originalHook\r\n }\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","import {defaults} from 'lodash'\r\n\r\nimport getDisplayName from '../getDisplayName'\r\n\r\nimport {isForwardRefComponent, isMemoComponent, isReactClassComponent} from '../utils'\r\nimport patchClassComponent from './patchClassComponent'\r\nimport patchFunctionalOrStrComponent from './patchFunctionalOrStrComponent'\r\n\r\nexport default function patchMemoComponent(MemoComponent, displayName, React, options, ownerDataMap){\r\n const {type: InnerMemoComponent} = MemoComponent\r\n\r\n const isInnerMemoComponentAClassComponent = isReactClassComponent(InnerMemoComponent)\r\n const isInnerMemoComponentForwardRefs = isForwardRefComponent(InnerMemoComponent)\r\n const isInnerMemoComponentAnotherMemoComponent = isMemoComponent(InnerMemoComponent)\r\n\r\n const WrappedFunctionalComponent = isInnerMemoComponentForwardRefs ?\r\n InnerMemoComponent.render :\r\n InnerMemoComponent\r\n\r\n const PatchedInnerComponent = isInnerMemoComponentAClassComponent ?\r\n patchClassComponent(WrappedFunctionalComponent, displayName, React, options, ownerDataMap) :\r\n (isInnerMemoComponentAnotherMemoComponent ?\r\n patchMemoComponent(WrappedFunctionalComponent, displayName, React, options, ownerDataMap) :\r\n patchFunctionalOrStrComponent(WrappedFunctionalComponent, true, displayName, React, options, ownerDataMap)\r\n )\r\n\r\n try{\r\n PatchedInnerComponent.displayName = getDisplayName(WrappedFunctionalComponent)\r\n }catch(e){\r\n // not crucial if displayName couldn't be set\r\n }\r\n\r\n PatchedInnerComponent.ComponentForHooksTracking = MemoComponent\r\n defaults(PatchedInnerComponent, WrappedFunctionalComponent)\r\n\r\n const WDYRMemoizedFunctionalComponent = React.memo(\r\n isInnerMemoComponentForwardRefs ? React.forwardRef(PatchedInnerComponent) : PatchedInnerComponent,\r\n MemoComponent.compare\r\n )\r\n\r\n try{\r\n WDYRMemoizedFunctionalComponent.displayName = displayName\r\n }catch(e){\r\n // not crucial if displayName couldn't be set\r\n }\r\n\r\n defaults(WDYRMemoizedFunctionalComponent, MemoComponent)\r\n\r\n return WDYRMemoizedFunctionalComponent\r\n}\r\n","import {defaults} from 'lodash'\r\n\r\nimport getDisplayName from '../getDisplayName'\r\nimport {isMemoComponent} from '../utils'\r\nimport patchFunctionalOrStrComponent from './patchFunctionalOrStrComponent'\r\n\r\nexport default function patchForwardRefComponent(ForwardRefComponent, displayName, React, options, ownerDataMap){\r\n const {render: InnerForwardRefComponent} = ForwardRefComponent\r\n\r\n const isInnerComponentMemoized = isMemoComponent(InnerForwardRefComponent)\r\n const WrappedFunctionalComponent = isInnerComponentMemoized ?\r\n InnerForwardRefComponent.type : InnerForwardRefComponent\r\n\r\n const WDYRWrappedByReactForwardRefFunctionalComponent = (\r\n patchFunctionalOrStrComponent(WrappedFunctionalComponent, isInnerComponentMemoized, displayName, React, options, ownerDataMap)\r\n )\r\n\r\n WDYRWrappedByReactForwardRefFunctionalComponent.displayName = getDisplayName(WrappedFunctionalComponent)\r\n WDYRWrappedByReactForwardRefFunctionalComponent.ComponentForHooksTracking = WrappedFunctionalComponent\r\n defaults(WDYRWrappedByReactForwardRefFunctionalComponent, WrappedFunctionalComponent)\r\n\r\n const WDYRForwardRefFunctionalComponent = React.forwardRef(\r\n isInnerComponentMemoized ?\r\n React.memo(WDYRWrappedByReactForwardRefFunctionalComponent, InnerForwardRefComponent.compare) :\r\n WDYRWrappedByReactForwardRefFunctionalComponent\r\n )\r\n\r\n try{\r\n WDYRForwardRefFunctionalComponent.displayName = displayName\r\n }catch(e){\r\n // not crucial if displayName couldn't be set\r\n }\r\n\r\n defaults(WDYRForwardRefFunctionalComponent, ForwardRefComponent)\r\n\r\n return WDYRForwardRefFunctionalComponent\r\n}\r\n","import whyDidYouRender from './whyDidYouRender'\r\nimport defaultNotifier from './defaultNotifier'\r\n\r\nwhyDidYouRender.defaultNotifier = defaultNotifier\r\nexport default whyDidYouRender\r\n"],"names":["diffTypes","hasSymbol","Symbol","REACT_MEMO_TYPE","REACT_FORWARD_REF_TYPE","diffTypesDescriptions","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","ownerDataMap","logOnDifferentValues","whyDidYouRender","propsDifferences","some","diff","stateDifferences","hookDifferences","shouldLog","titleColor","ownerDifferences","prevOwnerData","get","nextOwnerData","props","state","i","hooks","result","createDefaultNotifier","hotReloadBufferMs","module","hot","addStatusHandler","status","setTimeout","emptyFn","getDisplayName","type","name","render","_isString","undefined","hasElementType","Element","REACT_ELEMENT_TYPE","isReactElement","object","$$typeof","trackDiff","a","b","diffsAccumulator","push","calculateDeepEqualDiffs","initialPathString","diffs","accumulateDeepEqualDiffs","_isArray","arrayLength","arrayItemDiffs","numberOfDeepEqualsItems","diffEquals","_isSet","size","Set","valA","has","_isDate","getTime","Date","_isRegExp","toString","reactElementPropsAreDeepEqual","_isFunction","_isPlainObject","keys","_keys","keysLength","_has","objectValuesDiffs","numberOfDeepEqualsObjectValues","key","deepEquals","error","message","match","number","console","warn","emptyObject","findObjectsDifferences","userPrevObj","userNextObj","shallow","prevObj","nextObj","keysOfBothObjects","Object","_reduce","deepEqualDiffs","getOwnerDifferences","map","getUpdateReason","getUpdateInfo","isReactClassComponent","prototype","isReactComponent","isMemoComponent","isForwardRefComponent","shouldTrack","React","isHookChange","exclude","regex","test","shouldExclude","trackHooks","trackAllPureComponents","PureComponent","include","shouldInclude","patchClassComponent","ClassComponent","WDYRPatchedClassComponent","context","_WDYR","renderNumber","origRender","_get","_this","apply","this","isStrictMode","reactComponentInstance","reactInternalFiber","_reactInternalFiber","mode","checkIfInsideAStrictModeTree","notifier","e","patchFunctionalOrStrComponent","FunctionalOrStringComponent","isPure","FunctionalComponent","componentTypeStr","createElement","getFunctionalComponentFromStringComponent","WDYRFunctionalComponent","arguments","ref","useRef","current","notifiedByHooks","ComponentForHooksTracking","initialHookValue","trackHookChanges","hookResult","hooksRef","hookPath","path","ComponentHookDispatchedFromInstance","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","ReactCurrentOwner","prevHookResultRef","prevHookResult","notification","createPatchedComponent","componentsMap","patchMemoComponent","MemoComponent","InnerMemoComponent","isInnerMemoComponentAClassComponent","isInnerMemoComponentForwardRefs","isInnerMemoComponentAnotherMemoComponent","WrappedFunctionalComponent","PatchedInnerComponent","WDYRMemoizedFunctionalComponent","memo","forwardRef","compare","ForwardRefComponent","InnerForwardRefComponent","isInnerComponentMemoized","WDYRWrappedByReactForwardRefFunctionalComponent","WDYRForwardRefFunctionalComponent","patchForwardRefComponent","getPatchedComponent","WDYRPatchedComponent","set","getIsSupportedComponentType","Comp","hooksConfig","useState","useReducer","useContext","useMemo","userOptions","group","groupEnd","collapseGroups","groupCollapsed","onlyLogs","log","logOwnerReasons","trackExtraHooks","normalizeOptions","origCreateElement","origCreateFactory","createFactory","WeakMap","currentOwner","defineProperty","value","componentNameOrComponent","isShouldTrack","rest","customName","element","OwnerInstance","pendingProps","stateNode","errorInfo","assign","factory","bind","nativeHooks","entries","hookTrackingConfig","hookParent","originalHook","newHookName","toUpperCase","slice","newHook","args","call","writable","__REVERT_WHY_DID_YOU_RENDER__"],"mappings":"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"} \ No newline at end of file diff --git a/dist/esm/whyDidYouRender.js b/dist/esm/whyDidYouRender.js index f567ad9..e31ca7d 100644 --- a/dist/esm/whyDidYouRender.js +++ b/dist/esm/whyDidYouRender.js @@ -1,8 +1,8 @@ /** - * @welldone-software/why-did-you-render 4.2.2 + * @welldone-software/why-did-you-render 4.2.3 * MIT Licensed * Generated by Vitali Zaidman (https://github.com/vzaidman) - * Generated at 2020-05-20 + * Generated at 2020-05-30 */ import _get$1 from 'lodash/get'; @@ -152,7 +152,7 @@ function _possibleConstructorReturn(self, call) { function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); - return function () { + return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; @@ -270,9 +270,12 @@ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } -function _createForOfIteratorHelper(o) { +function _createForOfIteratorHelper(o, allowArrayLike) { + var it; + if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { - if (Array.isArray(o) || (o = _unsupportedIterableToArray(o))) { + if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { + if (it) o = it; var i = 0; var F = function () {}; @@ -298,8 +301,7 @@ function _createForOfIteratorHelper(o) { throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } - var it, - normalCompletion = true, + var normalCompletion = true, didErr = false, err; return { @@ -778,6 +780,31 @@ function findObjectsDifferences(userPrevObj, userNextObj) { }, []); } +function getOwnerDifferences(_ref) { + var prevOwnerData = _ref.prevOwnerData, + nextOwnerData = _ref.nextOwnerData; + + if (!prevOwnerData || !nextOwnerData) { + return false; + } + + var hookDifferences = prevOwnerData.hooks.map(function (_ref2, i) { + var hookName = _ref2.hookName, + result = _ref2.result; + return { + hookName: hookName, + differences: findObjectsDifferences(result, nextOwnerData.hooks[i].result, { + shallow: false + }) + }; + }); + return { + propsDifferences: findObjectsDifferences(prevOwnerData.props, nextOwnerData.props), + stateDifferences: findObjectsDifferences(prevOwnerData.state, nextOwnerData.state), + hookDifferences: hookDifferences.length > 0 ? hookDifferences : false + }; +} + function getUpdateReason(prevProps, prevState, prevHook, nextProps, nextState, nextHook, ownerDataMap) { var prevOwnerData = ownerDataMap.get(prevProps); var nextOwnerData = ownerDataMap.get(nextProps); @@ -787,35 +814,25 @@ function getUpdateReason(prevProps, prevState, prevHook, nextProps, nextState, n hookDifferences: findObjectsDifferences(prevHook, nextHook, { shallow: false }), - ownerDifferences: prevOwnerData != null && nextOwnerData != null ? { - propsDifferences: findObjectsDifferences(prevOwnerData.props, nextOwnerData.props), - stateDifferences: findObjectsDifferences(prevOwnerData.state, nextOwnerData.state), - hookDifferences: prevOwnerData.hooks.map(function (_ref, i) { - var hookName = _ref.hookName, - result = _ref.result; - return { - hookName: hookName, - differences: findObjectsDifferences(result, nextOwnerData.hooks[i].result, { - shallow: false - }) - }; - }) - } : false + ownerDifferences: getOwnerDifferences({ + prevOwnerData: prevOwnerData, + nextOwnerData: nextOwnerData + }) }; } -function getUpdateInfo(_ref2) { - var Component = _ref2.Component, - displayName = _ref2.displayName, - hookName = _ref2.hookName, - prevProps = _ref2.prevProps, - prevState = _ref2.prevState, - prevHook = _ref2.prevHook, - nextProps = _ref2.nextProps, - nextState = _ref2.nextState, - nextHook = _ref2.nextHook, - options = _ref2.options, - ownerDataMap = _ref2.ownerDataMap; +function getUpdateInfo(_ref3) { + var Component = _ref3.Component, + displayName = _ref3.displayName, + hookName = _ref3.hookName, + prevProps = _ref3.prevProps, + prevState = _ref3.prevState, + prevHook = _ref3.prevHook, + nextProps = _ref3.nextProps, + nextState = _ref3.nextState, + nextHook = _ref3.nextHook, + options = _ref3.options, + ownerDataMap = _ref3.ownerDataMap; return { Component: Component, displayName: displayName, @@ -900,7 +917,7 @@ function patchClassComponent(ClassComponent, displayName, React, options, ownerD var _super = _createSuper(WDYRPatchedClassComponent); function WDYRPatchedClassComponent(props, context) { - var _this; + var _thisSuper, _this; _classCallCheck(this, WDYRPatchedClassComponent); @@ -909,7 +926,7 @@ function patchClassComponent(ClassComponent, displayName, React, options, ownerD renderNumber: 0 }; - var origRender = _get(_getPrototypeOf(WDYRPatchedClassComponent.prototype), "render", _assertThisInitialized(_this)) || _this.render; // this probably means render is an arrow function or this.render.bind(this) was called on the original class + var origRender = _get((_thisSuper = _assertThisInitialized(_this), _getPrototypeOf(WDYRPatchedClassComponent.prototype)), "render", _thisSuper) || _this.render; // this probably means render is an arrow function or this.render.bind(this) was called on the original class var renderIsABindedFunction = origRender !== ClassComponent.prototype.render; @@ -1145,6 +1162,24 @@ function getPatchedComponent(componentsMap, Component, displayName, React, optio return WDYRPatchedComponent; } +function getIsSupportedComponentType(Comp) { + if (!Comp) { + return false; + } + + if (typeof Comp === 'function') { + return true; + } + + if (isMemoComponent(Comp)) { + return getIsSupportedComponentType(Comp.type); + } + + if (isForwardRefComponent(Comp)) { + return getIsSupportedComponentType(Comp.render); + } +} + var hooksConfig = { useState: { path: '0' @@ -1189,7 +1224,7 @@ function whyDidYouRender(React, userOptions) { } try { - isShouldTrack = (typeof componentNameOrComponent === 'function' || isMemoComponent(componentNameOrComponent) || isForwardRefComponent(componentNameOrComponent)) && shouldTrack({ + isShouldTrack = getIsSupportedComponentType(componentNameOrComponent) && shouldTrack({ Component: componentNameOrComponent, displayName: getDisplayName(componentNameOrComponent), React: React, @@ -1204,7 +1239,7 @@ function whyDidYouRender(React, userOptions) { if (options.logOwnerReasons) { var OwnerInstance = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner.current; - if (OwnerInstance != null) { + if (OwnerInstance) { var Component = OwnerInstance.type.ComponentForHooksTracking || OwnerInstance.type; var _displayName = getDisplayName(Component); diff --git a/dist/esm/whyDidYouRender.min.js b/dist/esm/whyDidYouRender.min.js index 961c486..02a6450 100644 --- a/dist/esm/whyDidYouRender.min.js +++ b/dist/esm/whyDidYouRender.min.js @@ -1,9 +1,9 @@ /** - * @welldone-software/why-did-you-render 4.2.2 + * @welldone-software/why-did-you-render 4.2.3 * MIT Licensed * Generated by Vitali Zaidman (https://github.com/vzaidman) - * Generated at 2020-05-20 + * Generated at 2020-05-30 */ -import e from"lodash/get";import t from"lodash/isString";import r from"lodash/reduce";import n from"lodash/has";import o from"lodash/keys";import a from"lodash/isSet";import i from"lodash/isFunction";import c from"lodash/isRegExp";import s from"lodash/isDate";import f from"lodash/isPlainObject";import u from"lodash/isArray";import p from"lodash/defaults";function l(e,t){for(var r=0;re.length)&&(t=e.length);for(var r=0,n=new Array(t);r=e.length?{done:!0}:{done:!1,value:e[t++]}},e:function(e){throw e},f:r}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var n,o,a=!0,i=!1;return{s:function(){n=e[Symbol.iterator]()},n:function(){var e=n.next();return a=e.done,e},e:function(e){i=!0,o=e},f:function(){try{a||null==n.return||n.return()}finally{if(i)throw o}}}}var S,N="different",j="deepEquals",C="date",x="regex",T="reactElement",P="function",Y="function"==typeof Symbol&&Symbol.for,H=Y?Symbol.for("react.memo"):60115,I=Y?Symbol.for("react.forward_ref"):60112,L=(d(S={},N,"different objects."),d(S,j,"different objects that are equal by value."),d(S,C,"different date objects with the same value."),d(S,x,"different regular expressions with the same value."),d(S,T,"different React elements (remember that the syntax always produces a *NEW* immutable React element so a component that receives as props always re-renders.)."),d(S,P,"different functions with the same name."),S),A=!1;function M(e){var t=e.Component,r=e.displayName,n=e.hookName,o=e.prefixMessage,a=e.diffObjType,i=e.differences,c=e.values,s=e.options;i&&i.length>0?(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," result]"):"".concat(a,"."),"%c").concat(t,"%c"),"color:".concat(s.diffNameColor,";"),"color:".concat(s.diffPathColor,";"),"color:default;"),s.consoleLog("".concat(L[r]," (more info at ").concat(n?"http://bit.ly/wdyr3":"http://bit.ly/wdyr02",")")),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 its values are all equal."),"props"===a?"This could have been avoided by making the component pure, or by preventing its father from re-rendering.":"This usually means this component called setState when no changes in its state actually occurred.","More info at ".concat("http://bit.ly/wdyr02")),s.consoleLog("prev ".concat(a,":"),c.prev," !== ",c.next,":next ".concat(a)))}function W(e){var t=e.Component,r=e.displayName,n=e.hookName,o=e.prevProps,a=e.prevState,i=e.prevHook,c=e.nextProps,s=e.nextState,f=e.nextHook,u=e.reason,p=e.options,l=e.ownerDataMap;if(function(e,t,r){return!A&&(!!r.logOnDifferentValues||(!(!t.whyDidYouRender||!t.whyDidYouRender.logOnDifferentValues)||!(e.propsDifferences&&e.propsDifferences.some((function(e){return e.diffType===N}))||e.stateDifferences&&e.stateDifferences.some((function(e){return e.diffType===N}))||e.hookDifferences&&e.hookDifferences.some((function(e){return e.diffType===N})))))}(u,t,p)){p.consoleGroup("%c".concat(r),"color: ".concat(p.titleColor,";"));var m="Re-rendered because";if(u.propsDifferences&&(M({Component:t,displayName:r,prefixMessage:m,diffObjType:"props",differences:u.propsDifferences,values:{prev:o,next:c},options:p}),m="And because"),u.stateDifferences&&M({Component:t,displayName:r,prefixMessage:m,diffObjType:"state",differences:u.stateDifferences,values:{prev:a,next:s},options:p}),u.hookDifferences&&M({Component:t,displayName:r,prefixMessage:m,diffObjType:"hook",differences:u.hookDifferences,values:{prev:i,next:f},hookName:n,options:p}),u.propsDifferences&&u.ownerDifferences){var y=l.get(o),h=l.get(c);p.consoleGroup("Rendered by ".concat(h.displayName));var v="Re-rendered because";u.ownerDifferences.propsDifferences&&(M({Component:h.Component,displayName:h.displayName,prefixMessage:v,diffObjType:"props",differences:u.ownerDifferences.propsDifferences,values:{prev:y.props,next:h.props},options:p}),v="And because"),u.ownerDifferences.stateDifferences&&M({Component:h.Component,displayName:h.displayName,prefixMessage:v,diffObjType:"state",differences:u.ownerDifferences.stateDifferences,values:{prev:y.state,next:h.state},options:p}),u.ownerDifferences.hookDifferences&&u.ownerDifferences.hookDifferences.forEach((function(e,t){var r=e.hookName,n=e.differences;return M({Component:h.Component,displayName:h.displayName,prefixMessage:v,diffObjType:"hook",differences:n,values:{prev:y.hooks[t].result,next:h.hooks[t].result},hookName:r,options:p})})),p.consoleGroupEnd()}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("http://bit.ly/wdyr02")),p.consoleGroupEnd()}}function F(e){return e&&"undefined"!=typeof module&&module.hot&&module.hot.addStatusHandler&&module.hot.addStatusHandler((function(t){"idle"===t&&(A=!0,setTimeout((function(){A=!1}),e))})),W}var U=function(){};function G(e){return e.displayName||e.name||e.type&&G(e.type)||e.render&&G(e.render)||(t(e)?e:void 0)}var V="undefined"!=typeof Element,B="function"==typeof Symbol&&Symbol.for?Symbol.for("react.element"):60103,$=function(e){return e.$$typeof===B};function q(e,t,r,n,o){return r.push({diffType:o,pathString:n,prevValue:e,nextValue:t}),o!==N}function z(e,t,r){try{var p=[];return function e(t,r,p){var l=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"";if(t===r)return!0;if(!t||!r)return q(t,r,p,l,N);if(u(t)&&u(r)){var d=t.length;if(d!==r.length)return q(O(t),O(r),p,l,N);for(var m=[],h=0,v=d;v--;v>0){var b=e(t[v],r[v],m,"".concat(l,"[").concat(v,"]"));b&&h++}return h===d?q(O(t),O(r),p,l,j):(p.push.apply(p,m),q(O(t),O(r),p,l,N))}if(a(t)&&a(r)){if(t.size!==r.size)return q(new Set(t),new Set(r),p,l,N);var g,D=E(t);try{for(D.s();!(g=D.n()).done;){var w=g.value;if(!r.has(w))return q(new Set(t),new Set(r),p,l,N)}}catch(e){D.e(e)}finally{D.f()}return q(new Set(t),new Set(r),p,l,j)}if(s(t)&&s(r))return t.getTime()===r.getTime()?q(new Date(t),new Date(r),p,l,C):q(new Date(t),new Date(r),p,l,N);if(c(t)&&c(r))return t.toString()===r.toString()?q(t,r,p,l,x):q(t,r,p,l,N);if(V&&t instanceof Element&&r instanceof Element)return q(t,r,p,l,N);if($(t)&&$(r)){if(t.type!==r.type)return q(t,r,p,l,N);var _=e(t.props,r.props,[],"".concat(l,".props"));return q(t,r,p,l,_?T:N)}if(i(t)&&i(r))return t.name===r.name?q(t,r,p,l,P):q(t,r,p,l,N);if(f(t)&&f(r)){var R=o(t),k=R.length;if(k!==o(r).length)return q(y({},t),y({},r),p,l,N);for(var S=k;S--;S>0)if(!n(r,R[S]))return q(y({},t),y({},r),p,l,N);for(var Y=[],H=0,I=k;I--;I>0){var L=R[I],A=e(t[L],r[L],Y,"".concat(l,".").concat(L));A&&H++}return H===k?q(y({},t),y({},r),p,l,j):(p.push.apply(p,Y),q(y({},t),y({},r),p,l,N))}return q(t,r,p,l,N)}(e,t,p,r),p}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 K(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=n.shallow,a=void 0===o||o;if(e===t)return!1;if(!a)return z(e,t);var i=e||J,c=t||J,s=Object.keys(y(y({},i),c));return r(s,(function(e,t){var r=z(i[t],c[t],t);return r&&(e=[].concat(O(e),O(r))),e}),[])}function Q(e,t,r,n,o,a,i){var c=i.get(e),s=i.get(n);return{propsDifferences:K(e,n),stateDifferences:K(t,o),hookDifferences:K(r,a,{shallow:!1}),ownerDifferences:null!=c&&null!=s&&{propsDifferences:K(c.props,s.props),stateDifferences:K(c.state,s.state),hookDifferences:c.hooks.map((function(e,t){return{hookName:e.hookName,differences:K(e.result,s.hooks[t].result,{shallow:!1})}}))}}}function X(e){var t=e.Component,r=e.displayName,n=e.hookName,o=e.prevProps,a=e.prevState,i=e.prevHook,c=e.nextProps,s=e.nextState,f=e.nextHook,u=e.options,p=e.ownerDataMap;return{Component:t,displayName:r,hookName:n,prevProps:o,prevState:a,prevHook:i,nextProps:c,nextState:s,nextHook:f,options:u,ownerDataMap:p,reason:Q(o,a,i,c,s,f,p)}}function Z(e){return e.prototype&&!!e.prototype.isReactComponent}function ee(e){return e.$$typeof===H}function te(e){return e.$$typeof===I}function re(e){var t=e.Component,r=e.displayName,n=e.options,o=e.React,a=e.isHookChange;return!function(e,t){return t.exclude&&t.exclude.length>0&&t.exclude.some((function(t){return t.test(e)}))}(r,n)&&(!1!==t.whyDidYouRender&&((!a||!t.whyDidYouRender||!1!==t.whyDidYouRender.trackHooks)&&!!(t.whyDidYouRender||n.trackAllPureComponents&&(t&&t.prototype instanceof o.PureComponent||ee(t))||function(e,t){return t.include&&t.include.length>0&&t.include.some((function(t){return t.test(e)}))}(r,n))))}function ne(e,t,r,n,o){var a=function(r){!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)}(f,r);var a,i,c,s=D(f);function f(t,r){var n;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,f),(n=s.call(this,t,r))._WDYR={renderNumber:0};var o=w(h(f.prototype),"render",b(n))||n.render;return o!==e.prototype.render&&(n.render=function(){return f.prototype.render.apply(b(n)),o()}),n}return a=f,(i=[{key:"render",value:function(){if(this._WDYR.renderNumber++,"isStrictMode"in this._WDYR||(this._WDYR.isStrictMode=function(e){for(var t=e&&e._reactInternalFiber;t;){if(1&t.mode)return!0;t=t.return}return!1}(this)),!this._WDYR.isStrictMode||this._WDYR.renderNumber%2!=1){if(this._WDYR.prevProps){var r=X({Component:e,displayName:t,prevProps:this._WDYR.prevProps,prevState:this._WDYR.prevState,nextProps:this.props,nextState:this.state,options:n,ownerDataMap:o});n.notifier(r)}this._WDYR.prevProps=this.props,this._WDYR.prevState=this.state}return w(h(f.prototype),"render",this)?w(h(f.prototype),"render",this).call(this):null}}])&&l(a.prototype,i),c&&l(a,c),f}(e);try{a.displayName=t}catch(e){}return p(a,e),a}function oe(e,t,r,n,o,a){var i="string"==typeof e?function(e,t){return function(r){return t.createElement(e,r)}}(e,n):e;function c(){var e=arguments[0],c=n.useRef(),s=c.current;if(c.current=e,s){var f=X({Component:i,displayName:r,prevProps:s,nextProps:e,options:o,ownerDataMap:a}),u=!f.reason.propsDifferences||t&&0===f.reason.propsDifferences.length;u||o.notifier(f)}return i.apply(void 0,arguments)}try{c.displayName=r}catch(e){}return c.ComponentForHooksTracking=i,p(c,i),c}var ae=Symbol("initial-hook-value");function ie(t,r,n,o,a,i,c){var s=r.path,f=s?e(n,s):n;c.current.push({hookName:t,result:f});var u=o.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED&&o.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner.current,p=o.useRef(ae);if(!u)return n;var l=u.type.ComponentForHooksTracking||u.type,d=G(l);if(!re({Component:l,displayName:d,options:a,React:o,isHookChange:!0}))return n;var m=p.current;if(p.current=n,m!==ae){var y=X({Component:l,displayName:d,hookName:t,prevHook:s?e(m,s):m,nextHook:f,options:a,ownerDataMap:i});y.reason.hookDifferences&&a.notifier(y)}return n}function ce(e,t,r,n,o,a){return ee(t)?function e(t,r,n,o,a){var i=t.type,c=Z(i),s=te(i),f=ee(i),u=s?i.render:i,l=c?ne(u,r,0,o,a):f?e(u,r,n,o,a):oe(u,!0,r,n,o,a);try{l.displayName=G(u)}catch(e){}l.ComponentForHooksTracking=t,p(l,u);var d=n.memo(s?n.forwardRef(l):l,t.compare);try{d.displayName=r}catch(e){}return p(d,t),d}(t,r,n,o,a):te(t)?function(e,t,r,n,o){var a=e.render,i=ee(a),c=i?a.type:a,s=oe(c,i,t,r,n,o);s.displayName=G(c),s.ComponentForHooksTracking=c,p(s,c);var f=r.forwardRef(i?r.memo(s,a.compare):s);try{f.displayName=t}catch(e){}return p(f,e),f}(t,r,n,o,a):Z(t)?ne(t,r,0,o,a):oe(t,!1,r,n,o,a)}function se(e,t,r,n,o,a){if(e.has(t))return e.get(t);var i=ce(0,t,r,n,o,a);return e.set(t,i),i}var fe={useState:{path:"0"},useReducer:{path:"0"},useContext:!0,useMemo:!0};function ue(e,t){var r=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=console.group,r=console.groupEnd;e.collapseGroups?t=console.groupCollapsed:e.onlyLogs&&(t=console.log,r=U);var n=e.notifier||F("hotReloadBufferMs"in e?e.hotReloadBufferMs:500);return y({include:null,exclude:null,notifier:n,onlyLogs:!1,consoleLog:console.log,consoleGroup:t,consoleGroupEnd:r,logOnDifferentValues:!1,logOwnerReasons:!1,trackHooks:!0,titleColor:"#058",diffNameColor:"blue",diffPathColor:"red",trackExtraHooks:[],trackAllPureComponents:!1},e)}(t),n=e.createElement,o=e.createFactory,a=new WeakMap,i=new WeakMap,c={current:[]},s=null;if(e.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED&&Object.defineProperty(e.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,"current",{get:function(){return s},set:function(e){s=e,c.current=[]}}),e.createElement=function(t){for(var o=null,s=null,f=null,u=arguments.length,p=new Array(u>1?u-1:0),l=1;le.length)&&(t=e.length);for(var r=0,n=new Array(t);r=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,i=!0,c=!1;return{s:function(){r=e[Symbol.iterator]()},n:function(){var e=r.next();return i=e.done,e},e:function(e){c=!0,a=e},f:function(){try{i||null==r.return||r.return()}finally{if(c)throw a}}}}var S,N="different",j="deepEquals",x="date",C="regex",T="reactElement",P="function",Y="function"==typeof Symbol&&Symbol.for,H=Y?Symbol.for("react.memo"):60115,I=Y?Symbol.for("react.forward_ref"):60112,L=(d(S={},N,"different objects."),d(S,j,"different objects that are equal by value."),d(S,x,"different date objects with the same value."),d(S,C,"different regular expressions with the same value."),d(S,T,"different React elements (remember that the syntax always produces a *NEW* immutable React element so a component that receives as props always re-renders.)."),d(S,P,"different functions with the same name."),S),A=!1;function M(e){var t=e.Component,r=e.displayName,n=e.hookName,o=e.prefixMessage,a=e.diffObjType,i=e.differences,c=e.values,s=e.options;i&&i.length>0?(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," result]"):"".concat(a,"."),"%c").concat(t,"%c"),"color:".concat(s.diffNameColor,";"),"color:".concat(s.diffPathColor,";"),"color:default;"),s.consoleLog("".concat(L[r]," (more info at ").concat(n?"http://bit.ly/wdyr3":"http://bit.ly/wdyr02",")")),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 its values are all equal."),"props"===a?"This could have been avoided by making the component pure, or by preventing its father from re-rendering.":"This usually means this component called setState when no changes in its state actually occurred.","More info at ".concat("http://bit.ly/wdyr02")),s.consoleLog("prev ".concat(a,":"),c.prev," !== ",c.next,":next ".concat(a)))}function W(e){var t=e.Component,r=e.displayName,n=e.hookName,o=e.prevProps,a=e.prevState,i=e.prevHook,c=e.nextProps,s=e.nextState,f=e.nextHook,u=e.reason,p=e.options,l=e.ownerDataMap;if(function(e,t,r){return!A&&(!!r.logOnDifferentValues||(!(!t.whyDidYouRender||!t.whyDidYouRender.logOnDifferentValues)||!(e.propsDifferences&&e.propsDifferences.some((function(e){return e.diffType===N}))||e.stateDifferences&&e.stateDifferences.some((function(e){return e.diffType===N}))||e.hookDifferences&&e.hookDifferences.some((function(e){return e.diffType===N})))))}(u,t,p)){p.consoleGroup("%c".concat(r),"color: ".concat(p.titleColor,";"));var y="Re-rendered because";if(u.propsDifferences&&(M({Component:t,displayName:r,prefixMessage:y,diffObjType:"props",differences:u.propsDifferences,values:{prev:o,next:c},options:p}),y="And because"),u.stateDifferences&&M({Component:t,displayName:r,prefixMessage:y,diffObjType:"state",differences:u.stateDifferences,values:{prev:a,next:s},options:p}),u.hookDifferences&&M({Component:t,displayName:r,prefixMessage:y,diffObjType:"hook",differences:u.hookDifferences,values:{prev:i,next:f},hookName:n,options:p}),u.propsDifferences&&u.ownerDifferences){var m=l.get(o),h=l.get(c);p.consoleGroup("Rendered by ".concat(h.displayName));var v="Re-rendered because";u.ownerDifferences.propsDifferences&&(M({Component:h.Component,displayName:h.displayName,prefixMessage:v,diffObjType:"props",differences:u.ownerDifferences.propsDifferences,values:{prev:m.props,next:h.props},options:p}),v="And because"),u.ownerDifferences.stateDifferences&&M({Component:h.Component,displayName:h.displayName,prefixMessage:v,diffObjType:"state",differences:u.ownerDifferences.stateDifferences,values:{prev:m.state,next:h.state},options:p}),u.ownerDifferences.hookDifferences&&u.ownerDifferences.hookDifferences.forEach((function(e,t){var r=e.hookName,n=e.differences;return M({Component:h.Component,displayName:h.displayName,prefixMessage:v,diffObjType:"hook",differences:n,values:{prev:m.hooks[t].result,next:h.hooks[t].result},hookName:r,options:p})})),p.consoleGroupEnd()}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("http://bit.ly/wdyr02")),p.consoleGroupEnd()}}function F(e){return e&&"undefined"!=typeof module&&module.hot&&module.hot.addStatusHandler&&module.hot.addStatusHandler((function(t){"idle"===t&&(A=!0,setTimeout((function(){A=!1}),e))})),W}var U=function(){};function G(e){return e.displayName||e.name||e.type&&G(e.type)||e.render&&G(e.render)||(t(e)?e:void 0)}var V="undefined"!=typeof Element,B="function"==typeof Symbol&&Symbol.for?Symbol.for("react.element"):60103,$=function(e){return e.$$typeof===B};function q(e,t,r,n,o){return r.push({diffType:o,pathString:n,prevValue:e,nextValue:t}),o!==N}function z(e,t,r){try{var p=[];return function e(t,r,p){var l=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"";if(t===r)return!0;if(!t||!r)return q(t,r,p,l,N);if(u(t)&&u(r)){var d=t.length;if(d!==r.length)return q(O(t),O(r),p,l,N);for(var y=[],h=0,v=d;v--;v>0){var b=e(t[v],r[v],y,"".concat(l,"[").concat(v,"]"));b&&h++}return h===d?q(O(t),O(r),p,l,j):(p.push.apply(p,y),q(O(t),O(r),p,l,N))}if(a(t)&&a(r)){if(t.size!==r.size)return q(new Set(t),new Set(r),p,l,N);var g,D=E(t);try{for(D.s();!(g=D.n()).done;){var w=g.value;if(!r.has(w))return q(new Set(t),new Set(r),p,l,N)}}catch(e){D.e(e)}finally{D.f()}return q(new Set(t),new Set(r),p,l,j)}if(s(t)&&s(r))return t.getTime()===r.getTime()?q(new Date(t),new Date(r),p,l,x):q(new Date(t),new Date(r),p,l,N);if(c(t)&&c(r))return t.toString()===r.toString()?q(t,r,p,l,C):q(t,r,p,l,N);if(V&&t instanceof Element&&r instanceof Element)return q(t,r,p,l,N);if($(t)&&$(r)){if(t.type!==r.type)return q(t,r,p,l,N);var _=e(t.props,r.props,[],"".concat(l,".props"));return q(t,r,p,l,_?T:N)}if(i(t)&&i(r))return t.name===r.name?q(t,r,p,l,P):q(t,r,p,l,N);if(f(t)&&f(r)){var R=o(t),k=R.length;if(k!==o(r).length)return q(m({},t),m({},r),p,l,N);for(var S=k;S--;S>0)if(!n(r,R[S]))return q(m({},t),m({},r),p,l,N);for(var Y=[],H=0,I=k;I--;I>0){var L=R[I],A=e(t[L],r[L],Y,"".concat(l,".").concat(L));A&&H++}return H===k?q(m({},t),m({},r),p,l,j):(p.push.apply(p,Y),q(m({},t),m({},r),p,l,N))}return q(t,r,p,l,N)}(e,t,p,r),p}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 K(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=n.shallow,a=void 0===o||o;if(e===t)return!1;if(!a)return z(e,t);var i=e||J,c=t||J,s=Object.keys(m(m({},i),c));return r(s,(function(e,t){var r=z(i[t],c[t],t);return r&&(e=[].concat(O(e),O(r))),e}),[])}function Q(e){var t=e.prevOwnerData,r=e.nextOwnerData;if(!t||!r)return!1;var n=t.hooks.map((function(e,t){return{hookName:e.hookName,differences:K(e.result,r.hooks[t].result,{shallow:!1})}}));return{propsDifferences:K(t.props,r.props),stateDifferences:K(t.state,r.state),hookDifferences:n.length>0&&n}}function X(e,t,r,n,o,a,i){var c=i.get(e),s=i.get(n);return{propsDifferences:K(e,n),stateDifferences:K(t,o),hookDifferences:K(r,a,{shallow:!1}),ownerDifferences:Q({prevOwnerData:c,nextOwnerData:s})}}function Z(e){var t=e.Component,r=e.displayName,n=e.hookName,o=e.prevProps,a=e.prevState,i=e.prevHook,c=e.nextProps,s=e.nextState,f=e.nextHook,u=e.options,p=e.ownerDataMap;return{Component:t,displayName:r,hookName:n,prevProps:o,prevState:a,prevHook:i,nextProps:c,nextState:s,nextHook:f,options:u,ownerDataMap:p,reason:X(o,a,i,c,s,f,p)}}function ee(e){return e.prototype&&!!e.prototype.isReactComponent}function te(e){return e.$$typeof===H}function re(e){return e.$$typeof===I}function ne(e){var t=e.Component,r=e.displayName,n=e.options,o=e.React,a=e.isHookChange;return!function(e,t){return t.exclude&&t.exclude.length>0&&t.exclude.some((function(t){return t.test(e)}))}(r,n)&&(!1!==t.whyDidYouRender&&((!a||!t.whyDidYouRender||!1!==t.whyDidYouRender.trackHooks)&&!!(t.whyDidYouRender||n.trackAllPureComponents&&(t&&t.prototype instanceof o.PureComponent||te(t))||function(e,t){return t.include&&t.include.length>0&&t.include.some((function(t){return t.test(e)}))}(r,n))))}function oe(e,t,r,n,o){var a=function(r){!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)}(f,r);var a,i,c,s=D(f);function f(t,r){var n,o;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,f),(o=s.call(this,t,r))._WDYR={renderNumber:0};var a=w((n=b(o),h(f.prototype)),"render",n)||o.render;return a!==e.prototype.render&&(o.render=function(){return f.prototype.render.apply(b(o)),a()}),o}return a=f,(i=[{key:"render",value:function(){if(this._WDYR.renderNumber++,"isStrictMode"in this._WDYR||(this._WDYR.isStrictMode=function(e){for(var t=e&&e._reactInternalFiber;t;){if(1&t.mode)return!0;t=t.return}return!1}(this)),!this._WDYR.isStrictMode||this._WDYR.renderNumber%2!=1){if(this._WDYR.prevProps){var r=Z({Component:e,displayName:t,prevProps:this._WDYR.prevProps,prevState:this._WDYR.prevState,nextProps:this.props,nextState:this.state,options:n,ownerDataMap:o});n.notifier(r)}this._WDYR.prevProps=this.props,this._WDYR.prevState=this.state}return w(h(f.prototype),"render",this)?w(h(f.prototype),"render",this).call(this):null}}])&&l(a.prototype,i),c&&l(a,c),f}(e);try{a.displayName=t}catch(e){}return p(a,e),a}function ae(e,t,r,n,o,a){var i="string"==typeof e?function(e,t){return function(r){return t.createElement(e,r)}}(e,n):e;function c(){var e=arguments[0],c=n.useRef(),s=c.current;if(c.current=e,s){var f=Z({Component:i,displayName:r,prevProps:s,nextProps:e,options:o,ownerDataMap:a}),u=!f.reason.propsDifferences||t&&0===f.reason.propsDifferences.length;u||o.notifier(f)}return i.apply(void 0,arguments)}try{c.displayName=r}catch(e){}return c.ComponentForHooksTracking=i,p(c,i),c}var ie=Symbol("initial-hook-value");function ce(t,r,n,o,a,i,c){var s=r.path,f=s?e(n,s):n;c.current.push({hookName:t,result:f});var u=o.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED&&o.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner.current,p=o.useRef(ie);if(!u)return n;var l=u.type.ComponentForHooksTracking||u.type,d=G(l);if(!ne({Component:l,displayName:d,options:a,React:o,isHookChange:!0}))return n;var y=p.current;if(p.current=n,y!==ie){var m=Z({Component:l,displayName:d,hookName:t,prevHook:s?e(y,s):y,nextHook:f,options:a,ownerDataMap:i});m.reason.hookDifferences&&a.notifier(m)}return n}function se(e,t,r,n,o,a){return te(t)?function e(t,r,n,o,a){var i=t.type,c=ee(i),s=re(i),f=te(i),u=s?i.render:i,l=c?oe(u,r,0,o,a):f?e(u,r,n,o,a):ae(u,!0,r,n,o,a);try{l.displayName=G(u)}catch(e){}l.ComponentForHooksTracking=t,p(l,u);var d=n.memo(s?n.forwardRef(l):l,t.compare);try{d.displayName=r}catch(e){}return p(d,t),d}(t,r,n,o,a):re(t)?function(e,t,r,n,o){var a=e.render,i=te(a),c=i?a.type:a,s=ae(c,i,t,r,n,o);s.displayName=G(c),s.ComponentForHooksTracking=c,p(s,c);var f=r.forwardRef(i?r.memo(s,a.compare):s);try{f.displayName=t}catch(e){}return p(f,e),f}(t,r,n,o,a):ee(t)?oe(t,r,0,o,a):ae(t,!1,r,n,o,a)}function fe(e,t,r,n,o,a){if(e.has(t))return e.get(t);var i=se(0,t,r,n,o,a);return e.set(t,i),i}function ue(e){return!!e&&("function"==typeof e||(te(e)?ue(e.type):re(e)?ue(e.render):void 0))}var pe={useState:{path:"0"},useReducer:{path:"0"},useContext:!0,useMemo:!0};function le(e,t){var r=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=console.group,r=console.groupEnd;e.collapseGroups?t=console.groupCollapsed:e.onlyLogs&&(t=console.log,r=U);var n=e.notifier||F("hotReloadBufferMs"in e?e.hotReloadBufferMs:500);return m({include:null,exclude:null,notifier:n,onlyLogs:!1,consoleLog:console.log,consoleGroup:t,consoleGroupEnd:r,logOnDifferentValues:!1,logOwnerReasons:!1,trackHooks:!0,titleColor:"#058",diffNameColor:"blue",diffPathColor:"red",trackExtraHooks:[],trackAllPureComponents:!1},e)}(t),n=e.createElement,o=e.createFactory,a=new WeakMap,i=new WeakMap,c={current:[]},s=null;if(e.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED&&Object.defineProperty(e.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,"current",{get:function(){return s},set:function(e){s=e,c.current=[]}}),e.createElement=function(t){for(var o=null,s=null,f=null,u=arguments.length,p=new Array(u>1?u-1:0),l=1;l syntax always produces a *NEW* immutable React element so a component that receives as props always re-renders.).',\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} result]` : `${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 its values are all equal.`,\r\n diffObjType === 'props' ?\r\n 'This could have been avoided by making the component pure, or by preventing its father from re-rendering.' :\r\n 'This usually means this component called setState when no changes in its 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, ownerDataMap} = 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\r\n if(reason.propsDifferences && reason.ownerDifferences){\r\n const prevOwnerData = ownerDataMap.get(prevProps)\r\n const nextOwnerData = ownerDataMap.get(nextProps)\r\n\r\n options.consoleGroup(`Rendered by ${nextOwnerData.displayName}`)\r\n let prefixMessage = 'Re-rendered because'\r\n\r\n if(reason.ownerDifferences.propsDifferences){\r\n logDifference({\r\n Component: nextOwnerData.Component,\r\n displayName: nextOwnerData.displayName,\r\n prefixMessage,\r\n diffObjType: 'props',\r\n differences: reason.ownerDifferences.propsDifferences,\r\n values: {prev: prevOwnerData.props, next: nextOwnerData.props},\r\n options\r\n })\r\n prefixMessage = 'And because'\r\n }\r\n\r\n if(reason.ownerDifferences.stateDifferences){\r\n logDifference({\r\n Component: nextOwnerData.Component,\r\n displayName: nextOwnerData.displayName,\r\n prefixMessage,\r\n diffObjType: 'state',\r\n differences: reason.ownerDifferences.stateDifferences,\r\n values: {prev: prevOwnerData.state, next: nextOwnerData.state},\r\n options\r\n })\r\n }\r\n\r\n if(reason.ownerDifferences.hookDifferences){\r\n reason.ownerDifferences.hookDifferences.forEach(({hookName, differences}, i) =>\r\n logDifference({\r\n Component: nextOwnerData.Component,\r\n displayName: nextOwnerData.displayName,\r\n prefixMessage,\r\n diffObjType: 'hook',\r\n differences,\r\n values: {prev: prevOwnerData.hooks[i].result, next: nextOwnerData.hooks[i].result},\r\n hookName,\r\n options\r\n })\r\n )\r\n }\r\n options.consoleGroupEnd()\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(typeof(module) !== 'undefined' && 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 ('hotReloadBufferMs' in userOptions) ? 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 logOwnerReasons: false,\r\n trackHooks: true,\r\n titleColor: '#058',\r\n diffNameColor: 'blue',\r\n diffPathColor: 'red',\r\n trackExtraHooks: [],\r\n trackAllPureComponents: false,\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 (type.render && getDisplayName(type.render)) ||\r\n (isString(type) ? type : undefined)\r\n )\r\n}\r\n","import {isArray, isPlainObject, isDate, isRegExp, isFunction, isSet, 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 arrayLength = a.length\r\n if(arrayLength !== b.length){\r\n return trackDiff([...a], [...b], diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n const arrayItemDiffs = []\r\n let numberOfDeepEqualsItems = 0\r\n for(let i = arrayLength; i--; i > 0){\r\n const diffEquals = accumulateDeepEqualDiffs(a[i], b[i], arrayItemDiffs, `${pathString}[${i}]`)\r\n if(diffEquals){\r\n numberOfDeepEqualsItems++\r\n }\r\n }\r\n\r\n if(numberOfDeepEqualsItems === arrayLength){\r\n return trackDiff([...a], [...b], diffsAccumulator, pathString, diffTypes.deepEquals)\r\n }\r\n\r\n diffsAccumulator.push(...arrayItemDiffs)\r\n\r\n return trackDiff([...a], [...b], diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isSet(a) && isSet(b)){\r\n if(a.size !== b.size){\r\n return trackDiff(new Set(a), new Set(b), diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n for(const valA of a){\r\n if(!b.has(valA)){\r\n return trackDiff(new Set(a), new Set(b), diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n }\r\n\r\n return trackDiff(new Set(a), new Set(b), diffsAccumulator, pathString, diffTypes.deepEquals)\r\n }\r\n\r\n if(isDate(a) && isDate(b)){\r\n return a.getTime() === b.getTime() ?\r\n trackDiff(new Date(a), new Date(b), diffsAccumulator, pathString, diffTypes.date) :\r\n trackDiff(new Date(a), new Date(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 if(a.type !== b.type){\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n const reactElementPropsAreDeepEqual =\r\n accumulateDeepEqualDiffs(a.props, b.props, [], `${pathString}.props`)\r\n\r\n return reactElementPropsAreDeepEqual ?\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 keysLength = keys.length\r\n if(keysLength !== getKeys(b).length){\r\n return trackDiff({...a}, {...b}, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n for(let i = keysLength; i--; 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 const objectValuesDiffs = []\r\n let numberOfDeepEqualsObjectValues = 0\r\n for(let i = keysLength; i--; i > 0){\r\n const key = keys[i]\r\n const deepEquals = accumulateDeepEqualDiffs(a[key], b[key], objectValuesDiffs, `${pathString}.${key}`)\r\n if(deepEquals){\r\n numberOfDeepEqualsObjectValues++\r\n }\r\n }\r\n\r\n if(numberOfDeepEqualsObjectValues === keysLength){\r\n return trackDiff({...a}, {...b}, diffsAccumulator, pathString, diffTypes.deepEquals)\r\n }\r\n\r\n diffsAccumulator.push(...objectValuesDiffs)\r\n\r\n return 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, ownerDataMap){\r\n const prevOwnerData = ownerDataMap.get(prevProps)\r\n const nextOwnerData = ownerDataMap.get(nextProps)\r\n\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 ownerDifferences: prevOwnerData != null && nextOwnerData != null ? {\r\n propsDifferences: findObjectsDifferences(prevOwnerData.props, nextOwnerData.props),\r\n stateDifferences: findObjectsDifferences(prevOwnerData.state, nextOwnerData.state),\r\n hookDifferences: prevOwnerData.hooks.map(({hookName, result}, i) => ({\r\n hookName,\r\n differences: findObjectsDifferences(result, nextOwnerData.hooks[i].result, {shallow: false})\r\n }))\r\n } : false\r\n }\r\n}\r\n\r\nexport default function getUpdateInfo({Component, displayName, hookName, prevProps, prevState, prevHook, nextProps, nextState, nextHook, options, ownerDataMap}){\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 ownerDataMap,\r\n reason: getUpdateReason(prevProps, prevState, prevHook, nextProps, nextState, nextHook, ownerDataMap)\r\n }\r\n}\r\n","// copied from https://github.com/facebook/react/blob/master/packages/react-reconciler/src/ReactTypeOfMode.js\r\nimport {REACT_FORWARD_REF_TYPE, REACT_MEMO_TYPE} from './consts'\r\n\r\nconst StrictMode = 0b0001\r\n\r\n// based on \"findStrictRoot\" from https://github.com/facebook/react/blob/master/packages/react-reconciler/src/ReactStrictModeWarnings.js\r\n// notice: this is only used for class components. functional components doesn't re-rendered inside strict mode\r\nexport function checkIfInsideAStrictModeTree(reactComponentInstance){\r\n let reactInternalFiber = reactComponentInstance && reactComponentInstance._reactInternalFiber\r\n while(reactInternalFiber){\r\n if(reactInternalFiber.mode & StrictMode){\r\n return true\r\n }\r\n reactInternalFiber = reactInternalFiber.return\r\n }\r\n return false\r\n}\r\n\r\nexport function isReactClassComponent(Component){\r\n return Component.prototype && !!Component.prototype.isReactComponent\r\n}\r\n\r\nexport function isMemoComponent(Component){\r\n return Component.$$typeof === REACT_MEMO_TYPE\r\n}\r\n\r\nexport function isForwardRefComponent(Component){\r\n return Component.$$typeof === REACT_FORWARD_REF_TYPE\r\n}\r\n","import {isMemoComponent} from './utils'\r\n\r\nfunction 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, React, isHookChange}){\r\n if(shouldExclude(displayName, options)){\r\n return false\r\n }\r\n\r\n if(Component.whyDidYouRender === false){\r\n return false\r\n }\r\n\r\n if(isHookChange && (\r\n Component.whyDidYouRender && Component.whyDidYouRender.trackHooks === false\r\n )){\r\n return false\r\n }\r\n\r\n return !!(\r\n Component.whyDidYouRender || (\r\n options.trackAllPureComponents && (\r\n (Component && Component.prototype instanceof React.PureComponent) ||\r\n isMemoComponent(Component)\r\n )\r\n ) ||\r\n shouldInclude(displayName, options)\r\n )\r\n}\r\n","import {defaults} from 'lodash'\r\n\r\nimport {checkIfInsideAStrictModeTree} from '../utils'\r\nimport getUpdateInfo from '../getUpdateInfo'\r\n\r\nexport default function patchClassComponent(ClassComponent, displayName, React, options, ownerDataMap){\r\n class WDYRPatchedClassComponent extends ClassComponent{\r\n constructor(props, context){\r\n super(props, context)\r\n\r\n this._WDYR = {\r\n renderNumber: 0\r\n }\r\n\r\n const origRender = super.render || this.render\r\n // this probably means render is an arrow function or this.render.bind(this) was called on the original class\r\n const renderIsABindedFunction = origRender !== ClassComponent.prototype.render\r\n if(renderIsABindedFunction){\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 this._WDYR.renderNumber++\r\n\r\n if(!('isStrictMode' in this._WDYR)){\r\n this._WDYR.isStrictMode = checkIfInsideAStrictModeTree(this)\r\n }\r\n\r\n // in strict mode- ignore every other render\r\n if(!(this._WDYR.isStrictMode && this._WDYR.renderNumber % 2 === 1)){\r\n if(this._WDYR.prevProps){\r\n const updateInfo = getUpdateInfo({\r\n Component: ClassComponent,\r\n displayName,\r\n prevProps: this._WDYR.prevProps,\r\n prevState: this._WDYR.prevState,\r\n nextProps: this.props,\r\n nextState: this.state,\r\n options,\r\n ownerDataMap\r\n })\r\n\r\n options.notifier(updateInfo)\r\n }\r\n\r\n this._WDYR.prevProps = this.props\r\n this._WDYR.prevState = this.state\r\n }\r\n\r\n return super.render ? super.render() : null\r\n }\r\n }\r\n\r\n try{\r\n WDYRPatchedClassComponent.displayName = displayName\r\n }catch(e){\r\n // not crucial if displayName couldn't be set\r\n }\r\n\r\n defaults(WDYRPatchedClassComponent, ClassComponent)\r\n\r\n return WDYRPatchedClassComponent\r\n}\r\n","import {defaults} from 'lodash'\r\n\r\nimport getUpdateInfo from '../getUpdateInfo'\r\n\r\nconst getFunctionalComponentFromStringComponent = (componentTypeStr, React) => props => (\r\n React.createElement(componentTypeStr, props)\r\n)\r\n\r\nexport default function patchFunctionalOrStrComponent(FunctionalOrStringComponent, isPure, displayName, React, options, ownerDataMap){\r\n const FunctionalComponent = typeof(FunctionalOrStringComponent) === 'string' ?\r\n getFunctionalComponentFromStringComponent(FunctionalOrStringComponent, React) :\r\n FunctionalOrStringComponent\r\n\r\n function WDYRFunctionalComponent(){\r\n const nextProps = arguments[0]\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 updateInfo = getUpdateInfo({\r\n Component: FunctionalComponent,\r\n displayName,\r\n prevProps,\r\n nextProps,\r\n options,\r\n ownerDataMap\r\n })\r\n\r\n const notifiedByHooks = (\r\n !updateInfo.reason.propsDifferences || (\r\n (isPure && updateInfo.reason.propsDifferences.length === 0)\r\n )\r\n )\r\n\r\n if(!notifiedByHooks){\r\n options.notifier(updateInfo)\r\n }\r\n }\r\n\r\n return FunctionalComponent(...arguments)\r\n }\r\n\r\n try{\r\n WDYRFunctionalComponent.displayName = displayName\r\n }catch(e){\r\n // not crucial if displayName couldn't be set\r\n }\r\n\r\n WDYRFunctionalComponent.ComponentForHooksTracking = FunctionalComponent\r\n defaults(WDYRFunctionalComponent, FunctionalComponent)\r\n\r\n return WDYRFunctionalComponent\r\n}\r\n","import {get} 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\nimport patchClassComponent from './patches/patchClassComponent'\r\nimport patchFunctionalOrStrComponent from './patches/patchFunctionalOrStrComponent'\r\nimport patchMemoComponent from './patches/patchMemoComponent'\r\nimport patchForwardRefComponent from './patches/patchForwardRefComponent'\r\n\r\nimport {isForwardRefComponent, isMemoComponent, isReactClassComponent} from './utils'\r\n\r\nconst initialHookValue = Symbol('initial-hook-value')\r\nfunction trackHookChanges(hookName, {path: hookPath}, hookResult, React, options, ownerDataMap, hooksRef){\r\n const nextHook = hookPath ? get(hookResult, hookPath) : hookResult\r\n hooksRef.current.push({hookName, result: nextHook})\r\n const ComponentHookDispatchedFromInstance = (\r\n React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED &&\r\n React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner.current\r\n )\r\n\r\n const prevHookResultRef = React.useRef(initialHookValue)\r\n\r\n if(!ComponentHookDispatchedFromInstance){\r\n return hookResult\r\n }\r\n\r\n const Component = ComponentHookDispatchedFromInstance.type.ComponentForHooksTracking || ComponentHookDispatchedFromInstance.type\r\n const displayName = getDisplayName(Component)\r\n\r\n const isShouldTrack = shouldTrack({Component, displayName, options, React, isHookChange: true})\r\n if(!isShouldTrack){\r\n return hookResult\r\n }\r\n\r\n const prevHookResult = prevHookResultRef.current\r\n prevHookResultRef.current = hookResult\r\n\r\n if(prevHookResult !== initialHookValue){\r\n const notification = getUpdateInfo({\r\n Component: Component,\r\n displayName,\r\n hookName,\r\n prevHook: hookPath ? get(prevHookResult, hookPath) : prevHookResult,\r\n nextHook,\r\n options,\r\n ownerDataMap\r\n })\r\n\r\n if(notification.reason.hookDifferences){\r\n options.notifier(notification)\r\n }\r\n }\r\n\r\n return hookResult\r\n}\r\n\r\nfunction createPatchedComponent(componentsMap, Component, displayName, React, options, ownerDataMap){\r\n if(isMemoComponent(Component)){\r\n return patchMemoComponent(Component, displayName, React, options, ownerDataMap)\r\n }\r\n\r\n if(isForwardRefComponent(Component)){\r\n return patchForwardRefComponent(Component, displayName, React, options, ownerDataMap)\r\n }\r\n\r\n if(isReactClassComponent(Component)){\r\n return patchClassComponent(Component, displayName, React, options, ownerDataMap)\r\n }\r\n\r\n return patchFunctionalOrStrComponent(Component, false, displayName, React, options, ownerDataMap)\r\n}\r\n\r\nfunction getPatchedComponent(componentsMap, Component, displayName, React, options, ownerDataMap){\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, ownerDataMap)\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 const ownerDataMap = new WeakMap()\r\n const hooksRef = {current: []}\r\n\r\n // Intercept assignments to ReactCurrentOwner.current and reset hooksRef\r\n let currentOwner = null\r\n if(React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED){\r\n Object.defineProperty(React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner, 'current', {\r\n get(){\r\n return currentOwner\r\n },\r\n set(value){\r\n currentOwner = value\r\n hooksRef.current = []\r\n }\r\n })\r\n }\r\n\r\n React.createElement = function(componentNameOrComponent, ...rest){\r\n let isShouldTrack = null\r\n let displayName = null\r\n let WDYRPatchedComponent = null\r\n\r\n try{\r\n isShouldTrack = (\r\n (\r\n typeof componentNameOrComponent === 'function' ||\r\n isMemoComponent(componentNameOrComponent) ||\r\n isForwardRefComponent(componentNameOrComponent)\r\n ) &&\r\n shouldTrack({Component: componentNameOrComponent, displayName: getDisplayName(componentNameOrComponent), React, options})\r\n )\r\n\r\n if(isShouldTrack){\r\n displayName = (\r\n componentNameOrComponent &&\r\n componentNameOrComponent.whyDidYouRender &&\r\n componentNameOrComponent.whyDidYouRender.customName ||\r\n getDisplayName(componentNameOrComponent)\r\n )\r\n\r\n WDYRPatchedComponent = getPatchedComponent(componentsMap, componentNameOrComponent, displayName, React, options, ownerDataMap)\r\n\r\n const element = origCreateElement.apply(React, [WDYRPatchedComponent, ...rest])\r\n if(options.logOwnerReasons){\r\n const OwnerInstance = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner.current\r\n if(OwnerInstance != null){\r\n const Component = OwnerInstance.type.ComponentForHooksTracking || OwnerInstance.type\r\n const displayName = getDisplayName(Component)\r\n ownerDataMap.set(element.props, {\r\n Component,\r\n displayName,\r\n props: OwnerInstance.pendingProps,\r\n state: OwnerInstance.stateNode != null ? OwnerInstance.stateNode.state : null,\r\n hooks: hooksRef.current\r\n })\r\n }\r\n }\r\n\r\n return element\r\n }\r\n }\r\n catch(e){\r\n options.consoleLog('whyDidYouRender error. Please file a bug at https://github.com/welldone-software/why-did-you-render/issues.', {\r\n errorInfo: {\r\n error: e,\r\n componentNameOrComponent,\r\n rest,\r\n options,\r\n isShouldTrack,\r\n displayName,\r\n WDYRPatchedComponent\r\n }\r\n })\r\n }\r\n\r\n return origCreateElement.apply(React, [componentNameOrComponent, ...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 if(options.trackHooks){\r\n const nativeHooks = Object.entries(hooksConfig).map(([hookName, hookTrackingConfig]) => {\r\n return [React, hookName, hookTrackingConfig]\r\n })\r\n\r\n const hooksToTrack = [\r\n ...nativeHooks,\r\n ...options.trackExtraHooks\r\n ]\r\n\r\n hooksToTrack.forEach(([hookParent, hookName, hookTrackingConfig = {}]) => {\r\n const originalHook = hookParent[hookName]\r\n const newHookName = hookName[0].toUpperCase() + hookName.slice(1)\r\n const newHook = function(...args){\r\n const hookResult = originalHook.call(this, ...args)\r\n trackHookChanges(hookName, hookTrackingConfig, hookResult, React, options, ownerDataMap, hooksRef)\r\n return hookResult\r\n }\r\n Object.defineProperty(newHook, 'name', {value: newHookName, writable: false})\r\n Object.assign(newHook, {originalHook})\r\n hookParent[hookName] = newHook\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\r\n componentsMap = null\r\n\r\n const hooksToRevert = [\r\n ...Object.keys(hooksConfig).map(hookName => [React, hookName]),\r\n ...options.trackExtraHooks\r\n ]\r\n hooksToRevert.forEach(([hookParent, hookName]) => {\r\n if(hookParent[hookName].originalHook){\r\n hookParent[hookName] = hookParent[hookName].originalHook\r\n }\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","import {defaults} from 'lodash'\r\n\r\nimport getDisplayName from '../getDisplayName'\r\n\r\nimport {isForwardRefComponent, isMemoComponent, isReactClassComponent} from '../utils'\r\nimport patchClassComponent from './patchClassComponent'\r\nimport patchFunctionalOrStrComponent from './patchFunctionalOrStrComponent'\r\n\r\nexport default function patchMemoComponent(MemoComponent, displayName, React, options, ownerDataMap){\r\n const {type: InnerMemoComponent} = MemoComponent\r\n\r\n const isInnerMemoComponentAClassComponent = isReactClassComponent(InnerMemoComponent)\r\n const isInnerMemoComponentForwardRefs = isForwardRefComponent(InnerMemoComponent)\r\n const isInnerMemoComponentAnotherMemoComponent = isMemoComponent(InnerMemoComponent)\r\n\r\n const WrappedFunctionalComponent = isInnerMemoComponentForwardRefs ?\r\n InnerMemoComponent.render :\r\n InnerMemoComponent\r\n\r\n const PatchedInnerComponent = isInnerMemoComponentAClassComponent ?\r\n patchClassComponent(WrappedFunctionalComponent, displayName, React, options, ownerDataMap) :\r\n (isInnerMemoComponentAnotherMemoComponent ?\r\n patchMemoComponent(WrappedFunctionalComponent, displayName, React, options, ownerDataMap) :\r\n patchFunctionalOrStrComponent(WrappedFunctionalComponent, true, displayName, React, options, ownerDataMap)\r\n )\r\n\r\n try{\r\n PatchedInnerComponent.displayName = getDisplayName(WrappedFunctionalComponent)\r\n }catch(e){\r\n // not crucial if displayName couldn't be set\r\n }\r\n\r\n PatchedInnerComponent.ComponentForHooksTracking = MemoComponent\r\n defaults(PatchedInnerComponent, WrappedFunctionalComponent)\r\n\r\n const WDYRMemoizedFunctionalComponent = React.memo(\r\n isInnerMemoComponentForwardRefs ? React.forwardRef(PatchedInnerComponent) : PatchedInnerComponent,\r\n MemoComponent.compare\r\n )\r\n\r\n try{\r\n WDYRMemoizedFunctionalComponent.displayName = displayName\r\n }catch(e){\r\n // not crucial if displayName couldn't be set\r\n }\r\n\r\n defaults(WDYRMemoizedFunctionalComponent, MemoComponent)\r\n\r\n return WDYRMemoizedFunctionalComponent\r\n}\r\n","import {defaults} from 'lodash'\r\n\r\nimport getDisplayName from '../getDisplayName'\r\nimport {isMemoComponent} from '../utils'\r\nimport patchFunctionalOrStrComponent from './patchFunctionalOrStrComponent'\r\n\r\nexport default function patchForwardRefComponent(ForwardRefComponent, displayName, React, options, ownerDataMap){\r\n const {render: InnerForwardRefComponent} = ForwardRefComponent\r\n\r\n const isInnerComponentMemoized = isMemoComponent(InnerForwardRefComponent)\r\n const WrappedFunctionalComponent = isInnerComponentMemoized ?\r\n InnerForwardRefComponent.type : InnerForwardRefComponent\r\n\r\n const WDYRWrappedByReactForwardRefFunctionalComponent = (\r\n patchFunctionalOrStrComponent(WrappedFunctionalComponent, isInnerComponentMemoized, displayName, React, options, ownerDataMap)\r\n )\r\n\r\n WDYRWrappedByReactForwardRefFunctionalComponent.displayName = getDisplayName(WrappedFunctionalComponent)\r\n WDYRWrappedByReactForwardRefFunctionalComponent.ComponentForHooksTracking = WrappedFunctionalComponent\r\n defaults(WDYRWrappedByReactForwardRefFunctionalComponent, WrappedFunctionalComponent)\r\n\r\n const WDYRForwardRefFunctionalComponent = React.forwardRef(\r\n isInnerComponentMemoized ?\r\n React.memo(WDYRWrappedByReactForwardRefFunctionalComponent, InnerForwardRefComponent.compare) :\r\n WDYRWrappedByReactForwardRefFunctionalComponent\r\n )\r\n\r\n try{\r\n WDYRForwardRefFunctionalComponent.displayName = displayName\r\n }catch(e){\r\n // not crucial if displayName couldn't be set\r\n }\r\n\r\n defaults(WDYRForwardRefFunctionalComponent, ForwardRefComponent)\r\n\r\n return WDYRForwardRefFunctionalComponent\r\n}\r\n","import whyDidYouRender from './whyDidYouRender'\r\nimport defaultNotifier from './defaultNotifier'\r\n\r\nwhyDidYouRender.defaultNotifier = defaultNotifier\r\nexport default whyDidYouRender\r\n"],"names":["diffTypes","hasSymbol","Symbol","REACT_MEMO_TYPE","REACT_FORWARD_REF_TYPE","diffTypesDescriptions","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","ownerDataMap","logOnDifferentValues","whyDidYouRender","propsDifferences","some","diff","stateDifferences","hookDifferences","shouldLog","titleColor","ownerDifferences","prevOwnerData","get","nextOwnerData","props","state","i","hooks","result","createDefaultNotifier","hotReloadBufferMs","module","hot","addStatusHandler","status","setTimeout","emptyFn","getDisplayName","type","name","render","_isString","undefined","hasElementType","Element","REACT_ELEMENT_TYPE","isReactElement","object","$$typeof","trackDiff","a","b","diffsAccumulator","push","calculateDeepEqualDiffs","initialPathString","diffs","accumulateDeepEqualDiffs","_isArray","arrayLength","arrayItemDiffs","numberOfDeepEqualsItems","diffEquals","_isSet","size","Set","valA","has","_isDate","getTime","Date","_isRegExp","toString","reactElementPropsAreDeepEqual","_isFunction","_isPlainObject","keys","_keys","keysLength","_has","objectValuesDiffs","numberOfDeepEqualsObjectValues","key","deepEquals","error","message","match","number","console","warn","emptyObject","findObjectsDifferences","userPrevObj","userNextObj","shallow","prevObj","nextObj","keysOfBothObjects","Object","_reduce","deepEqualDiffs","getUpdateReason","map","getUpdateInfo","isReactClassComponent","prototype","isReactComponent","isMemoComponent","isForwardRefComponent","shouldTrack","React","isHookChange","exclude","regex","test","shouldExclude","trackHooks","trackAllPureComponents","PureComponent","include","shouldInclude","patchClassComponent","ClassComponent","WDYRPatchedClassComponent","context","_WDYR","renderNumber","origRender","_get","_this","apply","this","isStrictMode","reactComponentInstance","reactInternalFiber","_reactInternalFiber","mode","checkIfInsideAStrictModeTree","notifier","e","patchFunctionalOrStrComponent","FunctionalOrStringComponent","isPure","FunctionalComponent","componentTypeStr","createElement","getFunctionalComponentFromStringComponent","WDYRFunctionalComponent","arguments","ref","useRef","current","notifiedByHooks","ComponentForHooksTracking","initialHookValue","trackHookChanges","hookResult","hooksRef","hookPath","path","ComponentHookDispatchedFromInstance","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","ReactCurrentOwner","prevHookResultRef","prevHookResult","notification","createPatchedComponent","componentsMap","patchMemoComponent","MemoComponent","InnerMemoComponent","isInnerMemoComponentAClassComponent","isInnerMemoComponentForwardRefs","isInnerMemoComponentAnotherMemoComponent","WrappedFunctionalComponent","PatchedInnerComponent","WDYRMemoizedFunctionalComponent","memo","forwardRef","compare","ForwardRefComponent","InnerForwardRefComponent","isInnerComponentMemoized","WDYRWrappedByReactForwardRefFunctionalComponent","WDYRForwardRefFunctionalComponent","patchForwardRefComponent","getPatchedComponent","WDYRPatchedComponent","set","hooksConfig","useState","useReducer","useContext","useMemo","userOptions","group","groupEnd","collapseGroups","groupCollapsed","onlyLogs","log","logOwnerReasons","trackExtraHooks","normalizeOptions","origCreateElement","origCreateFactory","createFactory","WeakMap","currentOwner","defineProperty","value","componentNameOrComponent","isShouldTrack","rest","customName","element","OwnerInstance","pendingProps","stateNode","errorInfo","assign","factory","bind","nativeHooks","entries","hookTrackingConfig","hookParent","originalHook","newHookName","toUpperCase","slice","newHook","args","call","writable","__REVERT_WHY_DID_YOU_RENDER__"],"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/utils.js","../../src/shouldTrack.js","../../src/patches/patchClassComponent.js","../../src/patches/patchFunctionalOrStrComponent.js","../../src/whyDidYouRender.js","../../src/patches/patchMemoComponent.js","../../src/patches/patchForwardRefComponent.js","../../src/index.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\r\n// copied from packages/shared/ReactSymbols.js in https://github.com/facebook/react\r\nconst hasSymbol = typeof Symbol === 'function' && Symbol.for\r\nexport const REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3\r\nexport const REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0\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 (remember that the syntax always produces a *NEW* immutable React element so a component that receives as props always re-renders.).',\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} result]` : `${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 its values are all equal.`,\r\n diffObjType === 'props' ?\r\n 'This could have been avoided by making the component pure, or by preventing its father from re-rendering.' :\r\n 'This usually means this component called setState when no changes in its 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, ownerDataMap} = 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\r\n if(reason.propsDifferences && reason.ownerDifferences){\r\n const prevOwnerData = ownerDataMap.get(prevProps)\r\n const nextOwnerData = ownerDataMap.get(nextProps)\r\n\r\n options.consoleGroup(`Rendered by ${nextOwnerData.displayName}`)\r\n let prefixMessage = 'Re-rendered because'\r\n\r\n if(reason.ownerDifferences.propsDifferences){\r\n logDifference({\r\n Component: nextOwnerData.Component,\r\n displayName: nextOwnerData.displayName,\r\n prefixMessage,\r\n diffObjType: 'props',\r\n differences: reason.ownerDifferences.propsDifferences,\r\n values: {prev: prevOwnerData.props, next: nextOwnerData.props},\r\n options\r\n })\r\n prefixMessage = 'And because'\r\n }\r\n\r\n if(reason.ownerDifferences.stateDifferences){\r\n logDifference({\r\n Component: nextOwnerData.Component,\r\n displayName: nextOwnerData.displayName,\r\n prefixMessage,\r\n diffObjType: 'state',\r\n differences: reason.ownerDifferences.stateDifferences,\r\n values: {prev: prevOwnerData.state, next: nextOwnerData.state},\r\n options\r\n })\r\n }\r\n\r\n if(reason.ownerDifferences.hookDifferences){\r\n reason.ownerDifferences.hookDifferences.forEach(({hookName, differences}, i) =>\r\n logDifference({\r\n Component: nextOwnerData.Component,\r\n displayName: nextOwnerData.displayName,\r\n prefixMessage,\r\n diffObjType: 'hook',\r\n differences,\r\n values: {prev: prevOwnerData.hooks[i].result, next: nextOwnerData.hooks[i].result},\r\n hookName,\r\n options\r\n })\r\n )\r\n }\r\n options.consoleGroupEnd()\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(typeof(module) !== 'undefined' && 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 ('hotReloadBufferMs' in userOptions) ? 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 logOwnerReasons: false,\r\n trackHooks: true,\r\n titleColor: '#058',\r\n diffNameColor: 'blue',\r\n diffPathColor: 'red',\r\n trackExtraHooks: [],\r\n trackAllPureComponents: false,\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 (type.render && getDisplayName(type.render)) ||\r\n (isString(type) ? type : undefined)\r\n )\r\n}\r\n","import {isArray, isPlainObject, isDate, isRegExp, isFunction, isSet, 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 arrayLength = a.length\r\n if(arrayLength !== b.length){\r\n return trackDiff([...a], [...b], diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n const arrayItemDiffs = []\r\n let numberOfDeepEqualsItems = 0\r\n for(let i = arrayLength; i--; i > 0){\r\n const diffEquals = accumulateDeepEqualDiffs(a[i], b[i], arrayItemDiffs, `${pathString}[${i}]`)\r\n if(diffEquals){\r\n numberOfDeepEqualsItems++\r\n }\r\n }\r\n\r\n if(numberOfDeepEqualsItems === arrayLength){\r\n return trackDiff([...a], [...b], diffsAccumulator, pathString, diffTypes.deepEquals)\r\n }\r\n\r\n diffsAccumulator.push(...arrayItemDiffs)\r\n\r\n return trackDiff([...a], [...b], diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isSet(a) && isSet(b)){\r\n if(a.size !== b.size){\r\n return trackDiff(new Set(a), new Set(b), diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n for(const valA of a){\r\n if(!b.has(valA)){\r\n return trackDiff(new Set(a), new Set(b), diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n }\r\n\r\n return trackDiff(new Set(a), new Set(b), diffsAccumulator, pathString, diffTypes.deepEquals)\r\n }\r\n\r\n if(isDate(a) && isDate(b)){\r\n return a.getTime() === b.getTime() ?\r\n trackDiff(new Date(a), new Date(b), diffsAccumulator, pathString, diffTypes.date) :\r\n trackDiff(new Date(a), new Date(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 if(a.type !== b.type){\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n const reactElementPropsAreDeepEqual =\r\n accumulateDeepEqualDiffs(a.props, b.props, [], `${pathString}.props`)\r\n\r\n return reactElementPropsAreDeepEqual ?\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 keysLength = keys.length\r\n if(keysLength !== getKeys(b).length){\r\n return trackDiff({...a}, {...b}, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n for(let i = keysLength; i--; 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 const objectValuesDiffs = []\r\n let numberOfDeepEqualsObjectValues = 0\r\n for(let i = keysLength; i--; i > 0){\r\n const key = keys[i]\r\n const deepEquals = accumulateDeepEqualDiffs(a[key], b[key], objectValuesDiffs, `${pathString}.${key}`)\r\n if(deepEquals){\r\n numberOfDeepEqualsObjectValues++\r\n }\r\n }\r\n\r\n if(numberOfDeepEqualsObjectValues === keysLength){\r\n return trackDiff({...a}, {...b}, diffsAccumulator, pathString, diffTypes.deepEquals)\r\n }\r\n\r\n diffsAccumulator.push(...objectValuesDiffs)\r\n\r\n return 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 getOwnerDifferences({prevOwnerData, nextOwnerData}){\r\n if(!prevOwnerData || !nextOwnerData){\r\n return false\r\n }\r\n\r\n const hookDifferences = prevOwnerData.hooks.map(({hookName, result}, i) => ({\r\n hookName,\r\n differences: findObjectsDifferences(result, nextOwnerData.hooks[i].result, {shallow: false})\r\n }))\r\n\r\n return {\r\n propsDifferences: findObjectsDifferences(prevOwnerData.props, nextOwnerData.props),\r\n stateDifferences: findObjectsDifferences(prevOwnerData.state, nextOwnerData.state),\r\n hookDifferences: hookDifferences.length > 0 ? hookDifferences : false\r\n }\r\n}\r\n\r\nfunction getUpdateReason(prevProps, prevState, prevHook, nextProps, nextState, nextHook, ownerDataMap){\r\n const prevOwnerData = ownerDataMap.get(prevProps)\r\n const nextOwnerData = ownerDataMap.get(nextProps)\r\n\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 ownerDifferences: getOwnerDifferences({prevOwnerData, nextOwnerData})\r\n }\r\n}\r\n\r\nexport default function getUpdateInfo({Component, displayName, hookName, prevProps, prevState, prevHook, nextProps, nextState, nextHook, options, ownerDataMap}){\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 ownerDataMap,\r\n reason: getUpdateReason(prevProps, prevState, prevHook, nextProps, nextState, nextHook, ownerDataMap)\r\n }\r\n}\r\n","// copied from https://github.com/facebook/react/blob/master/packages/react-reconciler/src/ReactTypeOfMode.js\r\nimport {REACT_FORWARD_REF_TYPE, REACT_MEMO_TYPE} from './consts'\r\n\r\nconst StrictMode = 0b0001\r\n\r\n// based on \"findStrictRoot\" from https://github.com/facebook/react/blob/master/packages/react-reconciler/src/ReactStrictModeWarnings.js\r\n// notice: this is only used for class components. functional components doesn't re-rendered inside strict mode\r\nexport function checkIfInsideAStrictModeTree(reactComponentInstance){\r\n let reactInternalFiber = reactComponentInstance && reactComponentInstance._reactInternalFiber\r\n while(reactInternalFiber){\r\n if(reactInternalFiber.mode & StrictMode){\r\n return true\r\n }\r\n reactInternalFiber = reactInternalFiber.return\r\n }\r\n return false\r\n}\r\n\r\nexport function isReactClassComponent(Component){\r\n return Component.prototype && !!Component.prototype.isReactComponent\r\n}\r\n\r\nexport function isMemoComponent(Component){\r\n return Component.$$typeof === REACT_MEMO_TYPE\r\n}\r\n\r\nexport function isForwardRefComponent(Component){\r\n return Component.$$typeof === REACT_FORWARD_REF_TYPE\r\n}\r\n","import {isMemoComponent} from './utils'\r\n\r\nfunction 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, React, isHookChange}){\r\n if(shouldExclude(displayName, options)){\r\n return false\r\n }\r\n\r\n if(Component.whyDidYouRender === false){\r\n return false\r\n }\r\n\r\n if(isHookChange && (\r\n Component.whyDidYouRender && Component.whyDidYouRender.trackHooks === false\r\n )){\r\n return false\r\n }\r\n\r\n return !!(\r\n Component.whyDidYouRender || (\r\n options.trackAllPureComponents && (\r\n (Component && Component.prototype instanceof React.PureComponent) ||\r\n isMemoComponent(Component)\r\n )\r\n ) ||\r\n shouldInclude(displayName, options)\r\n )\r\n}\r\n","import {defaults} from 'lodash'\r\n\r\nimport {checkIfInsideAStrictModeTree} from '../utils'\r\nimport getUpdateInfo from '../getUpdateInfo'\r\n\r\nexport default function patchClassComponent(ClassComponent, displayName, React, options, ownerDataMap){\r\n class WDYRPatchedClassComponent extends ClassComponent{\r\n constructor(props, context){\r\n super(props, context)\r\n\r\n this._WDYR = {\r\n renderNumber: 0\r\n }\r\n\r\n const origRender = super.render || this.render\r\n // this probably means render is an arrow function or this.render.bind(this) was called on the original class\r\n const renderIsABindedFunction = origRender !== ClassComponent.prototype.render\r\n if(renderIsABindedFunction){\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 this._WDYR.renderNumber++\r\n\r\n if(!('isStrictMode' in this._WDYR)){\r\n this._WDYR.isStrictMode = checkIfInsideAStrictModeTree(this)\r\n }\r\n\r\n // in strict mode- ignore every other render\r\n if(!(this._WDYR.isStrictMode && this._WDYR.renderNumber % 2 === 1)){\r\n if(this._WDYR.prevProps){\r\n const updateInfo = getUpdateInfo({\r\n Component: ClassComponent,\r\n displayName,\r\n prevProps: this._WDYR.prevProps,\r\n prevState: this._WDYR.prevState,\r\n nextProps: this.props,\r\n nextState: this.state,\r\n options,\r\n ownerDataMap\r\n })\r\n\r\n options.notifier(updateInfo)\r\n }\r\n\r\n this._WDYR.prevProps = this.props\r\n this._WDYR.prevState = this.state\r\n }\r\n\r\n return super.render ? super.render() : null\r\n }\r\n }\r\n\r\n try{\r\n WDYRPatchedClassComponent.displayName = displayName\r\n }catch(e){\r\n // not crucial if displayName couldn't be set\r\n }\r\n\r\n defaults(WDYRPatchedClassComponent, ClassComponent)\r\n\r\n return WDYRPatchedClassComponent\r\n}\r\n","import {defaults} from 'lodash'\r\n\r\nimport getUpdateInfo from '../getUpdateInfo'\r\n\r\nconst getFunctionalComponentFromStringComponent = (componentTypeStr, React) => props => (\r\n React.createElement(componentTypeStr, props)\r\n)\r\n\r\nexport default function patchFunctionalOrStrComponent(FunctionalOrStringComponent, isPure, displayName, React, options, ownerDataMap){\r\n const FunctionalComponent = typeof(FunctionalOrStringComponent) === 'string' ?\r\n getFunctionalComponentFromStringComponent(FunctionalOrStringComponent, React) :\r\n FunctionalOrStringComponent\r\n\r\n function WDYRFunctionalComponent(){\r\n const nextProps = arguments[0]\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 updateInfo = getUpdateInfo({\r\n Component: FunctionalComponent,\r\n displayName,\r\n prevProps,\r\n nextProps,\r\n options,\r\n ownerDataMap\r\n })\r\n\r\n const notifiedByHooks = (\r\n !updateInfo.reason.propsDifferences || (\r\n (isPure && updateInfo.reason.propsDifferences.length === 0)\r\n )\r\n )\r\n\r\n if(!notifiedByHooks){\r\n options.notifier(updateInfo)\r\n }\r\n }\r\n\r\n return FunctionalComponent(...arguments)\r\n }\r\n\r\n try{\r\n WDYRFunctionalComponent.displayName = displayName\r\n }catch(e){\r\n // not crucial if displayName couldn't be set\r\n }\r\n\r\n WDYRFunctionalComponent.ComponentForHooksTracking = FunctionalComponent\r\n defaults(WDYRFunctionalComponent, FunctionalComponent)\r\n\r\n return WDYRFunctionalComponent\r\n}\r\n","import {get} 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\nimport patchClassComponent from './patches/patchClassComponent'\r\nimport patchFunctionalOrStrComponent from './patches/patchFunctionalOrStrComponent'\r\nimport patchMemoComponent from './patches/patchMemoComponent'\r\nimport patchForwardRefComponent from './patches/patchForwardRefComponent'\r\n\r\nimport {isForwardRefComponent, isMemoComponent, isReactClassComponent} from './utils'\r\n\r\nconst initialHookValue = Symbol('initial-hook-value')\r\nfunction trackHookChanges(hookName, {path: hookPath}, hookResult, React, options, ownerDataMap, hooksRef){\r\n const nextHook = hookPath ? get(hookResult, hookPath) : hookResult\r\n hooksRef.current.push({hookName, result: nextHook})\r\n const ComponentHookDispatchedFromInstance = (\r\n React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED &&\r\n React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner.current\r\n )\r\n\r\n const prevHookResultRef = React.useRef(initialHookValue)\r\n\r\n if(!ComponentHookDispatchedFromInstance){\r\n return hookResult\r\n }\r\n\r\n const Component = ComponentHookDispatchedFromInstance.type.ComponentForHooksTracking || ComponentHookDispatchedFromInstance.type\r\n const displayName = getDisplayName(Component)\r\n\r\n const isShouldTrack = shouldTrack({Component, displayName, options, React, isHookChange: true})\r\n if(!isShouldTrack){\r\n return hookResult\r\n }\r\n\r\n const prevHookResult = prevHookResultRef.current\r\n prevHookResultRef.current = hookResult\r\n\r\n if(prevHookResult !== initialHookValue){\r\n const notification = getUpdateInfo({\r\n Component: Component,\r\n displayName,\r\n hookName,\r\n prevHook: hookPath ? get(prevHookResult, hookPath) : prevHookResult,\r\n nextHook,\r\n options,\r\n ownerDataMap\r\n })\r\n\r\n if(notification.reason.hookDifferences){\r\n options.notifier(notification)\r\n }\r\n }\r\n\r\n return hookResult\r\n}\r\n\r\nfunction createPatchedComponent(componentsMap, Component, displayName, React, options, ownerDataMap){\r\n if(isMemoComponent(Component)){\r\n return patchMemoComponent(Component, displayName, React, options, ownerDataMap)\r\n }\r\n\r\n if(isForwardRefComponent(Component)){\r\n return patchForwardRefComponent(Component, displayName, React, options, ownerDataMap)\r\n }\r\n\r\n if(isReactClassComponent(Component)){\r\n return patchClassComponent(Component, displayName, React, options, ownerDataMap)\r\n }\r\n\r\n return patchFunctionalOrStrComponent(Component, false, displayName, React, options, ownerDataMap)\r\n}\r\n\r\nfunction getPatchedComponent(componentsMap, Component, displayName, React, options, ownerDataMap){\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, ownerDataMap)\r\n\r\n componentsMap.set(Component, WDYRPatchedComponent)\r\n return WDYRPatchedComponent\r\n}\r\n\r\nfunction getIsSupportedComponentType(Comp){\r\n if(!Comp){\r\n return false\r\n }\r\n\r\n if(typeof Comp === 'function'){\r\n return true\r\n }\r\n\r\n if(isMemoComponent(Comp)){\r\n return getIsSupportedComponentType(Comp.type)\r\n }\r\n\r\n if(isForwardRefComponent(Comp)){\r\n return getIsSupportedComponentType(Comp.render)\r\n }\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 const ownerDataMap = new WeakMap()\r\n const hooksRef = {current: []}\r\n\r\n // Intercept assignments to ReactCurrentOwner.current and reset hooksRef\r\n let currentOwner = null\r\n if(React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED){\r\n Object.defineProperty(React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner, 'current', {\r\n get(){\r\n return currentOwner\r\n },\r\n set(value){\r\n currentOwner = value\r\n hooksRef.current = []\r\n }\r\n })\r\n }\r\n\r\n React.createElement = function(componentNameOrComponent, ...rest){\r\n let isShouldTrack = null\r\n let displayName = null\r\n let WDYRPatchedComponent = null\r\n\r\n try{\r\n isShouldTrack = (\r\n getIsSupportedComponentType(componentNameOrComponent) &&\r\n shouldTrack({Component: componentNameOrComponent, displayName: getDisplayName(componentNameOrComponent), React, options})\r\n )\r\n\r\n if(isShouldTrack){\r\n displayName = (\r\n componentNameOrComponent &&\r\n componentNameOrComponent.whyDidYouRender &&\r\n componentNameOrComponent.whyDidYouRender.customName ||\r\n getDisplayName(componentNameOrComponent)\r\n )\r\n\r\n WDYRPatchedComponent = getPatchedComponent(componentsMap, componentNameOrComponent, displayName, React, options, ownerDataMap)\r\n\r\n const element = origCreateElement.apply(React, [WDYRPatchedComponent, ...rest])\r\n if(options.logOwnerReasons){\r\n const OwnerInstance = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner.current\r\n if(OwnerInstance){\r\n const Component = OwnerInstance.type.ComponentForHooksTracking || OwnerInstance.type\r\n const displayName = getDisplayName(Component)\r\n ownerDataMap.set(element.props, {\r\n Component,\r\n displayName,\r\n props: OwnerInstance.pendingProps,\r\n state: OwnerInstance.stateNode != null ? OwnerInstance.stateNode.state : null,\r\n hooks: hooksRef.current\r\n })\r\n }\r\n }\r\n\r\n return element\r\n }\r\n }\r\n catch(e){\r\n options.consoleLog('whyDidYouRender error. Please file a bug at https://github.com/welldone-software/why-did-you-render/issues.', {\r\n errorInfo: {\r\n error: e,\r\n componentNameOrComponent,\r\n rest,\r\n options,\r\n isShouldTrack,\r\n displayName,\r\n WDYRPatchedComponent\r\n }\r\n })\r\n }\r\n\r\n return origCreateElement.apply(React, [componentNameOrComponent, ...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 if(options.trackHooks){\r\n const nativeHooks = Object.entries(hooksConfig).map(([hookName, hookTrackingConfig]) => {\r\n return [React, hookName, hookTrackingConfig]\r\n })\r\n\r\n const hooksToTrack = [\r\n ...nativeHooks,\r\n ...options.trackExtraHooks\r\n ]\r\n\r\n hooksToTrack.forEach(([hookParent, hookName, hookTrackingConfig = {}]) => {\r\n const originalHook = hookParent[hookName]\r\n const newHookName = hookName[0].toUpperCase() + hookName.slice(1)\r\n const newHook = function(...args){\r\n const hookResult = originalHook.call(this, ...args)\r\n trackHookChanges(hookName, hookTrackingConfig, hookResult, React, options, ownerDataMap, hooksRef)\r\n return hookResult\r\n }\r\n Object.defineProperty(newHook, 'name', {value: newHookName, writable: false})\r\n Object.assign(newHook, {originalHook})\r\n hookParent[hookName] = newHook\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\r\n componentsMap = null\r\n\r\n const hooksToRevert = [\r\n ...Object.keys(hooksConfig).map(hookName => [React, hookName]),\r\n ...options.trackExtraHooks\r\n ]\r\n hooksToRevert.forEach(([hookParent, hookName]) => {\r\n if(hookParent[hookName].originalHook){\r\n hookParent[hookName] = hookParent[hookName].originalHook\r\n }\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","import {defaults} from 'lodash'\r\n\r\nimport getDisplayName from '../getDisplayName'\r\n\r\nimport {isForwardRefComponent, isMemoComponent, isReactClassComponent} from '../utils'\r\nimport patchClassComponent from './patchClassComponent'\r\nimport patchFunctionalOrStrComponent from './patchFunctionalOrStrComponent'\r\n\r\nexport default function patchMemoComponent(MemoComponent, displayName, React, options, ownerDataMap){\r\n const {type: InnerMemoComponent} = MemoComponent\r\n\r\n const isInnerMemoComponentAClassComponent = isReactClassComponent(InnerMemoComponent)\r\n const isInnerMemoComponentForwardRefs = isForwardRefComponent(InnerMemoComponent)\r\n const isInnerMemoComponentAnotherMemoComponent = isMemoComponent(InnerMemoComponent)\r\n\r\n const WrappedFunctionalComponent = isInnerMemoComponentForwardRefs ?\r\n InnerMemoComponent.render :\r\n InnerMemoComponent\r\n\r\n const PatchedInnerComponent = isInnerMemoComponentAClassComponent ?\r\n patchClassComponent(WrappedFunctionalComponent, displayName, React, options, ownerDataMap) :\r\n (isInnerMemoComponentAnotherMemoComponent ?\r\n patchMemoComponent(WrappedFunctionalComponent, displayName, React, options, ownerDataMap) :\r\n patchFunctionalOrStrComponent(WrappedFunctionalComponent, true, displayName, React, options, ownerDataMap)\r\n )\r\n\r\n try{\r\n PatchedInnerComponent.displayName = getDisplayName(WrappedFunctionalComponent)\r\n }catch(e){\r\n // not crucial if displayName couldn't be set\r\n }\r\n\r\n PatchedInnerComponent.ComponentForHooksTracking = MemoComponent\r\n defaults(PatchedInnerComponent, WrappedFunctionalComponent)\r\n\r\n const WDYRMemoizedFunctionalComponent = React.memo(\r\n isInnerMemoComponentForwardRefs ? React.forwardRef(PatchedInnerComponent) : PatchedInnerComponent,\r\n MemoComponent.compare\r\n )\r\n\r\n try{\r\n WDYRMemoizedFunctionalComponent.displayName = displayName\r\n }catch(e){\r\n // not crucial if displayName couldn't be set\r\n }\r\n\r\n defaults(WDYRMemoizedFunctionalComponent, MemoComponent)\r\n\r\n return WDYRMemoizedFunctionalComponent\r\n}\r\n","import {defaults} from 'lodash'\r\n\r\nimport getDisplayName from '../getDisplayName'\r\nimport {isMemoComponent} from '../utils'\r\nimport patchFunctionalOrStrComponent from './patchFunctionalOrStrComponent'\r\n\r\nexport default function patchForwardRefComponent(ForwardRefComponent, displayName, React, options, ownerDataMap){\r\n const {render: InnerForwardRefComponent} = ForwardRefComponent\r\n\r\n const isInnerComponentMemoized = isMemoComponent(InnerForwardRefComponent)\r\n const WrappedFunctionalComponent = isInnerComponentMemoized ?\r\n InnerForwardRefComponent.type : InnerForwardRefComponent\r\n\r\n const WDYRWrappedByReactForwardRefFunctionalComponent = (\r\n patchFunctionalOrStrComponent(WrappedFunctionalComponent, isInnerComponentMemoized, displayName, React, options, ownerDataMap)\r\n )\r\n\r\n WDYRWrappedByReactForwardRefFunctionalComponent.displayName = getDisplayName(WrappedFunctionalComponent)\r\n WDYRWrappedByReactForwardRefFunctionalComponent.ComponentForHooksTracking = WrappedFunctionalComponent\r\n defaults(WDYRWrappedByReactForwardRefFunctionalComponent, WrappedFunctionalComponent)\r\n\r\n const WDYRForwardRefFunctionalComponent = React.forwardRef(\r\n isInnerComponentMemoized ?\r\n React.memo(WDYRWrappedByReactForwardRefFunctionalComponent, InnerForwardRefComponent.compare) :\r\n WDYRWrappedByReactForwardRefFunctionalComponent\r\n )\r\n\r\n try{\r\n WDYRForwardRefFunctionalComponent.displayName = displayName\r\n }catch(e){\r\n // not crucial if displayName couldn't be set\r\n }\r\n\r\n defaults(WDYRForwardRefFunctionalComponent, ForwardRefComponent)\r\n\r\n return WDYRForwardRefFunctionalComponent\r\n}\r\n","import whyDidYouRender from './whyDidYouRender'\r\nimport defaultNotifier from './defaultNotifier'\r\n\r\nwhyDidYouRender.defaultNotifier = defaultNotifier\r\nexport default whyDidYouRender\r\n"],"names":["diffTypes","hasSymbol","Symbol","REACT_MEMO_TYPE","REACT_FORWARD_REF_TYPE","diffTypesDescriptions","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","ownerDataMap","logOnDifferentValues","whyDidYouRender","propsDifferences","some","diff","stateDifferences","hookDifferences","shouldLog","titleColor","ownerDifferences","prevOwnerData","get","nextOwnerData","props","state","i","hooks","result","createDefaultNotifier","hotReloadBufferMs","module","hot","addStatusHandler","status","setTimeout","emptyFn","getDisplayName","type","name","render","_isString","undefined","hasElementType","Element","REACT_ELEMENT_TYPE","isReactElement","object","$$typeof","trackDiff","a","b","diffsAccumulator","push","calculateDeepEqualDiffs","initialPathString","diffs","accumulateDeepEqualDiffs","_isArray","arrayLength","arrayItemDiffs","numberOfDeepEqualsItems","diffEquals","_isSet","size","Set","valA","has","_isDate","getTime","Date","_isRegExp","toString","reactElementPropsAreDeepEqual","_isFunction","_isPlainObject","keys","_keys","keysLength","_has","objectValuesDiffs","numberOfDeepEqualsObjectValues","key","deepEquals","error","message","match","number","console","warn","emptyObject","findObjectsDifferences","userPrevObj","userNextObj","shallow","prevObj","nextObj","keysOfBothObjects","Object","_reduce","deepEqualDiffs","getOwnerDifferences","map","getUpdateReason","getUpdateInfo","isReactClassComponent","prototype","isReactComponent","isMemoComponent","isForwardRefComponent","shouldTrack","React","isHookChange","exclude","regex","test","shouldExclude","trackHooks","trackAllPureComponents","PureComponent","include","shouldInclude","patchClassComponent","ClassComponent","WDYRPatchedClassComponent","context","_WDYR","renderNumber","origRender","_get","_this","apply","this","isStrictMode","reactComponentInstance","reactInternalFiber","_reactInternalFiber","mode","checkIfInsideAStrictModeTree","notifier","e","patchFunctionalOrStrComponent","FunctionalOrStringComponent","isPure","FunctionalComponent","componentTypeStr","createElement","getFunctionalComponentFromStringComponent","WDYRFunctionalComponent","arguments","ref","useRef","current","notifiedByHooks","ComponentForHooksTracking","initialHookValue","trackHookChanges","hookResult","hooksRef","hookPath","path","ComponentHookDispatchedFromInstance","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","ReactCurrentOwner","prevHookResultRef","prevHookResult","notification","createPatchedComponent","componentsMap","patchMemoComponent","MemoComponent","InnerMemoComponent","isInnerMemoComponentAClassComponent","isInnerMemoComponentForwardRefs","isInnerMemoComponentAnotherMemoComponent","WrappedFunctionalComponent","PatchedInnerComponent","WDYRMemoizedFunctionalComponent","memo","forwardRef","compare","ForwardRefComponent","InnerForwardRefComponent","isInnerComponentMemoized","WDYRWrappedByReactForwardRefFunctionalComponent","WDYRForwardRefFunctionalComponent","patchForwardRefComponent","getPatchedComponent","WDYRPatchedComponent","set","getIsSupportedComponentType","Comp","hooksConfig","useState","useReducer","useContext","useMemo","userOptions","group","groupEnd","collapseGroups","groupCollapsed","onlyLogs","log","logOwnerReasons","trackExtraHooks","normalizeOptions","origCreateElement","origCreateFactory","createFactory","WeakMap","currentOwner","defineProperty","value","componentNameOrComponent","isShouldTrack","rest","customName","element","OwnerInstance","pendingProps","stateNode","errorInfo","assign","factory","bind","nativeHooks","entries","hookTrackingConfig","hookParent","originalHook","newHookName","toUpperCase","slice","newHook","args","call","writable","__REVERT_WHY_DID_YOU_RENDER__"],"mappings":"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"} \ 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 8714c3c..ae7f4d1 100644 --- a/dist/no-classes-transpile/cjs/whyDidYouRender.js +++ b/dist/no-classes-transpile/cjs/whyDidYouRender.js @@ -1,8 +1,8 @@ /** - * @welldone-software/why-did-you-render 4.2.2 + * @welldone-software/why-did-you-render 4.2.3 * MIT Licensed * Generated by Vitali Zaidman (https://github.com/vzaidman) - * Generated at 2020-05-20 + * Generated at 2020-05-30 */ 'use strict'; @@ -143,9 +143,12 @@ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } -function _createForOfIteratorHelper(o) { +function _createForOfIteratorHelper(o, allowArrayLike) { + var it; + if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { - if (Array.isArray(o) || (o = _unsupportedIterableToArray(o))) { + if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { + if (it) o = it; var i = 0; var F = function () {}; @@ -171,8 +174,7 @@ function _createForOfIteratorHelper(o) { throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } - var it, - normalCompletion = true, + var normalCompletion = true, didErr = false, err; return { @@ -651,6 +653,31 @@ function findObjectsDifferences(userPrevObj, userNextObj) { }, []); } +function getOwnerDifferences(_ref) { + var prevOwnerData = _ref.prevOwnerData, + nextOwnerData = _ref.nextOwnerData; + + if (!prevOwnerData || !nextOwnerData) { + return false; + } + + var hookDifferences = prevOwnerData.hooks.map(function (_ref2, i) { + var hookName = _ref2.hookName, + result = _ref2.result; + return { + hookName: hookName, + differences: findObjectsDifferences(result, nextOwnerData.hooks[i].result, { + shallow: false + }) + }; + }); + return { + propsDifferences: findObjectsDifferences(prevOwnerData.props, nextOwnerData.props), + stateDifferences: findObjectsDifferences(prevOwnerData.state, nextOwnerData.state), + hookDifferences: hookDifferences.length > 0 ? hookDifferences : false + }; +} + function getUpdateReason(prevProps, prevState, prevHook, nextProps, nextState, nextHook, ownerDataMap) { var prevOwnerData = ownerDataMap.get(prevProps); var nextOwnerData = ownerDataMap.get(nextProps); @@ -660,35 +687,25 @@ function getUpdateReason(prevProps, prevState, prevHook, nextProps, nextState, n hookDifferences: findObjectsDifferences(prevHook, nextHook, { shallow: false }), - ownerDifferences: prevOwnerData != null && nextOwnerData != null ? { - propsDifferences: findObjectsDifferences(prevOwnerData.props, nextOwnerData.props), - stateDifferences: findObjectsDifferences(prevOwnerData.state, nextOwnerData.state), - hookDifferences: prevOwnerData.hooks.map(function (_ref, i) { - var hookName = _ref.hookName, - result = _ref.result; - return { - hookName: hookName, - differences: findObjectsDifferences(result, nextOwnerData.hooks[i].result, { - shallow: false - }) - }; - }) - } : false + ownerDifferences: getOwnerDifferences({ + prevOwnerData: prevOwnerData, + nextOwnerData: nextOwnerData + }) }; } -function getUpdateInfo(_ref2) { - var Component = _ref2.Component, - displayName = _ref2.displayName, - hookName = _ref2.hookName, - prevProps = _ref2.prevProps, - prevState = _ref2.prevState, - prevHook = _ref2.prevHook, - nextProps = _ref2.nextProps, - nextState = _ref2.nextState, - nextHook = _ref2.nextHook, - options = _ref2.options, - ownerDataMap = _ref2.ownerDataMap; +function getUpdateInfo(_ref3) { + var Component = _ref3.Component, + displayName = _ref3.displayName, + hookName = _ref3.hookName, + prevProps = _ref3.prevProps, + prevState = _ref3.prevState, + prevHook = _ref3.prevHook, + nextProps = _ref3.nextProps, + nextState = _ref3.nextState, + nextHook = _ref3.nextHook, + options = _ref3.options, + ownerDataMap = _ref3.ownerDataMap; return { Component: Component, displayName: displayName, @@ -1005,6 +1022,24 @@ function getPatchedComponent(componentsMap, Component, displayName, React, optio return WDYRPatchedComponent; } +function getIsSupportedComponentType(Comp) { + if (!Comp) { + return false; + } + + if (typeof Comp === 'function') { + return true; + } + + if (isMemoComponent(Comp)) { + return getIsSupportedComponentType(Comp.type); + } + + if (isForwardRefComponent(Comp)) { + return getIsSupportedComponentType(Comp.render); + } +} + var hooksConfig = { useState: { path: '0' @@ -1049,7 +1084,7 @@ function whyDidYouRender(React, userOptions) { } try { - isShouldTrack = (typeof componentNameOrComponent === 'function' || isMemoComponent(componentNameOrComponent) || isForwardRefComponent(componentNameOrComponent)) && shouldTrack({ + isShouldTrack = getIsSupportedComponentType(componentNameOrComponent) && shouldTrack({ Component: componentNameOrComponent, displayName: getDisplayName(componentNameOrComponent), React: React, @@ -1064,7 +1099,7 @@ function whyDidYouRender(React, userOptions) { if (options.logOwnerReasons) { var OwnerInstance = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner.current; - if (OwnerInstance != null) { + if (OwnerInstance) { var Component = OwnerInstance.type.ComponentForHooksTracking || OwnerInstance.type; var _displayName = getDisplayName(Component); diff --git a/dist/no-classes-transpile/cjs/whyDidYouRender.min.js b/dist/no-classes-transpile/cjs/whyDidYouRender.min.js index bb4ba55..c1ebdf2 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 4.2.2 + * @welldone-software/why-did-you-render 4.2.3 * MIT Licensed * Generated by Vitali Zaidman (https://github.com/vzaidman) - * Generated at 2020-05-20 + * Generated at 2020-05-30 */ -"use strict";function e(e){return e&&"object"==typeof e&&"default"in e?e.default:e}var r=e(require("lodash/get")),t=e(require("lodash/isString")),n=e(require("lodash/reduce")),o=e(require("lodash/has")),a=e(require("lodash/keys")),i=e(require("lodash/isSet")),s=e(require("lodash/isFunction")),c=e(require("lodash/isRegExp")),f=e(require("lodash/isDate")),u=e(require("lodash/isPlainObject")),p=e(require("lodash/isArray")),l=e(require("lodash/defaults"));function d(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function m(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r&&(n=n.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,n)}return t}function y(e){for(var r=1;re.length)&&(r=e.length);for(var t=0,n=new Array(r);t=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:t}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var n,o,a=!0,i=!1;return{s:function(){n=e[Symbol.iterator]()},n:function(){var e=n.next();return a=e.done,e},e:function(e){i=!0,o=e},f:function(){try{a||null==n.return||n.return()}finally{if(i)throw o}}}}var _,w="different",k="deepEquals",R="date",O="regex",E="reactElement",N="function",S="function"==typeof Symbol&&Symbol.for,C=S?Symbol.for("react.memo"):60115,x=S?Symbol.for("react.forward_ref"):60112,j=(d(_={},w,"different objects."),d(_,k,"different objects that are equal by value."),d(_,R,"different date objects with the same value."),d(_,O,"different regular expressions with the same value."),d(_,E,"different React elements (remember that the syntax always produces a *NEW* immutable React element so a component that receives as props always re-renders.)."),d(_,N,"different functions with the same name."),_),T=!1;function P(e){var r=e.Component,t=e.displayName,n=e.hookName,o=e.prefixMessage,a=e.diffObjType,i=e.differences,s=e.values,c=e.options;i&&i.length>0?(c.consoleLog(d({},t,r),"".concat(o," of ").concat(a," changes:")),i.forEach((function(e){var r=e.pathString,t=e.diffType,o=e.prevValue,i=e.nextValue;c.consoleGroup("%c".concat("hook"===a?"[hook ".concat(n," result]"):"".concat(a,"."),"%c").concat(r,"%c"),"color:".concat(c.diffNameColor,";"),"color:".concat(c.diffPathColor,";"),"color:default;"),c.consoleLog("".concat(j[t]," (more info at ").concat(n?"http://bit.ly/wdyr3":"http://bit.ly/wdyr02",")")),c.consoleLog(d({},"prev ".concat(r),o),"!==",d({},"next ".concat(r),i)),c.consoleGroupEnd()}))):i&&(c.consoleLog(d({},t,r),"".concat(o," the ").concat(a," object itself changed but its values are all equal."),"props"===a?"This could have been avoided by making the component pure, or by preventing its father from re-rendering.":"This usually means this component called setState when no changes in its state actually occurred.","More info at ".concat("http://bit.ly/wdyr02")),c.consoleLog("prev ".concat(a,":"),s.prev," !== ",s.next,":next ".concat(a)))}function Y(e){var r=e.Component,t=e.displayName,n=e.hookName,o=e.prevProps,a=e.prevState,i=e.prevHook,s=e.nextProps,c=e.nextState,f=e.nextHook,u=e.reason,p=e.options,l=e.ownerDataMap;if(function(e,r,t){return!T&&(!!t.logOnDifferentValues||(!(!r.whyDidYouRender||!r.whyDidYouRender.logOnDifferentValues)||!(e.propsDifferences&&e.propsDifferences.some((function(e){return e.diffType===w}))||e.stateDifferences&&e.stateDifferences.some((function(e){return e.diffType===w}))||e.hookDifferences&&e.hookDifferences.some((function(e){return e.diffType===w})))))}(u,r,p)){p.consoleGroup("%c".concat(t),"color: ".concat(p.titleColor,";"));var m="Re-rendered because";if(u.propsDifferences&&(P({Component:r,displayName:t,prefixMessage:m,diffObjType:"props",differences:u.propsDifferences,values:{prev:o,next:s},options:p}),m="And because"),u.stateDifferences&&P({Component:r,displayName:t,prefixMessage:m,diffObjType:"state",differences:u.stateDifferences,values:{prev:a,next:c},options:p}),u.hookDifferences&&P({Component:r,displayName:t,prefixMessage:m,diffObjType:"hook",differences:u.hookDifferences,values:{prev:i,next:f},hookName:n,options:p}),u.propsDifferences&&u.ownerDifferences){var y=l.get(o),h=l.get(s);p.consoleGroup("Rendered by ".concat(h.displayName));var v="Re-rendered because";u.ownerDifferences.propsDifferences&&(P({Component:h.Component,displayName:h.displayName,prefixMessage:v,diffObjType:"props",differences:u.ownerDifferences.propsDifferences,values:{prev:y.props,next:h.props},options:p}),v="And because"),u.ownerDifferences.stateDifferences&&P({Component:h.Component,displayName:h.displayName,prefixMessage:v,diffObjType:"state",differences:u.ownerDifferences.stateDifferences,values:{prev:y.state,next:h.state},options:p}),u.ownerDifferences.hookDifferences&&u.ownerDifferences.hookDifferences.forEach((function(e,r){var t=e.hookName,n=e.differences;return P({Component:h.Component,displayName:h.displayName,prefixMessage:v,diffObjType:"hook",differences:n,values:{prev:y.hooks[r].result,next:h.hooks[r].result},hookName:t,options:p})})),p.consoleGroupEnd()}u.propsDifferences||u.stateDifferences||u.hookDifferences||p.consoleLog(d({},t,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("http://bit.ly/wdyr02")),p.consoleGroupEnd()}}function H(e){return e&&"undefined"!=typeof module&&module.hot&&module.hot.addStatusHandler&&module.hot.addStatusHandler((function(r){"idle"===r&&(T=!0,setTimeout((function(){T=!1}),e))})),Y}var I=function(){};function L(e){return e.displayName||e.name||e.type&&L(e.type)||e.render&&L(e.render)||(t(e)?e:void 0)}var A="undefined"!=typeof Element,M="function"==typeof Symbol&&Symbol.for?Symbol.for("react.element"):60103,W=function(e){return e.$$typeof===M};function F(e,r,t,n,o){return t.push({diffType:o,pathString:n,prevValue:e,nextValue:r}),o!==w}function q(e,r,t){try{var n=[];return function e(r,t,n){var l=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"";if(r===t)return!0;if(!r||!t)return F(r,t,n,l,w);if(p(r)&&p(t)){var d=r.length;if(d!==t.length)return F(v(r),v(t),n,l,w);for(var m=[],h=0,b=d;b--;b>0){var g=e(r[b],t[b],m,"".concat(l,"[").concat(b,"]"));g&&h++}return h===d?F(v(r),v(t),n,l,k):(n.push.apply(n,m),F(v(r),v(t),n,l,w))}if(i(r)&&i(t)){if(r.size!==t.size)return F(new Set(r),new Set(t),n,l,w);var _,S=D(r);try{for(S.s();!(_=S.n()).done;){var C=_.value;if(!t.has(C))return F(new Set(r),new Set(t),n,l,w)}}catch(e){S.e(e)}finally{S.f()}return F(new Set(r),new Set(t),n,l,k)}if(f(r)&&f(t))return r.getTime()===t.getTime()?F(new Date(r),new Date(t),n,l,R):F(new Date(r),new Date(t),n,l,w);if(c(r)&&c(t))return r.toString()===t.toString()?F(r,t,n,l,O):F(r,t,n,l,w);if(A&&r instanceof Element&&t instanceof Element)return F(r,t,n,l,w);if(W(r)&&W(t)){if(r.type!==t.type)return F(r,t,n,l,w);var x=e(r.props,t.props,[],"".concat(l,".props"));return F(r,t,n,l,x?E:w)}if(s(r)&&s(t))return r.name===t.name?F(r,t,n,l,N):F(r,t,n,l,w);if(u(r)&&u(t)){var j=a(r),T=j.length;if(T!==a(t).length)return F(y({},r),y({},t),n,l,w);for(var P=T;P--;P>0)if(!o(t,j[P]))return F(y({},r),y({},t),n,l,w);for(var Y=[],H=0,I=T;I--;I>0){var L=j[I],M=e(r[L],t[L],Y,"".concat(l,".").concat(L));M&&H++}return H===T?F(y({},r),y({},t),n,l,k):(n.push.apply(n,Y),F(y({},r),y({},t),n,l,w))}return F(r,t,n,l,w)}(e,r,n,t),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 U={};function G(e,r){var t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=t.shallow,a=void 0===o||o;if(e===r)return!1;if(!a)return q(e,r);var i=e||U,s=r||U,c=Object.keys(y(y({},i),s));return n(c,(function(e,r){var t=q(i[r],s[r],r);return t&&(e=[].concat(v(e),v(t))),e}),[])}function V(e,r,t,n,o,a,i){var s=i.get(e),c=i.get(n);return{propsDifferences:G(e,n),stateDifferences:G(r,o),hookDifferences:G(t,a,{shallow:!1}),ownerDifferences:null!=s&&null!=c&&{propsDifferences:G(s.props,c.props),stateDifferences:G(s.state,c.state),hookDifferences:s.hooks.map((function(e,r){return{hookName:e.hookName,differences:G(e.result,c.hooks[r].result,{shallow:!1})}}))}}}function B(e){var r=e.Component,t=e.displayName,n=e.hookName,o=e.prevProps,a=e.prevState,i=e.prevHook,s=e.nextProps,c=e.nextState,f=e.nextHook,u=e.options,p=e.ownerDataMap;return{Component:r,displayName:t,hookName:n,prevProps:o,prevState:a,prevHook:i,nextProps:s,nextState:c,nextHook:f,options:u,ownerDataMap:p,reason:V(o,a,i,s,c,f,p)}}function $(e){return e.prototype&&!!e.prototype.isReactComponent}function z(e){return e.$$typeof===C}function J(e){return e.$$typeof===x}function K(e){var r=e.Component,t=e.displayName,n=e.options,o=e.React,a=e.isHookChange;return!function(e,r){return r.exclude&&r.exclude.length>0&&r.exclude.some((function(r){return r.test(e)}))}(t,n)&&(!1!==r.whyDidYouRender&&((!a||!r.whyDidYouRender||!1!==r.whyDidYouRender.trackHooks)&&!!(r.whyDidYouRender||n.trackAllPureComponents&&(r&&r.prototype instanceof o.PureComponent||z(r))||function(e,r){return r.include&&r.include.length>0&&r.include.some((function(r){return r.test(e)}))}(t,n))))}function Q(e,r,t,n,o){class a extends e{constructor(r,t){var n;super(r,t),n=this,this._WDYR={renderNumber:0};var o=super.render||this.render;o!==e.prototype.render&&(this.render=function(){return a.prototype.render.apply(n),o()})}render(){if(this._WDYR.renderNumber++,"isStrictMode"in this._WDYR||(this._WDYR.isStrictMode=function(e){for(var r=e&&e._reactInternalFiber;r;){if(1&r.mode)return!0;r=r.return}return!1}(this)),!this._WDYR.isStrictMode||this._WDYR.renderNumber%2!=1){if(this._WDYR.prevProps){var t=B({Component:e,displayName:r,prevProps:this._WDYR.prevProps,prevState:this._WDYR.prevState,nextProps:this.props,nextState:this.state,options:n,ownerDataMap:o});n.notifier(t)}this._WDYR.prevProps=this.props,this._WDYR.prevState=this.state}return super.render?super.render():null}}try{a.displayName=r}catch(e){}return l(a,e),a}function X(e,r,t,n,o,a){var i="string"==typeof e?function(e,r){return function(t){return r.createElement(e,t)}}(e,n):e;function s(){var e=arguments[0],s=n.useRef(),c=s.current;if(s.current=e,c){var f=B({Component:i,displayName:t,prevProps:c,nextProps:e,options:o,ownerDataMap:a}),u=!f.reason.propsDifferences||r&&0===f.reason.propsDifferences.length;u||o.notifier(f)}return i.apply(void 0,arguments)}try{s.displayName=t}catch(e){}return s.ComponentForHooksTracking=i,l(s,i),s}var Z=Symbol("initial-hook-value");function ee(e,t,n,o,a,i,s){var c=t.path,f=c?r(n,c):n;s.current.push({hookName:e,result:f});var u=o.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED&&o.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner.current,p=o.useRef(Z);if(!u)return n;var l=u.type.ComponentForHooksTracking||u.type,d=L(l);if(!K({Component:l,displayName:d,options:a,React:o,isHookChange:!0}))return n;var m=p.current;if(p.current=n,m!==Z){var y=B({Component:l,displayName:d,hookName:e,prevHook:c?r(m,c):m,nextHook:f,options:a,ownerDataMap:i});y.reason.hookDifferences&&a.notifier(y)}return n}function re(e,r,t,n,o,a){return z(r)?function e(r,t,n,o,a){var i=r.type,s=$(i),c=J(i),f=z(i),u=c?i.render:i,p=s?Q(u,t,0,o,a):f?e(u,t,n,o,a):X(u,!0,t,n,o,a);try{p.displayName=L(u)}catch(e){}p.ComponentForHooksTracking=r,l(p,u);var d=n.memo(c?n.forwardRef(p):p,r.compare);try{d.displayName=t}catch(e){}return l(d,r),d}(r,t,n,o,a):J(r)?function(e,r,t,n,o){var a=e.render,i=z(a),s=i?a.type:a,c=X(s,i,r,t,n,o);c.displayName=L(s),c.ComponentForHooksTracking=s,l(c,s);var f=t.forwardRef(i?t.memo(c,a.compare):c);try{f.displayName=r}catch(e){}return l(f,e),f}(r,t,n,o,a):$(r)?Q(r,t,0,o,a):X(r,!1,t,n,o,a)}function te(e,r,t,n,o,a){if(e.has(r))return e.get(r);var i=re(0,r,t,n,o,a);return e.set(r,i),i}var ne={useState:{path:"0"},useReducer:{path:"0"},useContext:!0,useMemo:!0};function oe(e,r){var t=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=console.group,t=console.groupEnd;e.collapseGroups?r=console.groupCollapsed:e.onlyLogs&&(r=console.log,t=I);var n=e.notifier||H("hotReloadBufferMs"in e?e.hotReloadBufferMs:500);return y({include:null,exclude:null,notifier:n,onlyLogs:!1,consoleLog:console.log,consoleGroup:r,consoleGroupEnd:t,logOnDifferentValues:!1,logOwnerReasons:!1,trackHooks:!0,titleColor:"#058",diffNameColor:"blue",diffPathColor:"red",trackExtraHooks:[],trackAllPureComponents:!1},e)}(r),n=e.createElement,o=e.createFactory,a=new WeakMap,i=new WeakMap,s={current:[]},c=null;if(e.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED&&Object.defineProperty(e.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,"current",{get:function(){return c},set:function(e){c=e,s.current=[]}}),e.createElement=function(r){for(var o=null,c=null,f=null,u=arguments.length,p=new Array(u>1?u-1:0),l=1;le.length)&&(r=e.length);for(var t=0,n=new Array(r);t=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,i=!0,s=!1;return{s:function(){t=e[Symbol.iterator]()},n:function(){var e=t.next();return i=e.done,e},e:function(e){s=!0,a=e},f:function(){try{i||null==t.return||t.return()}finally{if(s)throw a}}}}var w,_="different",k="deepEquals",O="date",R="regex",E="reactElement",N="function",S="function"==typeof Symbol&&Symbol.for,x=S?Symbol.for("react.memo"):60115,C=S?Symbol.for("react.forward_ref"):60112,j=(d(w={},_,"different objects."),d(w,k,"different objects that are equal by value."),d(w,O,"different date objects with the same value."),d(w,R,"different regular expressions with the same value."),d(w,E,"different React elements (remember that the syntax always produces a *NEW* immutable React element so a component that receives as props always re-renders.)."),d(w,N,"different functions with the same name."),w),T=!1;function P(e){var r=e.Component,t=e.displayName,n=e.hookName,o=e.prefixMessage,a=e.diffObjType,i=e.differences,s=e.values,c=e.options;i&&i.length>0?(c.consoleLog(d({},t,r),"".concat(o," of ").concat(a," changes:")),i.forEach((function(e){var r=e.pathString,t=e.diffType,o=e.prevValue,i=e.nextValue;c.consoleGroup("%c".concat("hook"===a?"[hook ".concat(n," result]"):"".concat(a,"."),"%c").concat(r,"%c"),"color:".concat(c.diffNameColor,";"),"color:".concat(c.diffPathColor,";"),"color:default;"),c.consoleLog("".concat(j[t]," (more info at ").concat(n?"http://bit.ly/wdyr3":"http://bit.ly/wdyr02",")")),c.consoleLog(d({},"prev ".concat(r),o),"!==",d({},"next ".concat(r),i)),c.consoleGroupEnd()}))):i&&(c.consoleLog(d({},t,r),"".concat(o," the ").concat(a," object itself changed but its values are all equal."),"props"===a?"This could have been avoided by making the component pure, or by preventing its father from re-rendering.":"This usually means this component called setState when no changes in its state actually occurred.","More info at ".concat("http://bit.ly/wdyr02")),c.consoleLog("prev ".concat(a,":"),s.prev," !== ",s.next,":next ".concat(a)))}function Y(e){var r=e.Component,t=e.displayName,n=e.hookName,o=e.prevProps,a=e.prevState,i=e.prevHook,s=e.nextProps,c=e.nextState,f=e.nextHook,u=e.reason,p=e.options,l=e.ownerDataMap;if(function(e,r,t){return!T&&(!!t.logOnDifferentValues||(!(!r.whyDidYouRender||!r.whyDidYouRender.logOnDifferentValues)||!(e.propsDifferences&&e.propsDifferences.some((function(e){return e.diffType===_}))||e.stateDifferences&&e.stateDifferences.some((function(e){return e.diffType===_}))||e.hookDifferences&&e.hookDifferences.some((function(e){return e.diffType===_})))))}(u,r,p)){p.consoleGroup("%c".concat(t),"color: ".concat(p.titleColor,";"));var y="Re-rendered because";if(u.propsDifferences&&(P({Component:r,displayName:t,prefixMessage:y,diffObjType:"props",differences:u.propsDifferences,values:{prev:o,next:s},options:p}),y="And because"),u.stateDifferences&&P({Component:r,displayName:t,prefixMessage:y,diffObjType:"state",differences:u.stateDifferences,values:{prev:a,next:c},options:p}),u.hookDifferences&&P({Component:r,displayName:t,prefixMessage:y,diffObjType:"hook",differences:u.hookDifferences,values:{prev:i,next:f},hookName:n,options:p}),u.propsDifferences&&u.ownerDifferences){var m=l.get(o),h=l.get(s);p.consoleGroup("Rendered by ".concat(h.displayName));var v="Re-rendered because";u.ownerDifferences.propsDifferences&&(P({Component:h.Component,displayName:h.displayName,prefixMessage:v,diffObjType:"props",differences:u.ownerDifferences.propsDifferences,values:{prev:m.props,next:h.props},options:p}),v="And because"),u.ownerDifferences.stateDifferences&&P({Component:h.Component,displayName:h.displayName,prefixMessage:v,diffObjType:"state",differences:u.ownerDifferences.stateDifferences,values:{prev:m.state,next:h.state},options:p}),u.ownerDifferences.hookDifferences&&u.ownerDifferences.hookDifferences.forEach((function(e,r){var t=e.hookName,n=e.differences;return P({Component:h.Component,displayName:h.displayName,prefixMessage:v,diffObjType:"hook",differences:n,values:{prev:m.hooks[r].result,next:h.hooks[r].result},hookName:t,options:p})})),p.consoleGroupEnd()}u.propsDifferences||u.stateDifferences||u.hookDifferences||p.consoleLog(d({},t,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("http://bit.ly/wdyr02")),p.consoleGroupEnd()}}function H(e){return e&&"undefined"!=typeof module&&module.hot&&module.hot.addStatusHandler&&module.hot.addStatusHandler((function(r){"idle"===r&&(T=!0,setTimeout((function(){T=!1}),e))})),Y}var I=function(){};function L(e){return e.displayName||e.name||e.type&&L(e.type)||e.render&&L(e.render)||(t(e)?e:void 0)}var A="undefined"!=typeof Element,M="function"==typeof Symbol&&Symbol.for?Symbol.for("react.element"):60103,W=function(e){return e.$$typeof===M};function F(e,r,t,n,o){return t.push({diffType:o,pathString:n,prevValue:e,nextValue:r}),o!==_}function q(e,r,t){try{var n=[];return function e(r,t,n){var l=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"";if(r===t)return!0;if(!r||!t)return F(r,t,n,l,_);if(p(r)&&p(t)){var d=r.length;if(d!==t.length)return F(v(r),v(t),n,l,_);for(var y=[],h=0,b=d;b--;b>0){var g=e(r[b],t[b],y,"".concat(l,"[").concat(b,"]"));g&&h++}return h===d?F(v(r),v(t),n,l,k):(n.push.apply(n,y),F(v(r),v(t),n,l,_))}if(i(r)&&i(t)){if(r.size!==t.size)return F(new Set(r),new Set(t),n,l,_);var w,S=D(r);try{for(S.s();!(w=S.n()).done;){var x=w.value;if(!t.has(x))return F(new Set(r),new Set(t),n,l,_)}}catch(e){S.e(e)}finally{S.f()}return F(new Set(r),new Set(t),n,l,k)}if(f(r)&&f(t))return r.getTime()===t.getTime()?F(new Date(r),new Date(t),n,l,O):F(new Date(r),new Date(t),n,l,_);if(c(r)&&c(t))return r.toString()===t.toString()?F(r,t,n,l,R):F(r,t,n,l,_);if(A&&r instanceof Element&&t instanceof Element)return F(r,t,n,l,_);if(W(r)&&W(t)){if(r.type!==t.type)return F(r,t,n,l,_);var C=e(r.props,t.props,[],"".concat(l,".props"));return F(r,t,n,l,C?E:_)}if(s(r)&&s(t))return r.name===t.name?F(r,t,n,l,N):F(r,t,n,l,_);if(u(r)&&u(t)){var j=a(r),T=j.length;if(T!==a(t).length)return F(m({},r),m({},t),n,l,_);for(var P=T;P--;P>0)if(!o(t,j[P]))return F(m({},r),m({},t),n,l,_);for(var Y=[],H=0,I=T;I--;I>0){var L=j[I],M=e(r[L],t[L],Y,"".concat(l,".").concat(L));M&&H++}return H===T?F(m({},r),m({},t),n,l,k):(n.push.apply(n,Y),F(m({},r),m({},t),n,l,_))}return F(r,t,n,l,_)}(e,r,n,t),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 U={};function G(e,r){var t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=t.shallow,a=void 0===o||o;if(e===r)return!1;if(!a)return q(e,r);var i=e||U,s=r||U,c=Object.keys(m(m({},i),s));return n(c,(function(e,r){var t=q(i[r],s[r],r);return t&&(e=[].concat(v(e),v(t))),e}),[])}function V(e){var r=e.prevOwnerData,t=e.nextOwnerData;if(!r||!t)return!1;var n=r.hooks.map((function(e,r){return{hookName:e.hookName,differences:G(e.result,t.hooks[r].result,{shallow:!1})}}));return{propsDifferences:G(r.props,t.props),stateDifferences:G(r.state,t.state),hookDifferences:n.length>0&&n}}function B(e,r,t,n,o,a,i){var s=i.get(e),c=i.get(n);return{propsDifferences:G(e,n),stateDifferences:G(r,o),hookDifferences:G(t,a,{shallow:!1}),ownerDifferences:V({prevOwnerData:s,nextOwnerData:c})}}function $(e){var r=e.Component,t=e.displayName,n=e.hookName,o=e.prevProps,a=e.prevState,i=e.prevHook,s=e.nextProps,c=e.nextState,f=e.nextHook,u=e.options,p=e.ownerDataMap;return{Component:r,displayName:t,hookName:n,prevProps:o,prevState:a,prevHook:i,nextProps:s,nextState:c,nextHook:f,options:u,ownerDataMap:p,reason:B(o,a,i,s,c,f,p)}}function z(e){return e.prototype&&!!e.prototype.isReactComponent}function J(e){return e.$$typeof===x}function K(e){return e.$$typeof===C}function Q(e){var r=e.Component,t=e.displayName,n=e.options,o=e.React,a=e.isHookChange;return!function(e,r){return r.exclude&&r.exclude.length>0&&r.exclude.some((function(r){return r.test(e)}))}(t,n)&&(!1!==r.whyDidYouRender&&((!a||!r.whyDidYouRender||!1!==r.whyDidYouRender.trackHooks)&&!!(r.whyDidYouRender||n.trackAllPureComponents&&(r&&r.prototype instanceof o.PureComponent||J(r))||function(e,r){return r.include&&r.include.length>0&&r.include.some((function(r){return r.test(e)}))}(t,n))))}function X(e,r,t,n,o){class a extends e{constructor(r,t){var n;super(r,t),n=this,this._WDYR={renderNumber:0};var o=super.render||this.render;o!==e.prototype.render&&(this.render=function(){return a.prototype.render.apply(n),o()})}render(){if(this._WDYR.renderNumber++,"isStrictMode"in this._WDYR||(this._WDYR.isStrictMode=function(e){for(var r=e&&e._reactInternalFiber;r;){if(1&r.mode)return!0;r=r.return}return!1}(this)),!this._WDYR.isStrictMode||this._WDYR.renderNumber%2!=1){if(this._WDYR.prevProps){var t=$({Component:e,displayName:r,prevProps:this._WDYR.prevProps,prevState:this._WDYR.prevState,nextProps:this.props,nextState:this.state,options:n,ownerDataMap:o});n.notifier(t)}this._WDYR.prevProps=this.props,this._WDYR.prevState=this.state}return super.render?super.render():null}}try{a.displayName=r}catch(e){}return l(a,e),a}function Z(e,r,t,n,o,a){var i="string"==typeof e?function(e,r){return function(t){return r.createElement(e,t)}}(e,n):e;function s(){var e=arguments[0],s=n.useRef(),c=s.current;if(s.current=e,c){var f=$({Component:i,displayName:t,prevProps:c,nextProps:e,options:o,ownerDataMap:a}),u=!f.reason.propsDifferences||r&&0===f.reason.propsDifferences.length;u||o.notifier(f)}return i.apply(void 0,arguments)}try{s.displayName=t}catch(e){}return s.ComponentForHooksTracking=i,l(s,i),s}var ee=Symbol("initial-hook-value");function re(e,t,n,o,a,i,s){var c=t.path,f=c?r(n,c):n;s.current.push({hookName:e,result:f});var u=o.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED&&o.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner.current,p=o.useRef(ee);if(!u)return n;var l=u.type.ComponentForHooksTracking||u.type,d=L(l);if(!Q({Component:l,displayName:d,options:a,React:o,isHookChange:!0}))return n;var y=p.current;if(p.current=n,y!==ee){var m=$({Component:l,displayName:d,hookName:e,prevHook:c?r(y,c):y,nextHook:f,options:a,ownerDataMap:i});m.reason.hookDifferences&&a.notifier(m)}return n}function te(e,r,t,n,o,a){return J(r)?function e(r,t,n,o,a){var i=r.type,s=z(i),c=K(i),f=J(i),u=c?i.render:i,p=s?X(u,t,0,o,a):f?e(u,t,n,o,a):Z(u,!0,t,n,o,a);try{p.displayName=L(u)}catch(e){}p.ComponentForHooksTracking=r,l(p,u);var d=n.memo(c?n.forwardRef(p):p,r.compare);try{d.displayName=t}catch(e){}return l(d,r),d}(r,t,n,o,a):K(r)?function(e,r,t,n,o){var a=e.render,i=J(a),s=i?a.type:a,c=Z(s,i,r,t,n,o);c.displayName=L(s),c.ComponentForHooksTracking=s,l(c,s);var f=t.forwardRef(i?t.memo(c,a.compare):c);try{f.displayName=r}catch(e){}return l(f,e),f}(r,t,n,o,a):z(r)?X(r,t,0,o,a):Z(r,!1,t,n,o,a)}function ne(e,r,t,n,o,a){if(e.has(r))return e.get(r);var i=te(0,r,t,n,o,a);return e.set(r,i),i}function oe(e){return!!e&&("function"==typeof e||(J(e)?oe(e.type):K(e)?oe(e.render):void 0))}var ae={useState:{path:"0"},useReducer:{path:"0"},useContext:!0,useMemo:!0};function ie(e,r){var t=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=console.group,t=console.groupEnd;e.collapseGroups?r=console.groupCollapsed:e.onlyLogs&&(r=console.log,t=I);var n=e.notifier||H("hotReloadBufferMs"in e?e.hotReloadBufferMs:500);return m({include:null,exclude:null,notifier:n,onlyLogs:!1,consoleLog:console.log,consoleGroup:r,consoleGroupEnd:t,logOnDifferentValues:!1,logOwnerReasons:!1,trackHooks:!0,titleColor:"#058",diffNameColor:"blue",diffPathColor:"red",trackExtraHooks:[],trackAllPureComponents:!1},e)}(r),n=e.createElement,o=e.createFactory,a=new WeakMap,i=new WeakMap,s={current:[]},c=null;if(e.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED&&Object.defineProperty(e.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,"current",{get:function(){return c},set:function(e){c=e,s.current=[]}}),e.createElement=function(r){for(var o=null,c=null,f=null,u=arguments.length,p=new Array(u>1?u-1:0),l=1;l syntax always produces a *NEW* immutable React element so a component that receives as props always re-renders.).',\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} result]` : `${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 its values are all equal.`,\r\n diffObjType === 'props' ?\r\n 'This could have been avoided by making the component pure, or by preventing its father from re-rendering.' :\r\n 'This usually means this component called setState when no changes in its 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, ownerDataMap} = 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\r\n if(reason.propsDifferences && reason.ownerDifferences){\r\n const prevOwnerData = ownerDataMap.get(prevProps)\r\n const nextOwnerData = ownerDataMap.get(nextProps)\r\n\r\n options.consoleGroup(`Rendered by ${nextOwnerData.displayName}`)\r\n let prefixMessage = 'Re-rendered because'\r\n\r\n if(reason.ownerDifferences.propsDifferences){\r\n logDifference({\r\n Component: nextOwnerData.Component,\r\n displayName: nextOwnerData.displayName,\r\n prefixMessage,\r\n diffObjType: 'props',\r\n differences: reason.ownerDifferences.propsDifferences,\r\n values: {prev: prevOwnerData.props, next: nextOwnerData.props},\r\n options\r\n })\r\n prefixMessage = 'And because'\r\n }\r\n\r\n if(reason.ownerDifferences.stateDifferences){\r\n logDifference({\r\n Component: nextOwnerData.Component,\r\n displayName: nextOwnerData.displayName,\r\n prefixMessage,\r\n diffObjType: 'state',\r\n differences: reason.ownerDifferences.stateDifferences,\r\n values: {prev: prevOwnerData.state, next: nextOwnerData.state},\r\n options\r\n })\r\n }\r\n\r\n if(reason.ownerDifferences.hookDifferences){\r\n reason.ownerDifferences.hookDifferences.forEach(({hookName, differences}, i) =>\r\n logDifference({\r\n Component: nextOwnerData.Component,\r\n displayName: nextOwnerData.displayName,\r\n prefixMessage,\r\n diffObjType: 'hook',\r\n differences,\r\n values: {prev: prevOwnerData.hooks[i].result, next: nextOwnerData.hooks[i].result},\r\n hookName,\r\n options\r\n })\r\n )\r\n }\r\n options.consoleGroupEnd()\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(typeof(module) !== 'undefined' && 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 ('hotReloadBufferMs' in userOptions) ? 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 logOwnerReasons: false,\r\n trackHooks: true,\r\n titleColor: '#058',\r\n diffNameColor: 'blue',\r\n diffPathColor: 'red',\r\n trackExtraHooks: [],\r\n trackAllPureComponents: false,\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 (type.render && getDisplayName(type.render)) ||\r\n (isString(type) ? type : undefined)\r\n )\r\n}\r\n","import {isArray, isPlainObject, isDate, isRegExp, isFunction, isSet, 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 arrayLength = a.length\r\n if(arrayLength !== b.length){\r\n return trackDiff([...a], [...b], diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n const arrayItemDiffs = []\r\n let numberOfDeepEqualsItems = 0\r\n for(let i = arrayLength; i--; i > 0){\r\n const diffEquals = accumulateDeepEqualDiffs(a[i], b[i], arrayItemDiffs, `${pathString}[${i}]`)\r\n if(diffEquals){\r\n numberOfDeepEqualsItems++\r\n }\r\n }\r\n\r\n if(numberOfDeepEqualsItems === arrayLength){\r\n return trackDiff([...a], [...b], diffsAccumulator, pathString, diffTypes.deepEquals)\r\n }\r\n\r\n diffsAccumulator.push(...arrayItemDiffs)\r\n\r\n return trackDiff([...a], [...b], diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isSet(a) && isSet(b)){\r\n if(a.size !== b.size){\r\n return trackDiff(new Set(a), new Set(b), diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n for(const valA of a){\r\n if(!b.has(valA)){\r\n return trackDiff(new Set(a), new Set(b), diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n }\r\n\r\n return trackDiff(new Set(a), new Set(b), diffsAccumulator, pathString, diffTypes.deepEquals)\r\n }\r\n\r\n if(isDate(a) && isDate(b)){\r\n return a.getTime() === b.getTime() ?\r\n trackDiff(new Date(a), new Date(b), diffsAccumulator, pathString, diffTypes.date) :\r\n trackDiff(new Date(a), new Date(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 if(a.type !== b.type){\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n const reactElementPropsAreDeepEqual =\r\n accumulateDeepEqualDiffs(a.props, b.props, [], `${pathString}.props`)\r\n\r\n return reactElementPropsAreDeepEqual ?\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 keysLength = keys.length\r\n if(keysLength !== getKeys(b).length){\r\n return trackDiff({...a}, {...b}, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n for(let i = keysLength; i--; 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 const objectValuesDiffs = []\r\n let numberOfDeepEqualsObjectValues = 0\r\n for(let i = keysLength; i--; i > 0){\r\n const key = keys[i]\r\n const deepEquals = accumulateDeepEqualDiffs(a[key], b[key], objectValuesDiffs, `${pathString}.${key}`)\r\n if(deepEquals){\r\n numberOfDeepEqualsObjectValues++\r\n }\r\n }\r\n\r\n if(numberOfDeepEqualsObjectValues === keysLength){\r\n return trackDiff({...a}, {...b}, diffsAccumulator, pathString, diffTypes.deepEquals)\r\n }\r\n\r\n diffsAccumulator.push(...objectValuesDiffs)\r\n\r\n return 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, ownerDataMap){\r\n const prevOwnerData = ownerDataMap.get(prevProps)\r\n const nextOwnerData = ownerDataMap.get(nextProps)\r\n\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 ownerDifferences: prevOwnerData != null && nextOwnerData != null ? {\r\n propsDifferences: findObjectsDifferences(prevOwnerData.props, nextOwnerData.props),\r\n stateDifferences: findObjectsDifferences(prevOwnerData.state, nextOwnerData.state),\r\n hookDifferences: prevOwnerData.hooks.map(({hookName, result}, i) => ({\r\n hookName,\r\n differences: findObjectsDifferences(result, nextOwnerData.hooks[i].result, {shallow: false})\r\n }))\r\n } : false\r\n }\r\n}\r\n\r\nexport default function getUpdateInfo({Component, displayName, hookName, prevProps, prevState, prevHook, nextProps, nextState, nextHook, options, ownerDataMap}){\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 ownerDataMap,\r\n reason: getUpdateReason(prevProps, prevState, prevHook, nextProps, nextState, nextHook, ownerDataMap)\r\n }\r\n}\r\n","// copied from https://github.com/facebook/react/blob/master/packages/react-reconciler/src/ReactTypeOfMode.js\r\nimport {REACT_FORWARD_REF_TYPE, REACT_MEMO_TYPE} from './consts'\r\n\r\nconst StrictMode = 0b0001\r\n\r\n// based on \"findStrictRoot\" from https://github.com/facebook/react/blob/master/packages/react-reconciler/src/ReactStrictModeWarnings.js\r\n// notice: this is only used for class components. functional components doesn't re-rendered inside strict mode\r\nexport function checkIfInsideAStrictModeTree(reactComponentInstance){\r\n let reactInternalFiber = reactComponentInstance && reactComponentInstance._reactInternalFiber\r\n while(reactInternalFiber){\r\n if(reactInternalFiber.mode & StrictMode){\r\n return true\r\n }\r\n reactInternalFiber = reactInternalFiber.return\r\n }\r\n return false\r\n}\r\n\r\nexport function isReactClassComponent(Component){\r\n return Component.prototype && !!Component.prototype.isReactComponent\r\n}\r\n\r\nexport function isMemoComponent(Component){\r\n return Component.$$typeof === REACT_MEMO_TYPE\r\n}\r\n\r\nexport function isForwardRefComponent(Component){\r\n return Component.$$typeof === REACT_FORWARD_REF_TYPE\r\n}\r\n","import {isMemoComponent} from './utils'\r\n\r\nfunction 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, React, isHookChange}){\r\n if(shouldExclude(displayName, options)){\r\n return false\r\n }\r\n\r\n if(Component.whyDidYouRender === false){\r\n return false\r\n }\r\n\r\n if(isHookChange && (\r\n Component.whyDidYouRender && Component.whyDidYouRender.trackHooks === false\r\n )){\r\n return false\r\n }\r\n\r\n return !!(\r\n Component.whyDidYouRender || (\r\n options.trackAllPureComponents && (\r\n (Component && Component.prototype instanceof React.PureComponent) ||\r\n isMemoComponent(Component)\r\n )\r\n ) ||\r\n shouldInclude(displayName, options)\r\n )\r\n}\r\n","import {defaults} from 'lodash'\r\n\r\nimport {checkIfInsideAStrictModeTree} from '../utils'\r\nimport getUpdateInfo from '../getUpdateInfo'\r\n\r\nexport default function patchClassComponent(ClassComponent, displayName, React, options, ownerDataMap){\r\n class WDYRPatchedClassComponent extends ClassComponent{\r\n constructor(props, context){\r\n super(props, context)\r\n\r\n this._WDYR = {\r\n renderNumber: 0\r\n }\r\n\r\n const origRender = super.render || this.render\r\n // this probably means render is an arrow function or this.render.bind(this) was called on the original class\r\n const renderIsABindedFunction = origRender !== ClassComponent.prototype.render\r\n if(renderIsABindedFunction){\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 this._WDYR.renderNumber++\r\n\r\n if(!('isStrictMode' in this._WDYR)){\r\n this._WDYR.isStrictMode = checkIfInsideAStrictModeTree(this)\r\n }\r\n\r\n // in strict mode- ignore every other render\r\n if(!(this._WDYR.isStrictMode && this._WDYR.renderNumber % 2 === 1)){\r\n if(this._WDYR.prevProps){\r\n const updateInfo = getUpdateInfo({\r\n Component: ClassComponent,\r\n displayName,\r\n prevProps: this._WDYR.prevProps,\r\n prevState: this._WDYR.prevState,\r\n nextProps: this.props,\r\n nextState: this.state,\r\n options,\r\n ownerDataMap\r\n })\r\n\r\n options.notifier(updateInfo)\r\n }\r\n\r\n this._WDYR.prevProps = this.props\r\n this._WDYR.prevState = this.state\r\n }\r\n\r\n return super.render ? super.render() : null\r\n }\r\n }\r\n\r\n try{\r\n WDYRPatchedClassComponent.displayName = displayName\r\n }catch(e){\r\n // not crucial if displayName couldn't be set\r\n }\r\n\r\n defaults(WDYRPatchedClassComponent, ClassComponent)\r\n\r\n return WDYRPatchedClassComponent\r\n}\r\n","import {defaults} from 'lodash'\r\n\r\nimport getUpdateInfo from '../getUpdateInfo'\r\n\r\nconst getFunctionalComponentFromStringComponent = (componentTypeStr, React) => props => (\r\n React.createElement(componentTypeStr, props)\r\n)\r\n\r\nexport default function patchFunctionalOrStrComponent(FunctionalOrStringComponent, isPure, displayName, React, options, ownerDataMap){\r\n const FunctionalComponent = typeof(FunctionalOrStringComponent) === 'string' ?\r\n getFunctionalComponentFromStringComponent(FunctionalOrStringComponent, React) :\r\n FunctionalOrStringComponent\r\n\r\n function WDYRFunctionalComponent(){\r\n const nextProps = arguments[0]\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 updateInfo = getUpdateInfo({\r\n Component: FunctionalComponent,\r\n displayName,\r\n prevProps,\r\n nextProps,\r\n options,\r\n ownerDataMap\r\n })\r\n\r\n const notifiedByHooks = (\r\n !updateInfo.reason.propsDifferences || (\r\n (isPure && updateInfo.reason.propsDifferences.length === 0)\r\n )\r\n )\r\n\r\n if(!notifiedByHooks){\r\n options.notifier(updateInfo)\r\n }\r\n }\r\n\r\n return FunctionalComponent(...arguments)\r\n }\r\n\r\n try{\r\n WDYRFunctionalComponent.displayName = displayName\r\n }catch(e){\r\n // not crucial if displayName couldn't be set\r\n }\r\n\r\n WDYRFunctionalComponent.ComponentForHooksTracking = FunctionalComponent\r\n defaults(WDYRFunctionalComponent, FunctionalComponent)\r\n\r\n return WDYRFunctionalComponent\r\n}\r\n","import {get} 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\nimport patchClassComponent from './patches/patchClassComponent'\r\nimport patchFunctionalOrStrComponent from './patches/patchFunctionalOrStrComponent'\r\nimport patchMemoComponent from './patches/patchMemoComponent'\r\nimport patchForwardRefComponent from './patches/patchForwardRefComponent'\r\n\r\nimport {isForwardRefComponent, isMemoComponent, isReactClassComponent} from './utils'\r\n\r\nconst initialHookValue = Symbol('initial-hook-value')\r\nfunction trackHookChanges(hookName, {path: hookPath}, hookResult, React, options, ownerDataMap, hooksRef){\r\n const nextHook = hookPath ? get(hookResult, hookPath) : hookResult\r\n hooksRef.current.push({hookName, result: nextHook})\r\n const ComponentHookDispatchedFromInstance = (\r\n React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED &&\r\n React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner.current\r\n )\r\n\r\n const prevHookResultRef = React.useRef(initialHookValue)\r\n\r\n if(!ComponentHookDispatchedFromInstance){\r\n return hookResult\r\n }\r\n\r\n const Component = ComponentHookDispatchedFromInstance.type.ComponentForHooksTracking || ComponentHookDispatchedFromInstance.type\r\n const displayName = getDisplayName(Component)\r\n\r\n const isShouldTrack = shouldTrack({Component, displayName, options, React, isHookChange: true})\r\n if(!isShouldTrack){\r\n return hookResult\r\n }\r\n\r\n const prevHookResult = prevHookResultRef.current\r\n prevHookResultRef.current = hookResult\r\n\r\n if(prevHookResult !== initialHookValue){\r\n const notification = getUpdateInfo({\r\n Component: Component,\r\n displayName,\r\n hookName,\r\n prevHook: hookPath ? get(prevHookResult, hookPath) : prevHookResult,\r\n nextHook,\r\n options,\r\n ownerDataMap\r\n })\r\n\r\n if(notification.reason.hookDifferences){\r\n options.notifier(notification)\r\n }\r\n }\r\n\r\n return hookResult\r\n}\r\n\r\nfunction createPatchedComponent(componentsMap, Component, displayName, React, options, ownerDataMap){\r\n if(isMemoComponent(Component)){\r\n return patchMemoComponent(Component, displayName, React, options, ownerDataMap)\r\n }\r\n\r\n if(isForwardRefComponent(Component)){\r\n return patchForwardRefComponent(Component, displayName, React, options, ownerDataMap)\r\n }\r\n\r\n if(isReactClassComponent(Component)){\r\n return patchClassComponent(Component, displayName, React, options, ownerDataMap)\r\n }\r\n\r\n return patchFunctionalOrStrComponent(Component, false, displayName, React, options, ownerDataMap)\r\n}\r\n\r\nfunction getPatchedComponent(componentsMap, Component, displayName, React, options, ownerDataMap){\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, ownerDataMap)\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 const ownerDataMap = new WeakMap()\r\n const hooksRef = {current: []}\r\n\r\n // Intercept assignments to ReactCurrentOwner.current and reset hooksRef\r\n let currentOwner = null\r\n if(React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED){\r\n Object.defineProperty(React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner, 'current', {\r\n get(){\r\n return currentOwner\r\n },\r\n set(value){\r\n currentOwner = value\r\n hooksRef.current = []\r\n }\r\n })\r\n }\r\n\r\n React.createElement = function(componentNameOrComponent, ...rest){\r\n let isShouldTrack = null\r\n let displayName = null\r\n let WDYRPatchedComponent = null\r\n\r\n try{\r\n isShouldTrack = (\r\n (\r\n typeof componentNameOrComponent === 'function' ||\r\n isMemoComponent(componentNameOrComponent) ||\r\n isForwardRefComponent(componentNameOrComponent)\r\n ) &&\r\n shouldTrack({Component: componentNameOrComponent, displayName: getDisplayName(componentNameOrComponent), React, options})\r\n )\r\n\r\n if(isShouldTrack){\r\n displayName = (\r\n componentNameOrComponent &&\r\n componentNameOrComponent.whyDidYouRender &&\r\n componentNameOrComponent.whyDidYouRender.customName ||\r\n getDisplayName(componentNameOrComponent)\r\n )\r\n\r\n WDYRPatchedComponent = getPatchedComponent(componentsMap, componentNameOrComponent, displayName, React, options, ownerDataMap)\r\n\r\n const element = origCreateElement.apply(React, [WDYRPatchedComponent, ...rest])\r\n if(options.logOwnerReasons){\r\n const OwnerInstance = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner.current\r\n if(OwnerInstance != null){\r\n const Component = OwnerInstance.type.ComponentForHooksTracking || OwnerInstance.type\r\n const displayName = getDisplayName(Component)\r\n ownerDataMap.set(element.props, {\r\n Component,\r\n displayName,\r\n props: OwnerInstance.pendingProps,\r\n state: OwnerInstance.stateNode != null ? OwnerInstance.stateNode.state : null,\r\n hooks: hooksRef.current\r\n })\r\n }\r\n }\r\n\r\n return element\r\n }\r\n }\r\n catch(e){\r\n options.consoleLog('whyDidYouRender error. Please file a bug at https://github.com/welldone-software/why-did-you-render/issues.', {\r\n errorInfo: {\r\n error: e,\r\n componentNameOrComponent,\r\n rest,\r\n options,\r\n isShouldTrack,\r\n displayName,\r\n WDYRPatchedComponent\r\n }\r\n })\r\n }\r\n\r\n return origCreateElement.apply(React, [componentNameOrComponent, ...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 if(options.trackHooks){\r\n const nativeHooks = Object.entries(hooksConfig).map(([hookName, hookTrackingConfig]) => {\r\n return [React, hookName, hookTrackingConfig]\r\n })\r\n\r\n const hooksToTrack = [\r\n ...nativeHooks,\r\n ...options.trackExtraHooks\r\n ]\r\n\r\n hooksToTrack.forEach(([hookParent, hookName, hookTrackingConfig = {}]) => {\r\n const originalHook = hookParent[hookName]\r\n const newHookName = hookName[0].toUpperCase() + hookName.slice(1)\r\n const newHook = function(...args){\r\n const hookResult = originalHook.call(this, ...args)\r\n trackHookChanges(hookName, hookTrackingConfig, hookResult, React, options, ownerDataMap, hooksRef)\r\n return hookResult\r\n }\r\n Object.defineProperty(newHook, 'name', {value: newHookName, writable: false})\r\n Object.assign(newHook, {originalHook})\r\n hookParent[hookName] = newHook\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\r\n componentsMap = null\r\n\r\n const hooksToRevert = [\r\n ...Object.keys(hooksConfig).map(hookName => [React, hookName]),\r\n ...options.trackExtraHooks\r\n ]\r\n hooksToRevert.forEach(([hookParent, hookName]) => {\r\n if(hookParent[hookName].originalHook){\r\n hookParent[hookName] = hookParent[hookName].originalHook\r\n }\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","import {defaults} from 'lodash'\r\n\r\nimport getDisplayName from '../getDisplayName'\r\n\r\nimport {isForwardRefComponent, isMemoComponent, isReactClassComponent} from '../utils'\r\nimport patchClassComponent from './patchClassComponent'\r\nimport patchFunctionalOrStrComponent from './patchFunctionalOrStrComponent'\r\n\r\nexport default function patchMemoComponent(MemoComponent, displayName, React, options, ownerDataMap){\r\n const {type: InnerMemoComponent} = MemoComponent\r\n\r\n const isInnerMemoComponentAClassComponent = isReactClassComponent(InnerMemoComponent)\r\n const isInnerMemoComponentForwardRefs = isForwardRefComponent(InnerMemoComponent)\r\n const isInnerMemoComponentAnotherMemoComponent = isMemoComponent(InnerMemoComponent)\r\n\r\n const WrappedFunctionalComponent = isInnerMemoComponentForwardRefs ?\r\n InnerMemoComponent.render :\r\n InnerMemoComponent\r\n\r\n const PatchedInnerComponent = isInnerMemoComponentAClassComponent ?\r\n patchClassComponent(WrappedFunctionalComponent, displayName, React, options, ownerDataMap) :\r\n (isInnerMemoComponentAnotherMemoComponent ?\r\n patchMemoComponent(WrappedFunctionalComponent, displayName, React, options, ownerDataMap) :\r\n patchFunctionalOrStrComponent(WrappedFunctionalComponent, true, displayName, React, options, ownerDataMap)\r\n )\r\n\r\n try{\r\n PatchedInnerComponent.displayName = getDisplayName(WrappedFunctionalComponent)\r\n }catch(e){\r\n // not crucial if displayName couldn't be set\r\n }\r\n\r\n PatchedInnerComponent.ComponentForHooksTracking = MemoComponent\r\n defaults(PatchedInnerComponent, WrappedFunctionalComponent)\r\n\r\n const WDYRMemoizedFunctionalComponent = React.memo(\r\n isInnerMemoComponentForwardRefs ? React.forwardRef(PatchedInnerComponent) : PatchedInnerComponent,\r\n MemoComponent.compare\r\n )\r\n\r\n try{\r\n WDYRMemoizedFunctionalComponent.displayName = displayName\r\n }catch(e){\r\n // not crucial if displayName couldn't be set\r\n }\r\n\r\n defaults(WDYRMemoizedFunctionalComponent, MemoComponent)\r\n\r\n return WDYRMemoizedFunctionalComponent\r\n}\r\n","import {defaults} from 'lodash'\r\n\r\nimport getDisplayName from '../getDisplayName'\r\nimport {isMemoComponent} from '../utils'\r\nimport patchFunctionalOrStrComponent from './patchFunctionalOrStrComponent'\r\n\r\nexport default function patchForwardRefComponent(ForwardRefComponent, displayName, React, options, ownerDataMap){\r\n const {render: InnerForwardRefComponent} = ForwardRefComponent\r\n\r\n const isInnerComponentMemoized = isMemoComponent(InnerForwardRefComponent)\r\n const WrappedFunctionalComponent = isInnerComponentMemoized ?\r\n InnerForwardRefComponent.type : InnerForwardRefComponent\r\n\r\n const WDYRWrappedByReactForwardRefFunctionalComponent = (\r\n patchFunctionalOrStrComponent(WrappedFunctionalComponent, isInnerComponentMemoized, displayName, React, options, ownerDataMap)\r\n )\r\n\r\n WDYRWrappedByReactForwardRefFunctionalComponent.displayName = getDisplayName(WrappedFunctionalComponent)\r\n WDYRWrappedByReactForwardRefFunctionalComponent.ComponentForHooksTracking = WrappedFunctionalComponent\r\n defaults(WDYRWrappedByReactForwardRefFunctionalComponent, WrappedFunctionalComponent)\r\n\r\n const WDYRForwardRefFunctionalComponent = React.forwardRef(\r\n isInnerComponentMemoized ?\r\n React.memo(WDYRWrappedByReactForwardRefFunctionalComponent, InnerForwardRefComponent.compare) :\r\n WDYRWrappedByReactForwardRefFunctionalComponent\r\n )\r\n\r\n try{\r\n WDYRForwardRefFunctionalComponent.displayName = displayName\r\n }catch(e){\r\n // not crucial if displayName couldn't be set\r\n }\r\n\r\n defaults(WDYRForwardRefFunctionalComponent, ForwardRefComponent)\r\n\r\n return WDYRForwardRefFunctionalComponent\r\n}\r\n","import whyDidYouRender from './whyDidYouRender'\r\nimport defaultNotifier from './defaultNotifier'\r\n\r\nwhyDidYouRender.defaultNotifier = defaultNotifier\r\nexport default whyDidYouRender\r\n"],"names":["diffTypes","hasSymbol","Symbol","REACT_MEMO_TYPE","REACT_FORWARD_REF_TYPE","diffTypesDescriptions","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","ownerDataMap","logOnDifferentValues","whyDidYouRender","propsDifferences","some","diff","stateDifferences","hookDifferences","shouldLog","titleColor","ownerDifferences","prevOwnerData","get","nextOwnerData","props","state","i","hooks","result","createDefaultNotifier","hotReloadBufferMs","module","hot","addStatusHandler","status","setTimeout","emptyFn","getDisplayName","type","name","render","_isString","undefined","hasElementType","Element","REACT_ELEMENT_TYPE","isReactElement","object","$$typeof","trackDiff","a","b","diffsAccumulator","push","calculateDeepEqualDiffs","initialPathString","diffs","accumulateDeepEqualDiffs","_isArray","arrayLength","arrayItemDiffs","numberOfDeepEqualsItems","diffEquals","_isSet","size","Set","valA","has","_isDate","getTime","Date","_isRegExp","toString","reactElementPropsAreDeepEqual","_isFunction","_isPlainObject","keys","_keys","keysLength","_has","objectValuesDiffs","numberOfDeepEqualsObjectValues","key","deepEquals","error","message","match","number","console","warn","emptyObject","findObjectsDifferences","userPrevObj","userNextObj","shallow","prevObj","nextObj","keysOfBothObjects","Object","_reduce","deepEqualDiffs","getUpdateReason","map","getUpdateInfo","isReactClassComponent","prototype","isReactComponent","isMemoComponent","isForwardRefComponent","shouldTrack","React","isHookChange","exclude","regex","test","shouldExclude","trackHooks","trackAllPureComponents","PureComponent","include","shouldInclude","patchClassComponent","ClassComponent","WDYRPatchedClassComponent","constructor","context","_WDYR","renderNumber","origRender","super","this","apply","_this","isStrictMode","reactComponentInstance","reactInternalFiber","_reactInternalFiber","mode","checkIfInsideAStrictModeTree","notifier","e","patchFunctionalOrStrComponent","FunctionalOrStringComponent","isPure","FunctionalComponent","componentTypeStr","createElement","getFunctionalComponentFromStringComponent","WDYRFunctionalComponent","arguments","ref","useRef","current","notifiedByHooks","ComponentForHooksTracking","initialHookValue","trackHookChanges","hookResult","hooksRef","hookPath","path","_get","ComponentHookDispatchedFromInstance","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","ReactCurrentOwner","prevHookResultRef","prevHookResult","notification","createPatchedComponent","componentsMap","patchMemoComponent","MemoComponent","InnerMemoComponent","isInnerMemoComponentAClassComponent","isInnerMemoComponentForwardRefs","isInnerMemoComponentAnotherMemoComponent","WrappedFunctionalComponent","PatchedInnerComponent","WDYRMemoizedFunctionalComponent","memo","forwardRef","compare","ForwardRefComponent","InnerForwardRefComponent","isInnerComponentMemoized","WDYRWrappedByReactForwardRefFunctionalComponent","WDYRForwardRefFunctionalComponent","patchForwardRefComponent","getPatchedComponent","WDYRPatchedComponent","set","hooksConfig","useState","useReducer","useContext","useMemo","userOptions","group","groupEnd","collapseGroups","groupCollapsed","onlyLogs","log","logOwnerReasons","trackExtraHooks","normalizeOptions","origCreateElement","origCreateFactory","createFactory","WeakMap","currentOwner","defineProperty","value","componentNameOrComponent","isShouldTrack","rest","customName","element","OwnerInstance","pendingProps","stateNode","errorInfo","assign","factory","bind","nativeHooks","entries","hookTrackingConfig","hookParent","originalHook","newHookName","toUpperCase","slice","newHook","args","call","writable","__REVERT_WHY_DID_YOU_RENDER__"],"mappings":";;;;;;;m+FAAO,MAAMA,EACE,YADFA,EAEG,aAFHA,EAGH,OAHGA,EAIF,QAJEA,EAKK,eALLA,EAMC,WAIRC,EAA8B,mBAAXC,QAAyBA,WACrCC,EAAkBF,EAAYC,WAAW,cAAgB,MACzDE,EAAyBH,EAAYC,WAAW,qBAAuB,MCP9EG,UACHL,EAAsB,0BACtBA,EAAuB,kDACvBA,EAAiB,mDACjBA,EAAkB,0DAClBA,EAAyB,mLACzBA,EAAqB,8CAGpBM,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,SAAQ,gBAAEC,IAAAA,WAAYC,IAAAA,SAAUC,IAAAA,UAAWC,IAAAA,UACrDP,EAAQQ,yBACe,SAAhBX,kBAAkCF,wBAAwBE,oBAAmBO,wBACzEJ,EAAQS,mCAA2BT,EAAQU,mBAAkB,kBAExEV,EAAQE,qBACHZ,EAAsBe,6BAA2BV,EAjDnC,sBADL,6BAoDdK,EAAQE,+BAAqBE,GAAeE,GAAY,0BAAiBF,GAAeG,IACxFP,EAAQW,sBAGJb,IACNE,EAAQE,gBACJR,EAAcD,aACbG,kBAAqBC,0DACR,UAAhBA,EACE,4GACA,2HA9DY,yBAiEhBG,EAAQE,0BAAmBL,OAAgBE,EAAOa,KAAM,QAASb,EAAOc,qBAAehB,KAI5E,SAASiB,EAAgBC,OAC/BtB,EAAmIsB,EAAnItB,UAAWC,EAAwHqB,EAAxHrB,YAAaC,EAA2GoB,EAA3GpB,SAAUqB,EAAiGD,EAAjGC,UAAWC,EAAsFF,EAAtFE,UAAWC,EAA2EH,EAA3EG,SAAUC,EAAiEJ,EAAjEI,UAAWC,EAAsDL,EAAtDK,UAAWC,EAA2CN,EAA3CM,SAAUC,EAAiCP,EAAjCO,OAAQtB,EAAyBe,EAAzBf,QAASuB,EAAgBR,EAAhBQ,gBAxD5H,SAAmBD,EAAQ7B,EAAWO,UACjCT,MAIAS,EAAQwB,0BAIR/B,EAAUgC,kBAAmBhC,EAAUgC,gBAAgBD,yBAKxDF,EAAOI,kBACPJ,EAAOI,iBAAiBC,MAAK,SAAAC,UAAQA,EAAKvB,WAAapB,MAEvDqC,EAAOO,kBACPP,EAAOO,iBAAiBF,MAAK,SAAAC,UAAQA,EAAKvB,WAAapB,MAEvDqC,EAAOQ,iBACPR,EAAOQ,gBAAgBH,MAAK,SAAAC,UAAQA,EAAKvB,WAAapB,QAqCpD8C,CAAUT,EAAQ7B,EAAWO,IAIjCA,EAAQQ,yBAAkBd,oBAAyBM,EAAQgC,qBAEvDpC,EAAgB,yBAEjB0B,EAAOI,mBACRlC,EAAc,CACZC,UAAAA,EACAC,YAAAA,EACAE,cAAAA,EACAC,YAAa,QACbC,YAAawB,EAAOI,iBACpB3B,OAAQ,CAACa,KAAMI,EAAWH,KAAMM,GAChCnB,QAAAA,IAEFJ,EAAgB,eAGf0B,EAAOO,kBACRrC,EAAc,CACZC,UAAAA,EACAC,YAAAA,EACAE,cAAAA,EACAC,YAAa,QACbC,YAAawB,EAAOO,iBACpB9B,OAAQ,CAACa,KAAMK,EAAWJ,KAAMO,GAChCpB,QAAAA,IAIDsB,EAAOQ,iBACRtC,EAAc,CACZC,UAAAA,EACAC,YAAAA,EACAE,cAAAA,EACAC,YAAa,OACbC,YAAawB,EAAOQ,gBACpB/B,OAAQ,CAACa,KAAMM,EAAUL,KAAMQ,GAC/B1B,SAAAA,EACAK,QAAAA,IAKDsB,EAAOI,kBAAoBJ,EAAOW,iBAAiB,KAC9CC,EAAgBX,EAAaY,IAAInB,GACjCoB,EAAgBb,EAAaY,IAAIhB,GAEvCnB,EAAQQ,mCAA4B4B,EAAc1C,kBAC9CE,EAAgB,sBAEjB0B,EAAOW,iBAAiBP,mBACzBlC,EAAc,CACZC,UAAW2C,EAAc3C,UACzBC,YAAa0C,EAAc1C,YAC3BE,cAAAA,EACAC,YAAa,QACbC,YAAawB,EAAOW,iBAAiBP,iBACrC3B,OAAQ,CAACa,KAAMsB,EAAcG,MAAOxB,KAAMuB,EAAcC,OACxDrC,QAAAA,IAEFJ,EAAgB,eAGf0B,EAAOW,iBAAiBJ,kBACzBrC,EAAc,CACZC,UAAW2C,EAAc3C,UACzBC,YAAa0C,EAAc1C,YAC3BE,cAAAA,EACAC,YAAa,QACbC,YAAawB,EAAOW,iBAAiBJ,iBACrC9B,OAAQ,CAACa,KAAMsB,EAAcI,MAAOzB,KAAMuB,EAAcE,OACxDtC,QAAAA,IAIDsB,EAAOW,iBAAiBH,iBACzBR,EAAOW,iBAAiBH,gBAAgB3B,SAAQ,WAA0BoC,OAAxB5C,IAAAA,SAAUG,IAAAA,mBAC1DN,EAAc,CACZC,UAAW2C,EAAc3C,UACzBC,YAAa0C,EAAc1C,YAC3BE,cAAAA,EACAC,YAAa,OACbC,YAAAA,EACAC,OAAQ,CAACa,KAAMsB,EAAcM,MAAMD,GAAGE,OAAQ5B,KAAMuB,EAAcI,MAAMD,GAAGE,QAC3E9C,SAAAA,EACAK,QAAAA,OAINA,EAAQW,kBAGNW,EAAOI,kBAAqBJ,EAAOO,kBAAqBP,EAAOQ,iBACjE9B,EAAQE,gBACJR,EAAcD,GAChB,6DACA,yGA5Kc,yBAiLlBO,EAAQW,mBAGH,SAAS+B,EAAsBC,UACjCA,GACqB,oBAAZC,QAA2BA,OAAOC,KAAOD,OAAOC,IAAIC,kBAC5DF,OAAOC,IAAIC,kBAAiB,SAAAC,GACZ,SAAXA,IACDxD,GAAc,EACdyD,YAAW,WACTzD,GAAc,IACboD,OAMJ7B,ECjMT,IAAMmC,EAAU,aCDD,SAASC,EAAeC,UAEnCA,EAAKzD,aACLyD,EAAKC,MACJD,EAAKA,MAAQD,EAAeC,EAAKA,OACjCA,EAAKE,QAAUH,EAAeC,EAAKE,UACnCC,EAASH,GAAQA,OAAOI,GCL7B,IAAMC,EAAoC,oBAAZC,QAIxBC,EAD8B,mBAAXvE,QAAyBA,WACXA,WAAW,iBAAmB,MAC/DwE,EAAiB,SAAAC,UAAUA,EAAOC,WAAaH,GAGrD,SAASI,EAAUC,EAAGC,EAAGC,EAAkB7D,EAAYC,UACrD4D,EAAiBC,KAAK,CACpB7D,SAAAA,EACAD,WAAAA,EACAE,UAAWyD,EACXxD,UAAWyD,IAEN3D,IAAapB,EAwHP,SAASkF,EAAwBJ,EAAGC,EAAGI,WAE5CC,EAAQ,UAvHlB,SAASC,EAAyBP,EAAGC,EAAGC,OAAkB7D,yDAAa,MAClE2D,IAAMC,SACA,MAGLD,IAAMC,SACDF,EAAUC,EAAGC,EAAGC,EAAkB7D,EAAYnB,MAGpDsF,EAAQR,IAAMQ,EAAQP,GAAG,KACpBQ,EAAcT,EAAE9D,UACnBuE,IAAgBR,EAAE/D,cACZ6D,IAAcC,KAAQC,GAAIC,EAAkB7D,EAAYnB,WAG3DwF,EAAiB,GACnBC,EAA0B,EACtBnC,EAAIiC,EAAajC,IAAKA,EAAI,EAAE,KAC5BoC,EAAaL,EAAyBP,EAAExB,GAAIyB,EAAEzB,GAAIkC,YAAmBrE,cAAcmC,QACtFoC,GACDD,WAIDA,IAA4BF,EACtBV,IAAcC,KAAQC,GAAIC,EAAkB7D,EAAYnB,IAGjEgF,EAAiBC,WAAjBD,EAAyBQ,GAElBX,IAAcC,KAAQC,GAAIC,EAAkB7D,EAAYnB,OAG9D2F,EAAMb,IAAMa,EAAMZ,GAAG,IACnBD,EAAEc,OAASb,EAAEa,YACPf,EAAU,IAAIgB,IAAIf,GAAI,IAAIe,IAAId,GAAIC,EAAkB7D,EAAYnB,aAGvD8E,kCAAE,KAAVgB,cACJf,EAAEgB,IAAID,UACDjB,EAAU,IAAIgB,IAAIf,GAAI,IAAIe,IAAId,GAAIC,EAAkB7D,EAAYnB,yCAIpE6E,EAAU,IAAIgB,IAAIf,GAAI,IAAIe,IAAId,GAAIC,EAAkB7D,EAAYnB,MAGtEgG,EAAOlB,IAAMkB,EAAOjB,UACdD,EAAEmB,YAAclB,EAAEkB,UACvBpB,EAAU,IAAIqB,KAAKpB,GAAI,IAAIoB,KAAKnB,GAAIC,EAAkB7D,EAAYnB,GAClE6E,EAAU,IAAIqB,KAAKpB,GAAI,IAAIoB,KAAKnB,GAAIC,EAAkB7D,EAAYnB,MAGnEmG,EAASrB,IAAMqB,EAASpB,UAClBD,EAAEsB,aAAerB,EAAEqB,WACxBvB,EAAUC,EAAGC,EAAGC,EAAkB7D,EAAYnB,GAC9C6E,EAAUC,EAAGC,EAAGC,EAAkB7D,EAAYnB,MAG/CuE,GAAkBO,aAAaN,SAAWO,aAAaP,eACjDK,EAAUC,EAAGC,EAAGC,EAAkB7D,EAAYnB,MAGpD0E,EAAeI,IAAMJ,EAAeK,GAAG,IACrCD,EAAEZ,OAASa,EAAEb,YACPW,EAAUC,EAAGC,EAAGC,EAAkB7D,EAAYnB,OAGjDqG,EACJhB,EAAyBP,EAAE1B,MAAO2B,EAAE3B,MAAO,aAAOjC,oBAGlD0D,EAAUC,EAAGC,EAAGC,EAAkB7D,EAD7BkF,EACyCrG,EACAA,MAG/CsG,EAAWxB,IAAMwB,EAAWvB,UACtBD,EAAEX,OAASY,EAAEZ,KAClBU,EAAUC,EAAGC,EAAGC,EAAkB7D,EAAYnB,GAC9C6E,EAAUC,EAAGC,EAAGC,EAAkB7D,EAAYnB,MAG/CuG,EAAczB,IAAMyB,EAAcxB,GAAG,KAChCyB,EAAOC,EAAQ3B,GACf4B,EAAaF,EAAKxF,UACrB0F,IAAeD,EAAQ1B,GAAG/D,cACpB6D,OAAcC,QAAQC,GAAIC,EAAkB7D,EAAYnB,OAG7D,IAAIsD,EAAIoD,EAAYpD,IAAKA,EAAI,MAC3BqD,EAAI5B,EAAGyB,EAAKlD,WACPuB,OAAcC,QAAQC,GAAIC,EAAkB7D,EAAYnB,WAI7D4G,EAAoB,GACtBC,EAAiC,EAC7BvD,EAAIoD,EAAYpD,IAAKA,EAAI,EAAE,KAC3BwD,EAAMN,EAAKlD,GACXyD,EAAa1B,EAAyBP,EAAEgC,GAAM/B,EAAE+B,GAAMF,YAAsBzF,cAAc2F,IAC7FC,GACDF,WAIDA,IAAmCH,EAC7B7B,OAAcC,QAAQC,GAAIC,EAAkB7D,EAAYnB,IAGjEgF,EAAiBC,WAAjBD,EAAyB4B,GAElB/B,OAAcC,QAAQC,GAAIC,EAAkB7D,EAAYnB,WAG1D6E,EAAUC,EAAGC,EAAGC,EAAkB7D,EAAYnB,GAMnDqF,CAAyBP,EAAGC,EAAGK,EAAOD,GAC/BC,EACR,MAAM4B,MACDA,EAAMC,SAAWD,EAAMC,QAAQC,MAAM,sBAA2C,aAAlBF,EAAMG,cAOtEC,QAAQC,KAAK,4EAA8EL,EAAM7C,KAAM6C,EAAMC,UACtG,QAEHD,GCvJV,IAAMM,EAAc,GAEL,SAASC,EAAuBC,EAAaC,gEAAgC,OAAlBC,QAAAA,mBACrEF,IAAgBC,SACV,MAGLC,SACKxC,EAAwBsC,EAAaC,OAGxCE,EAAUH,GAAeF,EACzBM,EAAUH,GAAeH,EAEzBO,EAAoBC,OAAOtB,YAASmB,GAAYC,WAE/CG,EAAOF,GAAmB,SAACrE,EAAQsD,OAClCkB,EAAiB9C,EAAwByC,EAAQb,GAAMc,EAAQd,GAAMA,UACxEkB,IACDxE,cACKA,KACAwE,KAGAxE,IACN,IC1BL,SAASyE,EAAgBlG,EAAWC,EAAWC,EAAUC,EAAWC,EAAWC,EAAUE,OACjFW,EAAgBX,EAAaY,IAAInB,GACjCoB,EAAgBb,EAAaY,IAAIhB,SAEhC,CACLO,iBAAkB8E,EAAuBxF,EAAWG,GACpDU,iBAAkB2E,EAAuBvF,EAAWG,GACpDU,gBAAiB0E,EAAuBtF,EAAUG,EAAU,CAACsF,SAAS,IACtE1E,iBAAmC,MAAjBC,GAA0C,MAAjBE,GAAwB,CACjEV,iBAAkB8E,EAAuBtE,EAAcG,MAAOD,EAAcC,OAC5ER,iBAAkB2E,EAAuBtE,EAAcI,MAAOF,EAAcE,OAC5ER,gBAAiBI,EAAcM,MAAM2E,KAAI,WAAqB5E,SAAO,CACnE5C,WADyCA,SAEzCG,YAAa0G,IAFsC/D,OAEPL,EAAcI,MAAMD,GAAGE,OAAQ,CAACkE,SAAS,UAM9E,SAASS,SAAe3H,IAAAA,UAAWC,IAAAA,YAAaC,IAAAA,SAAUqB,IAAAA,UAAWC,IAAAA,UAAWC,IAAAA,SAAUC,IAAAA,UAAWC,IAAAA,UAAWC,IAAAA,SAAUrB,IAAAA,QAASuB,IAAAA,mBACzI,CACL9B,UAAAA,EACAC,YAAAA,EACAC,SAAAA,EACAqB,UAAAA,EACAC,UAAAA,EACAC,SAAAA,EACAC,UAAAA,EACAC,UAAAA,EACAC,SAAAA,EACArB,QAAAA,EACAuB,aAAAA,EACAD,OAAQ4F,EAAgBlG,EAAWC,EAAWC,EAAUC,EAAWC,EAAWC,EAAUE,IChBrF,SAAS8F,EAAsB5H,UAC7BA,EAAU6H,aAAe7H,EAAU6H,UAAUC,iBAG/C,SAASC,EAAgB/H,UACvBA,EAAUoE,WAAazE,EAGzB,SAASqI,EAAsBhI,UAC7BA,EAAUoE,WAAaxE,ECTjB,SAASqI,SAAajI,IAAAA,UAAWC,IAAAA,YAAaM,IAAAA,QAAS2H,IAAAA,MAAOC,IAAAA,oBAR7E,SAAuBlI,EAAaM,UAEhCA,EAAQ6H,SACR7H,EAAQ6H,QAAQ5H,OAAS,GACzBD,EAAQ6H,QAAQlG,MAAK,SAAAmG,UAASA,EAAMC,KAAKrI,MAKxCsI,CAActI,EAAaM,MAIG,IAA9BP,EAAUgC,oBAIVmG,IACDnI,EAAUgC,kBAA4D,IAAzChC,EAAUgC,gBAAgBwG,gBAMvDxI,EAAUgC,iBACRzB,EAAQkI,yBACLzI,GAAaA,EAAU6H,qBAAqBK,EAAMQ,eACnDX,EAAgB/H,KAnCxB,SAAuBC,EAAaM,UAEhCA,EAAQoI,SACRpI,EAAQoI,QAAQnI,OAAS,GACzBD,EAAQoI,QAAQzG,MAAK,SAAAmG,UAASA,EAAMC,KAAKrI,MAkCzC2I,CAAc3I,EAAaM,MCnChB,SAASsI,EAAoBC,EAAgB7I,EAAaiI,EAAO3H,EAASuB,SACjFiH,UAAkCD,EACtCE,YAAYpG,EAAOqG,eACXrG,EAAOqG,eAERC,MAAQ,CACXC,aAAc,OAGVC,EAAaC,MAAMzF,QAAU0F,KAAK1F,OAERwF,IAAeN,EAAejB,UAAUjE,cAEjEA,OAAS,kBACZmF,EAA0BlB,UAAUjE,OAAO2F,MAAMC,GAC1CJ,MAIbxF,iBACOsF,MAAMC,eAEN,iBAAkBG,KAAKJ,aACrBA,MAAMO,aFrBZ,SAAsCC,WACvCC,EAAqBD,GAA0BA,EAAuBE,oBACpED,GAAmB,IANR,EAOZA,EAAmBE,YACb,EAETF,EAAqBA,gBAEhB,EEayBG,CAA6BR,QAIpDA,KAAKJ,MAAMO,cAAgBH,KAAKJ,MAAMC,aAAe,GAAM,EAAG,IAC9DG,KAAKJ,MAAM3H,UAAU,KAChBD,EAAaqG,EAAc,CAC/B3H,UAAW8I,EACX7I,YAAAA,EACAsB,UAAW+H,KAAKJ,MAAM3H,UACtBC,UAAW8H,KAAKJ,MAAM1H,UACtBE,UAAW4H,KAAK1G,MAChBjB,UAAW2H,KAAKzG,MAChBtC,QAAAA,EACAuB,aAAAA,IAGFvB,EAAQwJ,SAASzI,QAGd4H,MAAM3H,UAAY+H,KAAK1G,WACvBsG,MAAM1H,UAAY8H,KAAKzG,aAGvBwG,MAAMzF,OAASyF,MAAMzF,SAAW,UAKzCmF,EAA0B9I,YAAcA,EACzC,MAAM+J,aAIEjB,EAA2BD,GAE7BC,ECxDM,SAASkB,EAA8BC,EAA6BC,EAAQlK,EAAaiI,EAAO3H,EAASuB,OAChHsI,EAA8D,iBAAjCF,EALa,SAACG,EAAkBnC,UAAU,SAAAtF,UAC7EsF,EAAMoC,cAAcD,EAAkBzH,IAKpC2H,CAA0CL,EAA6BhC,GACvEgC,WAEOM,QACD9I,EAAY+I,UAAU,GACtBC,EAAMxC,EAAMyC,SAEZpJ,EAAYmJ,EAAIE,WACtBF,EAAIE,QAAUlJ,EAEXH,EAAU,KACLD,EAAaqG,EAAc,CAC/B3H,UAAWoK,EACXnK,YAAAA,EACAsB,UAAAA,EACAG,UAAAA,EACAnB,QAAAA,EACAuB,aAAAA,IAGI+I,GACHvJ,EAAWO,OAAOI,kBAChBkI,GAAwD,IAA9C7I,EAAWO,OAAOI,iBAAiBzB,OAI9CqK,GACFtK,EAAQwJ,SAASzI,UAId8I,eAAuBK,eAI9BD,EAAwBvK,YAAcA,EACvC,MAAM+J,WAIPQ,EAAwBM,0BAA4BV,IAC3CI,EAAyBJ,GAE3BI,ECvCT,IAAMO,EAAmBrL,OAAO,sBAChC,SAASsL,GAAiB9K,IAA4B+K,EAAY/C,EAAO3H,EAASuB,EAAcoJ,OAArDC,IAANC,KAC7BxJ,EAAWuJ,EAAWE,EAAIJ,EAAYE,GAAYF,EACxDC,EAASN,QAAQnG,KAAK,CAACvE,SAAAA,EAAU8C,OAAQpB,QACnC0J,EACJpD,EAAMqD,oDACNrD,EAAMqD,mDAAmDC,kBAAkBZ,QAGvEa,EAAoBvD,EAAMyC,OAAOI,OAEnCO,SACKL,MAGHjL,EAAYsL,EAAoC5H,KAAKoH,2BAA6BQ,EAAoC5H,KACtHzD,EAAcwD,EAAezD,OAEbiI,EAAY,CAACjI,UAAAA,EAAWC,YAAAA,EAAaM,QAAAA,EAAS2H,MAAAA,EAAOC,cAAc,WAEhF8C,MAGHS,EAAiBD,EAAkBb,WACzCa,EAAkBb,QAAUK,EAEzBS,IAAmBX,EAAiB,KAC/BY,EAAehE,EAAc,CACjC3H,UAAWA,EACXC,YAAAA,EACAC,SAAAA,EACAuB,SAAU0J,EAAWE,EAAIK,EAAgBP,GAAYO,EACrD9J,SAAAA,EACArB,QAAAA,EACAuB,aAAAA,IAGC6J,EAAa9J,OAAOQ,iBACrB9B,EAAQwJ,SAAS4B,UAIdV,EAGT,SAASW,GAAuBC,EAAe7L,EAAWC,EAAaiI,EAAO3H,EAASuB,UAClFiG,EAAgB/H,GCpDN,SAAS8L,EAAmBC,EAAe9L,EAAaiI,EAAO3H,EAASuB,OACxEkK,EAAsBD,EAA5BrI,KAEDuI,EAAsCrE,EAAsBoE,GAC5DE,EAAkClE,EAAsBgE,GACxDG,EAA2CpE,EAAgBiE,GAE3DI,EAA6BF,EACjCF,EAAmBpI,OACnBoI,EAEIK,EAAwBJ,EAC5BpD,EAAoBuD,EAA4BnM,EAAaiI,EAAO3H,EAASuB,GAC5EqK,EACCL,EAAmBM,EAA4BnM,EAAaiI,EAAO3H,EAASuB,GAC5EmI,EAA8BmC,GAA4B,EAAMnM,EAAaiI,EAAO3H,EAASuB,OAI/FuK,EAAsBpM,YAAcwD,EAAe2I,GACpD,MAAMpC,IAIPqC,EAAsBvB,0BAA4BiB,IACzCM,EAAuBD,OAE1BE,EAAkCpE,EAAMqE,KAC5CL,EAAkChE,EAAMsE,WAAWH,GAAyBA,EAC5EN,EAAcU,aAIdH,EAAgCrM,YAAcA,EAC/C,MAAM+J,aAIEsC,EAAiCP,GAEnCO,EDaER,CAAmB9L,EAAWC,EAAaiI,EAAO3H,EAASuB,GAGjEkG,EAAsBhI,GE1DZ,SAAkC0M,EAAqBzM,EAAaiI,EAAO3H,EAASuB,OAClF6K,EAA4BD,EAApC9I,OAEDgJ,EAA2B7E,EAAgB4E,GAC3CP,EAA6BQ,EACjCD,EAAyBjJ,KAAOiJ,EAE5BE,EACJ5C,EAA8BmC,EAA4BQ,EAA0B3M,EAAaiI,EAAO3H,EAASuB,GAGnH+K,EAAgD5M,YAAcwD,EAAe2I,GAC7ES,EAAgD/B,0BAA4BsB,IACnES,EAAiDT,OAEpDU,EAAoC5E,EAAMsE,WAC9CI,EACE1E,EAAMqE,KAAKM,EAAiDF,EAAyBF,SACrFI,OAIFC,EAAkC7M,YAAcA,EACjD,MAAM+J,aAIE8C,EAAmCJ,GAErCI,EF8BEC,CAAyB/M,EAAWC,EAAaiI,EAAO3H,EAASuB,GAGvE8F,EAAsB5H,GAChB6I,EAAoB7I,EAAWC,EAAaiI,EAAO3H,EAASuB,GAG9DmI,EAA8BjK,GAAW,EAAOC,EAAaiI,EAAO3H,EAASuB,GAGtF,SAASkL,GAAoBnB,EAAe7L,EAAWC,EAAaiI,EAAO3H,EAASuB,MAC/E+J,EAActG,IAAIvF,UACZ6L,EAAcnJ,IAAI1C,OAGrBiN,EAAuBrB,GAAuBC,EAAe7L,EAAWC,EAAaiI,EAAO3H,EAASuB,UAE3G+J,EAAcqB,IAAIlN,EAAWiN,GACtBA,EAGF,IAAME,GAAc,CACzBC,SAAU,CAAChC,KAAM,KACjBiC,WAAY,CAACjC,KAAM,KACnBkC,YAAY,EACZC,SAAS,GAGI,SAASvL,GAAgBkG,EAAOsF,OACvCjN,ETzFO,eAA0BiN,yDAAc,GACjDzM,EAAe6F,QAAQ6G,MACvBvM,EAAkB0F,QAAQ8G,SAE3BF,EAAYG,eACb5M,EAAe6F,QAAQgH,eAEjBJ,EAAYK,WAClB9M,EAAe6F,QAAQkH,IACvB5M,EAAkBsC,OAGduG,EAAWyD,EAAYzD,UAC3B9G,EACG,sBAAuBuK,EAAeA,EAAYtK,kBAAoB,eAKzEyF,QAAS,KACTP,QAAS,KACT2B,SAAAA,EACA8D,UAAU,EACVpN,WAAYmG,QAAQkH,IACpB/M,aAAAA,EACAG,gBAAAA,EACAa,sBAAsB,EACtBgM,iBAAiB,EACjBvF,YAAY,EACZjG,WAAY,OACZvB,cAAe,OACfC,cAAe,MACf+M,gBAAiB,GACjBvF,wBAAwB,GACrB+E,GSuDWS,CAAiBT,GAE3BU,EAAoBhG,EAAMoC,cAC1B6D,EAAoBjG,EAAMkG,cAE5BvC,EAAgB,IAAIwC,QAClBvM,EAAe,IAAIuM,QACnBnD,EAAW,CAACN,QAAS,IAGvB0D,EAAe,QAChBpG,EAAMqD,oDACPjE,OAAOiH,eAAerG,EAAMqD,mDAAmDC,kBAAmB,UAAW,CAC3G9I,sBACS4L,GAETpB,aAAIsB,GACFF,EAAeE,EACftD,EAASN,QAAU,MAKzB1C,EAAMoC,cAAgB,SAASmE,WACzBC,EAAgB,KAChBzO,EAAc,KACdgN,EAAuB,wBAH+B0B,mCAAAA,2BAMxDD,GAEwC,mBAA7BD,GACP1G,EAAgB0G,IAChBzG,EAAsByG,KAExBxG,EAAY,CAACjI,UAAWyO,EAA0BxO,YAAawD,EAAegL,GAA2BvG,MAAAA,EAAO3H,QAAAA,IAGjG,CACfN,EACEwO,GACAA,EAAyBzM,iBACzByM,EAAyBzM,gBAAgB4M,YACzCnL,EAAegL,GAGjBxB,EAAuBD,GAAoBnB,EAAe4C,EAA0BxO,EAAaiI,EAAO3H,EAASuB,OAE3G+M,EAAUX,EAAkB3E,MAAMrB,GAAQ+E,UAAyB0B,OACtEpO,EAAQwN,gBAAgB,KACnBe,EAAgB5G,EAAMqD,mDAAmDC,kBAAkBZ,WAC7E,MAAjBkE,EAAsB,KACjB9O,EAAY8O,EAAcpL,KAAKoH,2BAA6BgE,EAAcpL,KAC1EzD,EAAcwD,EAAezD,GACnC8B,EAAaoL,IAAI2B,EAAQjM,MAAO,CAC9B5C,UAAAA,EACAC,YAAAA,EACA2C,MAAOkM,EAAcC,aACrBlM,MAAkC,MAA3BiM,EAAcE,UAAoBF,EAAcE,UAAUnM,MAAQ,KACzEE,MAAOmI,EAASN,kBAKfiE,GAGX,MAAM7E,GACJzJ,EAAQE,WAAW,8GAA+G,CAChIwO,UAAW,CACTzI,MAAOwD,EACPyE,yBAAAA,EACAE,KAAAA,EACApO,QAAAA,EACAmO,cAAAA,EACAzO,YAAAA,EACAgN,qBAAAA,YAKCiB,EAAkB3E,MAAMrB,GAAQuG,UAA6BE,KAGtErH,OAAO4H,OAAOhH,EAAMoC,cAAe4D,GAEnChG,EAAMkG,cAAgB,SAAA1K,OACdyL,EAAUjH,EAAMoC,cAAc8E,KAAK,KAAM1L,UAC/CyL,EAAQzL,KAAOA,EACRyL,GAGT7H,OAAO4H,OAAOhH,EAAMkG,cAAeD,GAEhC5N,EAAQiI,WAAW,KACd6G,EAAc/H,OAAOgI,QAAQnC,IAAazF,KAAI,yBAAExH,OAAUqP,aACvD,CAACrH,EAAOhI,EAAUqP,kBAItBF,KACA9O,EAAQyN,kBAGAtN,SAAQ,yBAAE8O,OAAYtP,cAAUqP,aAAqB,KAC1DE,EAAeD,EAAWtP,GAC1BwP,EAAcxP,EAAS,GAAGyP,cAAgBzP,EAAS0P,MAAM,GACzDC,EAAU,sCAAYC,2BAAAA,sBACpB7E,EAAawE,EAAaM,WAAbN,GAAkBnG,aAASwG,WAC9C9E,GAAiB9K,EAAUqP,EAAoBtE,EAAY/C,EAAO3H,EAASuB,EAAcoJ,GAClFD,GAET3D,OAAOiH,eAAesB,EAAS,OAAQ,CAACrB,MAAOkB,EAAaM,UAAU,IACtE1I,OAAO4H,OAAOW,EAAS,CAACJ,aAAAA,IACxBD,EAAWtP,GAAY2P,YAI3B3H,EAAM+H,8BAAgC,WACpC3I,OAAO4H,OAAOhH,EAAO,CACnBoC,cAAe4D,EACfE,cAAeD,IAGjBtC,EAAgB,iBAGXvE,OAAOtB,KAAKmH,IAAazF,KAAI,SAAAxH,SAAY,CAACgI,EAAOhI,SACjDK,EAAQyN,kBAECtN,SAAQ,yBAAE8O,OAAYtP,OAC/BsP,EAAWtP,GAAUuP,eACtBD,EAAWtP,GAAYsP,EAAWtP,GAAUuP,wBAIzCvH,EAAM+H,+BAGR/H,EGtOTlG,GAAgBX,gBAAkBA"} \ 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/utils.js","../../src/shouldTrack.js","../../src/patches/patchClassComponent.js","../../src/patches/patchFunctionalOrStrComponent.js","../../src/whyDidYouRender.js","../../src/patches/patchMemoComponent.js","../../src/patches/patchForwardRefComponent.js","../../src/index.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\r\n// copied from packages/shared/ReactSymbols.js in https://github.com/facebook/react\r\nconst hasSymbol = typeof Symbol === 'function' && Symbol.for\r\nexport const REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3\r\nexport const REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0\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 (remember that the syntax always produces a *NEW* immutable React element so a component that receives as props always re-renders.).',\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} result]` : `${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 its values are all equal.`,\r\n diffObjType === 'props' ?\r\n 'This could have been avoided by making the component pure, or by preventing its father from re-rendering.' :\r\n 'This usually means this component called setState when no changes in its 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, ownerDataMap} = 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\r\n if(reason.propsDifferences && reason.ownerDifferences){\r\n const prevOwnerData = ownerDataMap.get(prevProps)\r\n const nextOwnerData = ownerDataMap.get(nextProps)\r\n\r\n options.consoleGroup(`Rendered by ${nextOwnerData.displayName}`)\r\n let prefixMessage = 'Re-rendered because'\r\n\r\n if(reason.ownerDifferences.propsDifferences){\r\n logDifference({\r\n Component: nextOwnerData.Component,\r\n displayName: nextOwnerData.displayName,\r\n prefixMessage,\r\n diffObjType: 'props',\r\n differences: reason.ownerDifferences.propsDifferences,\r\n values: {prev: prevOwnerData.props, next: nextOwnerData.props},\r\n options\r\n })\r\n prefixMessage = 'And because'\r\n }\r\n\r\n if(reason.ownerDifferences.stateDifferences){\r\n logDifference({\r\n Component: nextOwnerData.Component,\r\n displayName: nextOwnerData.displayName,\r\n prefixMessage,\r\n diffObjType: 'state',\r\n differences: reason.ownerDifferences.stateDifferences,\r\n values: {prev: prevOwnerData.state, next: nextOwnerData.state},\r\n options\r\n })\r\n }\r\n\r\n if(reason.ownerDifferences.hookDifferences){\r\n reason.ownerDifferences.hookDifferences.forEach(({hookName, differences}, i) =>\r\n logDifference({\r\n Component: nextOwnerData.Component,\r\n displayName: nextOwnerData.displayName,\r\n prefixMessage,\r\n diffObjType: 'hook',\r\n differences,\r\n values: {prev: prevOwnerData.hooks[i].result, next: nextOwnerData.hooks[i].result},\r\n hookName,\r\n options\r\n })\r\n )\r\n }\r\n options.consoleGroupEnd()\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(typeof(module) !== 'undefined' && 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 ('hotReloadBufferMs' in userOptions) ? 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 logOwnerReasons: false,\r\n trackHooks: true,\r\n titleColor: '#058',\r\n diffNameColor: 'blue',\r\n diffPathColor: 'red',\r\n trackExtraHooks: [],\r\n trackAllPureComponents: false,\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 (type.render && getDisplayName(type.render)) ||\r\n (isString(type) ? type : undefined)\r\n )\r\n}\r\n","import {isArray, isPlainObject, isDate, isRegExp, isFunction, isSet, 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 arrayLength = a.length\r\n if(arrayLength !== b.length){\r\n return trackDiff([...a], [...b], diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n const arrayItemDiffs = []\r\n let numberOfDeepEqualsItems = 0\r\n for(let i = arrayLength; i--; i > 0){\r\n const diffEquals = accumulateDeepEqualDiffs(a[i], b[i], arrayItemDiffs, `${pathString}[${i}]`)\r\n if(diffEquals){\r\n numberOfDeepEqualsItems++\r\n }\r\n }\r\n\r\n if(numberOfDeepEqualsItems === arrayLength){\r\n return trackDiff([...a], [...b], diffsAccumulator, pathString, diffTypes.deepEquals)\r\n }\r\n\r\n diffsAccumulator.push(...arrayItemDiffs)\r\n\r\n return trackDiff([...a], [...b], diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isSet(a) && isSet(b)){\r\n if(a.size !== b.size){\r\n return trackDiff(new Set(a), new Set(b), diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n for(const valA of a){\r\n if(!b.has(valA)){\r\n return trackDiff(new Set(a), new Set(b), diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n }\r\n\r\n return trackDiff(new Set(a), new Set(b), diffsAccumulator, pathString, diffTypes.deepEquals)\r\n }\r\n\r\n if(isDate(a) && isDate(b)){\r\n return a.getTime() === b.getTime() ?\r\n trackDiff(new Date(a), new Date(b), diffsAccumulator, pathString, diffTypes.date) :\r\n trackDiff(new Date(a), new Date(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 if(a.type !== b.type){\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n const reactElementPropsAreDeepEqual =\r\n accumulateDeepEqualDiffs(a.props, b.props, [], `${pathString}.props`)\r\n\r\n return reactElementPropsAreDeepEqual ?\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 keysLength = keys.length\r\n if(keysLength !== getKeys(b).length){\r\n return trackDiff({...a}, {...b}, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n for(let i = keysLength; i--; 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 const objectValuesDiffs = []\r\n let numberOfDeepEqualsObjectValues = 0\r\n for(let i = keysLength; i--; i > 0){\r\n const key = keys[i]\r\n const deepEquals = accumulateDeepEqualDiffs(a[key], b[key], objectValuesDiffs, `${pathString}.${key}`)\r\n if(deepEquals){\r\n numberOfDeepEqualsObjectValues++\r\n }\r\n }\r\n\r\n if(numberOfDeepEqualsObjectValues === keysLength){\r\n return trackDiff({...a}, {...b}, diffsAccumulator, pathString, diffTypes.deepEquals)\r\n }\r\n\r\n diffsAccumulator.push(...objectValuesDiffs)\r\n\r\n return 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 getOwnerDifferences({prevOwnerData, nextOwnerData}){\r\n if(!prevOwnerData || !nextOwnerData){\r\n return false\r\n }\r\n\r\n const hookDifferences = prevOwnerData.hooks.map(({hookName, result}, i) => ({\r\n hookName,\r\n differences: findObjectsDifferences(result, nextOwnerData.hooks[i].result, {shallow: false})\r\n }))\r\n\r\n return {\r\n propsDifferences: findObjectsDifferences(prevOwnerData.props, nextOwnerData.props),\r\n stateDifferences: findObjectsDifferences(prevOwnerData.state, nextOwnerData.state),\r\n hookDifferences: hookDifferences.length > 0 ? hookDifferences : false\r\n }\r\n}\r\n\r\nfunction getUpdateReason(prevProps, prevState, prevHook, nextProps, nextState, nextHook, ownerDataMap){\r\n const prevOwnerData = ownerDataMap.get(prevProps)\r\n const nextOwnerData = ownerDataMap.get(nextProps)\r\n\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 ownerDifferences: getOwnerDifferences({prevOwnerData, nextOwnerData})\r\n }\r\n}\r\n\r\nexport default function getUpdateInfo({Component, displayName, hookName, prevProps, prevState, prevHook, nextProps, nextState, nextHook, options, ownerDataMap}){\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 ownerDataMap,\r\n reason: getUpdateReason(prevProps, prevState, prevHook, nextProps, nextState, nextHook, ownerDataMap)\r\n }\r\n}\r\n","// copied from https://github.com/facebook/react/blob/master/packages/react-reconciler/src/ReactTypeOfMode.js\r\nimport {REACT_FORWARD_REF_TYPE, REACT_MEMO_TYPE} from './consts'\r\n\r\nconst StrictMode = 0b0001\r\n\r\n// based on \"findStrictRoot\" from https://github.com/facebook/react/blob/master/packages/react-reconciler/src/ReactStrictModeWarnings.js\r\n// notice: this is only used for class components. functional components doesn't re-rendered inside strict mode\r\nexport function checkIfInsideAStrictModeTree(reactComponentInstance){\r\n let reactInternalFiber = reactComponentInstance && reactComponentInstance._reactInternalFiber\r\n while(reactInternalFiber){\r\n if(reactInternalFiber.mode & StrictMode){\r\n return true\r\n }\r\n reactInternalFiber = reactInternalFiber.return\r\n }\r\n return false\r\n}\r\n\r\nexport function isReactClassComponent(Component){\r\n return Component.prototype && !!Component.prototype.isReactComponent\r\n}\r\n\r\nexport function isMemoComponent(Component){\r\n return Component.$$typeof === REACT_MEMO_TYPE\r\n}\r\n\r\nexport function isForwardRefComponent(Component){\r\n return Component.$$typeof === REACT_FORWARD_REF_TYPE\r\n}\r\n","import {isMemoComponent} from './utils'\r\n\r\nfunction 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, React, isHookChange}){\r\n if(shouldExclude(displayName, options)){\r\n return false\r\n }\r\n\r\n if(Component.whyDidYouRender === false){\r\n return false\r\n }\r\n\r\n if(isHookChange && (\r\n Component.whyDidYouRender && Component.whyDidYouRender.trackHooks === false\r\n )){\r\n return false\r\n }\r\n\r\n return !!(\r\n Component.whyDidYouRender || (\r\n options.trackAllPureComponents && (\r\n (Component && Component.prototype instanceof React.PureComponent) ||\r\n isMemoComponent(Component)\r\n )\r\n ) ||\r\n shouldInclude(displayName, options)\r\n )\r\n}\r\n","import {defaults} from 'lodash'\r\n\r\nimport {checkIfInsideAStrictModeTree} from '../utils'\r\nimport getUpdateInfo from '../getUpdateInfo'\r\n\r\nexport default function patchClassComponent(ClassComponent, displayName, React, options, ownerDataMap){\r\n class WDYRPatchedClassComponent extends ClassComponent{\r\n constructor(props, context){\r\n super(props, context)\r\n\r\n this._WDYR = {\r\n renderNumber: 0\r\n }\r\n\r\n const origRender = super.render || this.render\r\n // this probably means render is an arrow function or this.render.bind(this) was called on the original class\r\n const renderIsABindedFunction = origRender !== ClassComponent.prototype.render\r\n if(renderIsABindedFunction){\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 this._WDYR.renderNumber++\r\n\r\n if(!('isStrictMode' in this._WDYR)){\r\n this._WDYR.isStrictMode = checkIfInsideAStrictModeTree(this)\r\n }\r\n\r\n // in strict mode- ignore every other render\r\n if(!(this._WDYR.isStrictMode && this._WDYR.renderNumber % 2 === 1)){\r\n if(this._WDYR.prevProps){\r\n const updateInfo = getUpdateInfo({\r\n Component: ClassComponent,\r\n displayName,\r\n prevProps: this._WDYR.prevProps,\r\n prevState: this._WDYR.prevState,\r\n nextProps: this.props,\r\n nextState: this.state,\r\n options,\r\n ownerDataMap\r\n })\r\n\r\n options.notifier(updateInfo)\r\n }\r\n\r\n this._WDYR.prevProps = this.props\r\n this._WDYR.prevState = this.state\r\n }\r\n\r\n return super.render ? super.render() : null\r\n }\r\n }\r\n\r\n try{\r\n WDYRPatchedClassComponent.displayName = displayName\r\n }catch(e){\r\n // not crucial if displayName couldn't be set\r\n }\r\n\r\n defaults(WDYRPatchedClassComponent, ClassComponent)\r\n\r\n return WDYRPatchedClassComponent\r\n}\r\n","import {defaults} from 'lodash'\r\n\r\nimport getUpdateInfo from '../getUpdateInfo'\r\n\r\nconst getFunctionalComponentFromStringComponent = (componentTypeStr, React) => props => (\r\n React.createElement(componentTypeStr, props)\r\n)\r\n\r\nexport default function patchFunctionalOrStrComponent(FunctionalOrStringComponent, isPure, displayName, React, options, ownerDataMap){\r\n const FunctionalComponent = typeof(FunctionalOrStringComponent) === 'string' ?\r\n getFunctionalComponentFromStringComponent(FunctionalOrStringComponent, React) :\r\n FunctionalOrStringComponent\r\n\r\n function WDYRFunctionalComponent(){\r\n const nextProps = arguments[0]\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 updateInfo = getUpdateInfo({\r\n Component: FunctionalComponent,\r\n displayName,\r\n prevProps,\r\n nextProps,\r\n options,\r\n ownerDataMap\r\n })\r\n\r\n const notifiedByHooks = (\r\n !updateInfo.reason.propsDifferences || (\r\n (isPure && updateInfo.reason.propsDifferences.length === 0)\r\n )\r\n )\r\n\r\n if(!notifiedByHooks){\r\n options.notifier(updateInfo)\r\n }\r\n }\r\n\r\n return FunctionalComponent(...arguments)\r\n }\r\n\r\n try{\r\n WDYRFunctionalComponent.displayName = displayName\r\n }catch(e){\r\n // not crucial if displayName couldn't be set\r\n }\r\n\r\n WDYRFunctionalComponent.ComponentForHooksTracking = FunctionalComponent\r\n defaults(WDYRFunctionalComponent, FunctionalComponent)\r\n\r\n return WDYRFunctionalComponent\r\n}\r\n","import {get} 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\nimport patchClassComponent from './patches/patchClassComponent'\r\nimport patchFunctionalOrStrComponent from './patches/patchFunctionalOrStrComponent'\r\nimport patchMemoComponent from './patches/patchMemoComponent'\r\nimport patchForwardRefComponent from './patches/patchForwardRefComponent'\r\n\r\nimport {isForwardRefComponent, isMemoComponent, isReactClassComponent} from './utils'\r\n\r\nconst initialHookValue = Symbol('initial-hook-value')\r\nfunction trackHookChanges(hookName, {path: hookPath}, hookResult, React, options, ownerDataMap, hooksRef){\r\n const nextHook = hookPath ? get(hookResult, hookPath) : hookResult\r\n hooksRef.current.push({hookName, result: nextHook})\r\n const ComponentHookDispatchedFromInstance = (\r\n React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED &&\r\n React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner.current\r\n )\r\n\r\n const prevHookResultRef = React.useRef(initialHookValue)\r\n\r\n if(!ComponentHookDispatchedFromInstance){\r\n return hookResult\r\n }\r\n\r\n const Component = ComponentHookDispatchedFromInstance.type.ComponentForHooksTracking || ComponentHookDispatchedFromInstance.type\r\n const displayName = getDisplayName(Component)\r\n\r\n const isShouldTrack = shouldTrack({Component, displayName, options, React, isHookChange: true})\r\n if(!isShouldTrack){\r\n return hookResult\r\n }\r\n\r\n const prevHookResult = prevHookResultRef.current\r\n prevHookResultRef.current = hookResult\r\n\r\n if(prevHookResult !== initialHookValue){\r\n const notification = getUpdateInfo({\r\n Component: Component,\r\n displayName,\r\n hookName,\r\n prevHook: hookPath ? get(prevHookResult, hookPath) : prevHookResult,\r\n nextHook,\r\n options,\r\n ownerDataMap\r\n })\r\n\r\n if(notification.reason.hookDifferences){\r\n options.notifier(notification)\r\n }\r\n }\r\n\r\n return hookResult\r\n}\r\n\r\nfunction createPatchedComponent(componentsMap, Component, displayName, React, options, ownerDataMap){\r\n if(isMemoComponent(Component)){\r\n return patchMemoComponent(Component, displayName, React, options, ownerDataMap)\r\n }\r\n\r\n if(isForwardRefComponent(Component)){\r\n return patchForwardRefComponent(Component, displayName, React, options, ownerDataMap)\r\n }\r\n\r\n if(isReactClassComponent(Component)){\r\n return patchClassComponent(Component, displayName, React, options, ownerDataMap)\r\n }\r\n\r\n return patchFunctionalOrStrComponent(Component, false, displayName, React, options, ownerDataMap)\r\n}\r\n\r\nfunction getPatchedComponent(componentsMap, Component, displayName, React, options, ownerDataMap){\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, ownerDataMap)\r\n\r\n componentsMap.set(Component, WDYRPatchedComponent)\r\n return WDYRPatchedComponent\r\n}\r\n\r\nfunction getIsSupportedComponentType(Comp){\r\n if(!Comp){\r\n return false\r\n }\r\n\r\n if(typeof Comp === 'function'){\r\n return true\r\n }\r\n\r\n if(isMemoComponent(Comp)){\r\n return getIsSupportedComponentType(Comp.type)\r\n }\r\n\r\n if(isForwardRefComponent(Comp)){\r\n return getIsSupportedComponentType(Comp.render)\r\n }\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 const ownerDataMap = new WeakMap()\r\n const hooksRef = {current: []}\r\n\r\n // Intercept assignments to ReactCurrentOwner.current and reset hooksRef\r\n let currentOwner = null\r\n if(React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED){\r\n Object.defineProperty(React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner, 'current', {\r\n get(){\r\n return currentOwner\r\n },\r\n set(value){\r\n currentOwner = value\r\n hooksRef.current = []\r\n }\r\n })\r\n }\r\n\r\n React.createElement = function(componentNameOrComponent, ...rest){\r\n let isShouldTrack = null\r\n let displayName = null\r\n let WDYRPatchedComponent = null\r\n\r\n try{\r\n isShouldTrack = (\r\n getIsSupportedComponentType(componentNameOrComponent) &&\r\n shouldTrack({Component: componentNameOrComponent, displayName: getDisplayName(componentNameOrComponent), React, options})\r\n )\r\n\r\n if(isShouldTrack){\r\n displayName = (\r\n componentNameOrComponent &&\r\n componentNameOrComponent.whyDidYouRender &&\r\n componentNameOrComponent.whyDidYouRender.customName ||\r\n getDisplayName(componentNameOrComponent)\r\n )\r\n\r\n WDYRPatchedComponent = getPatchedComponent(componentsMap, componentNameOrComponent, displayName, React, options, ownerDataMap)\r\n\r\n const element = origCreateElement.apply(React, [WDYRPatchedComponent, ...rest])\r\n if(options.logOwnerReasons){\r\n const OwnerInstance = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner.current\r\n if(OwnerInstance){\r\n const Component = OwnerInstance.type.ComponentForHooksTracking || OwnerInstance.type\r\n const displayName = getDisplayName(Component)\r\n ownerDataMap.set(element.props, {\r\n Component,\r\n displayName,\r\n props: OwnerInstance.pendingProps,\r\n state: OwnerInstance.stateNode != null ? OwnerInstance.stateNode.state : null,\r\n hooks: hooksRef.current\r\n })\r\n }\r\n }\r\n\r\n return element\r\n }\r\n }\r\n catch(e){\r\n options.consoleLog('whyDidYouRender error. Please file a bug at https://github.com/welldone-software/why-did-you-render/issues.', {\r\n errorInfo: {\r\n error: e,\r\n componentNameOrComponent,\r\n rest,\r\n options,\r\n isShouldTrack,\r\n displayName,\r\n WDYRPatchedComponent\r\n }\r\n })\r\n }\r\n\r\n return origCreateElement.apply(React, [componentNameOrComponent, ...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 if(options.trackHooks){\r\n const nativeHooks = Object.entries(hooksConfig).map(([hookName, hookTrackingConfig]) => {\r\n return [React, hookName, hookTrackingConfig]\r\n })\r\n\r\n const hooksToTrack = [\r\n ...nativeHooks,\r\n ...options.trackExtraHooks\r\n ]\r\n\r\n hooksToTrack.forEach(([hookParent, hookName, hookTrackingConfig = {}]) => {\r\n const originalHook = hookParent[hookName]\r\n const newHookName = hookName[0].toUpperCase() + hookName.slice(1)\r\n const newHook = function(...args){\r\n const hookResult = originalHook.call(this, ...args)\r\n trackHookChanges(hookName, hookTrackingConfig, hookResult, React, options, ownerDataMap, hooksRef)\r\n return hookResult\r\n }\r\n Object.defineProperty(newHook, 'name', {value: newHookName, writable: false})\r\n Object.assign(newHook, {originalHook})\r\n hookParent[hookName] = newHook\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\r\n componentsMap = null\r\n\r\n const hooksToRevert = [\r\n ...Object.keys(hooksConfig).map(hookName => [React, hookName]),\r\n ...options.trackExtraHooks\r\n ]\r\n hooksToRevert.forEach(([hookParent, hookName]) => {\r\n if(hookParent[hookName].originalHook){\r\n hookParent[hookName] = hookParent[hookName].originalHook\r\n }\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","import {defaults} from 'lodash'\r\n\r\nimport getDisplayName from '../getDisplayName'\r\n\r\nimport {isForwardRefComponent, isMemoComponent, isReactClassComponent} from '../utils'\r\nimport patchClassComponent from './patchClassComponent'\r\nimport patchFunctionalOrStrComponent from './patchFunctionalOrStrComponent'\r\n\r\nexport default function patchMemoComponent(MemoComponent, displayName, React, options, ownerDataMap){\r\n const {type: InnerMemoComponent} = MemoComponent\r\n\r\n const isInnerMemoComponentAClassComponent = isReactClassComponent(InnerMemoComponent)\r\n const isInnerMemoComponentForwardRefs = isForwardRefComponent(InnerMemoComponent)\r\n const isInnerMemoComponentAnotherMemoComponent = isMemoComponent(InnerMemoComponent)\r\n\r\n const WrappedFunctionalComponent = isInnerMemoComponentForwardRefs ?\r\n InnerMemoComponent.render :\r\n InnerMemoComponent\r\n\r\n const PatchedInnerComponent = isInnerMemoComponentAClassComponent ?\r\n patchClassComponent(WrappedFunctionalComponent, displayName, React, options, ownerDataMap) :\r\n (isInnerMemoComponentAnotherMemoComponent ?\r\n patchMemoComponent(WrappedFunctionalComponent, displayName, React, options, ownerDataMap) :\r\n patchFunctionalOrStrComponent(WrappedFunctionalComponent, true, displayName, React, options, ownerDataMap)\r\n )\r\n\r\n try{\r\n PatchedInnerComponent.displayName = getDisplayName(WrappedFunctionalComponent)\r\n }catch(e){\r\n // not crucial if displayName couldn't be set\r\n }\r\n\r\n PatchedInnerComponent.ComponentForHooksTracking = MemoComponent\r\n defaults(PatchedInnerComponent, WrappedFunctionalComponent)\r\n\r\n const WDYRMemoizedFunctionalComponent = React.memo(\r\n isInnerMemoComponentForwardRefs ? React.forwardRef(PatchedInnerComponent) : PatchedInnerComponent,\r\n MemoComponent.compare\r\n )\r\n\r\n try{\r\n WDYRMemoizedFunctionalComponent.displayName = displayName\r\n }catch(e){\r\n // not crucial if displayName couldn't be set\r\n }\r\n\r\n defaults(WDYRMemoizedFunctionalComponent, MemoComponent)\r\n\r\n return WDYRMemoizedFunctionalComponent\r\n}\r\n","import {defaults} from 'lodash'\r\n\r\nimport getDisplayName from '../getDisplayName'\r\nimport {isMemoComponent} from '../utils'\r\nimport patchFunctionalOrStrComponent from './patchFunctionalOrStrComponent'\r\n\r\nexport default function patchForwardRefComponent(ForwardRefComponent, displayName, React, options, ownerDataMap){\r\n const {render: InnerForwardRefComponent} = ForwardRefComponent\r\n\r\n const isInnerComponentMemoized = isMemoComponent(InnerForwardRefComponent)\r\n const WrappedFunctionalComponent = isInnerComponentMemoized ?\r\n InnerForwardRefComponent.type : InnerForwardRefComponent\r\n\r\n const WDYRWrappedByReactForwardRefFunctionalComponent = (\r\n patchFunctionalOrStrComponent(WrappedFunctionalComponent, isInnerComponentMemoized, displayName, React, options, ownerDataMap)\r\n )\r\n\r\n WDYRWrappedByReactForwardRefFunctionalComponent.displayName = getDisplayName(WrappedFunctionalComponent)\r\n WDYRWrappedByReactForwardRefFunctionalComponent.ComponentForHooksTracking = WrappedFunctionalComponent\r\n defaults(WDYRWrappedByReactForwardRefFunctionalComponent, WrappedFunctionalComponent)\r\n\r\n const WDYRForwardRefFunctionalComponent = React.forwardRef(\r\n isInnerComponentMemoized ?\r\n React.memo(WDYRWrappedByReactForwardRefFunctionalComponent, InnerForwardRefComponent.compare) :\r\n WDYRWrappedByReactForwardRefFunctionalComponent\r\n )\r\n\r\n try{\r\n WDYRForwardRefFunctionalComponent.displayName = displayName\r\n }catch(e){\r\n // not crucial if displayName couldn't be set\r\n }\r\n\r\n defaults(WDYRForwardRefFunctionalComponent, ForwardRefComponent)\r\n\r\n return WDYRForwardRefFunctionalComponent\r\n}\r\n","import whyDidYouRender from './whyDidYouRender'\r\nimport defaultNotifier from './defaultNotifier'\r\n\r\nwhyDidYouRender.defaultNotifier = defaultNotifier\r\nexport default whyDidYouRender\r\n"],"names":["diffTypes","hasSymbol","Symbol","REACT_MEMO_TYPE","REACT_FORWARD_REF_TYPE","diffTypesDescriptions","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","ownerDataMap","logOnDifferentValues","whyDidYouRender","propsDifferences","some","diff","stateDifferences","hookDifferences","shouldLog","titleColor","ownerDifferences","prevOwnerData","get","nextOwnerData","props","state","i","hooks","result","createDefaultNotifier","hotReloadBufferMs","module","hot","addStatusHandler","status","setTimeout","emptyFn","getDisplayName","type","name","render","_isString","undefined","hasElementType","Element","REACT_ELEMENT_TYPE","isReactElement","object","$$typeof","trackDiff","a","b","diffsAccumulator","push","calculateDeepEqualDiffs","initialPathString","diffs","accumulateDeepEqualDiffs","_isArray","arrayLength","arrayItemDiffs","numberOfDeepEqualsItems","diffEquals","_isSet","size","Set","valA","has","_isDate","getTime","Date","_isRegExp","toString","reactElementPropsAreDeepEqual","_isFunction","_isPlainObject","keys","_keys","keysLength","_has","objectValuesDiffs","numberOfDeepEqualsObjectValues","key","deepEquals","error","message","match","number","console","warn","emptyObject","findObjectsDifferences","userPrevObj","userNextObj","shallow","prevObj","nextObj","keysOfBothObjects","Object","_reduce","deepEqualDiffs","getOwnerDifferences","map","getUpdateReason","getUpdateInfo","isReactClassComponent","prototype","isReactComponent","isMemoComponent","isForwardRefComponent","shouldTrack","React","isHookChange","exclude","regex","test","shouldExclude","trackHooks","trackAllPureComponents","PureComponent","include","shouldInclude","patchClassComponent","ClassComponent","WDYRPatchedClassComponent","constructor","context","_WDYR","renderNumber","origRender","super","this","apply","_this","isStrictMode","reactComponentInstance","reactInternalFiber","_reactInternalFiber","mode","checkIfInsideAStrictModeTree","notifier","e","patchFunctionalOrStrComponent","FunctionalOrStringComponent","isPure","FunctionalComponent","componentTypeStr","createElement","getFunctionalComponentFromStringComponent","WDYRFunctionalComponent","arguments","ref","useRef","current","notifiedByHooks","ComponentForHooksTracking","initialHookValue","trackHookChanges","hookResult","hooksRef","hookPath","path","_get","ComponentHookDispatchedFromInstance","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","ReactCurrentOwner","prevHookResultRef","prevHookResult","notification","createPatchedComponent","componentsMap","patchMemoComponent","MemoComponent","InnerMemoComponent","isInnerMemoComponentAClassComponent","isInnerMemoComponentForwardRefs","isInnerMemoComponentAnotherMemoComponent","WrappedFunctionalComponent","PatchedInnerComponent","WDYRMemoizedFunctionalComponent","memo","forwardRef","compare","ForwardRefComponent","InnerForwardRefComponent","isInnerComponentMemoized","WDYRWrappedByReactForwardRefFunctionalComponent","WDYRForwardRefFunctionalComponent","patchForwardRefComponent","getPatchedComponent","WDYRPatchedComponent","set","getIsSupportedComponentType","Comp","hooksConfig","useState","useReducer","useContext","useMemo","userOptions","group","groupEnd","collapseGroups","groupCollapsed","onlyLogs","log","logOwnerReasons","trackExtraHooks","normalizeOptions","origCreateElement","origCreateFactory","createFactory","WeakMap","currentOwner","defineProperty","value","componentNameOrComponent","isShouldTrack","rest","customName","element","OwnerInstance","pendingProps","stateNode","errorInfo","assign","factory","bind","nativeHooks","entries","hookTrackingConfig","hookParent","originalHook","newHookName","toUpperCase","slice","newHook","args","call","writable","__REVERT_WHY_DID_YOU_RENDER__"],"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 009cce2..1fe8f8f 100644 --- a/dist/no-classes-transpile/esm/whyDidYouRender.js +++ b/dist/no-classes-transpile/esm/whyDidYouRender.js @@ -1,8 +1,8 @@ /** - * @welldone-software/why-did-you-render 4.2.2 + * @welldone-software/why-did-you-render 4.2.3 * MIT Licensed * Generated by Vitali Zaidman (https://github.com/vzaidman) - * Generated at 2020-05-20 + * Generated at 2020-05-30 */ import _get from 'lodash/get'; @@ -139,9 +139,12 @@ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } -function _createForOfIteratorHelper(o) { +function _createForOfIteratorHelper(o, allowArrayLike) { + var it; + if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { - if (Array.isArray(o) || (o = _unsupportedIterableToArray(o))) { + if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { + if (it) o = it; var i = 0; var F = function () {}; @@ -167,8 +170,7 @@ function _createForOfIteratorHelper(o) { throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } - var it, - normalCompletion = true, + var normalCompletion = true, didErr = false, err; return { @@ -647,6 +649,31 @@ function findObjectsDifferences(userPrevObj, userNextObj) { }, []); } +function getOwnerDifferences(_ref) { + var prevOwnerData = _ref.prevOwnerData, + nextOwnerData = _ref.nextOwnerData; + + if (!prevOwnerData || !nextOwnerData) { + return false; + } + + var hookDifferences = prevOwnerData.hooks.map(function (_ref2, i) { + var hookName = _ref2.hookName, + result = _ref2.result; + return { + hookName: hookName, + differences: findObjectsDifferences(result, nextOwnerData.hooks[i].result, { + shallow: false + }) + }; + }); + return { + propsDifferences: findObjectsDifferences(prevOwnerData.props, nextOwnerData.props), + stateDifferences: findObjectsDifferences(prevOwnerData.state, nextOwnerData.state), + hookDifferences: hookDifferences.length > 0 ? hookDifferences : false + }; +} + function getUpdateReason(prevProps, prevState, prevHook, nextProps, nextState, nextHook, ownerDataMap) { var prevOwnerData = ownerDataMap.get(prevProps); var nextOwnerData = ownerDataMap.get(nextProps); @@ -656,35 +683,25 @@ function getUpdateReason(prevProps, prevState, prevHook, nextProps, nextState, n hookDifferences: findObjectsDifferences(prevHook, nextHook, { shallow: false }), - ownerDifferences: prevOwnerData != null && nextOwnerData != null ? { - propsDifferences: findObjectsDifferences(prevOwnerData.props, nextOwnerData.props), - stateDifferences: findObjectsDifferences(prevOwnerData.state, nextOwnerData.state), - hookDifferences: prevOwnerData.hooks.map(function (_ref, i) { - var hookName = _ref.hookName, - result = _ref.result; - return { - hookName: hookName, - differences: findObjectsDifferences(result, nextOwnerData.hooks[i].result, { - shallow: false - }) - }; - }) - } : false + ownerDifferences: getOwnerDifferences({ + prevOwnerData: prevOwnerData, + nextOwnerData: nextOwnerData + }) }; } -function getUpdateInfo(_ref2) { - var Component = _ref2.Component, - displayName = _ref2.displayName, - hookName = _ref2.hookName, - prevProps = _ref2.prevProps, - prevState = _ref2.prevState, - prevHook = _ref2.prevHook, - nextProps = _ref2.nextProps, - nextState = _ref2.nextState, - nextHook = _ref2.nextHook, - options = _ref2.options, - ownerDataMap = _ref2.ownerDataMap; +function getUpdateInfo(_ref3) { + var Component = _ref3.Component, + displayName = _ref3.displayName, + hookName = _ref3.hookName, + prevProps = _ref3.prevProps, + prevState = _ref3.prevState, + prevHook = _ref3.prevHook, + nextProps = _ref3.nextProps, + nextState = _ref3.nextState, + nextHook = _ref3.nextHook, + options = _ref3.options, + ownerDataMap = _ref3.ownerDataMap; return { Component: Component, displayName: displayName, @@ -1001,6 +1018,24 @@ function getPatchedComponent(componentsMap, Component, displayName, React, optio return WDYRPatchedComponent; } +function getIsSupportedComponentType(Comp) { + if (!Comp) { + return false; + } + + if (typeof Comp === 'function') { + return true; + } + + if (isMemoComponent(Comp)) { + return getIsSupportedComponentType(Comp.type); + } + + if (isForwardRefComponent(Comp)) { + return getIsSupportedComponentType(Comp.render); + } +} + var hooksConfig = { useState: { path: '0' @@ -1045,7 +1080,7 @@ function whyDidYouRender(React, userOptions) { } try { - isShouldTrack = (typeof componentNameOrComponent === 'function' || isMemoComponent(componentNameOrComponent) || isForwardRefComponent(componentNameOrComponent)) && shouldTrack({ + isShouldTrack = getIsSupportedComponentType(componentNameOrComponent) && shouldTrack({ Component: componentNameOrComponent, displayName: getDisplayName(componentNameOrComponent), React: React, @@ -1060,7 +1095,7 @@ function whyDidYouRender(React, userOptions) { if (options.logOwnerReasons) { var OwnerInstance = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner.current; - if (OwnerInstance != null) { + if (OwnerInstance) { var Component = OwnerInstance.type.ComponentForHooksTracking || OwnerInstance.type; var _displayName = getDisplayName(Component); diff --git a/dist/no-classes-transpile/esm/whyDidYouRender.min.js b/dist/no-classes-transpile/esm/whyDidYouRender.min.js index 4072560..bd14eea 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 4.2.2 + * @welldone-software/why-did-you-render 4.2.3 * MIT Licensed * Generated by Vitali Zaidman (https://github.com/vzaidman) - * Generated at 2020-05-20 + * Generated at 2020-05-30 */ -import e from"lodash/get";import r from"lodash/isString";import t from"lodash/reduce";import n from"lodash/has";import o from"lodash/keys";import a from"lodash/isSet";import i from"lodash/isFunction";import s from"lodash/isRegExp";import c from"lodash/isDate";import f from"lodash/isPlainObject";import u from"lodash/isArray";import p from"lodash/defaults";function l(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function d(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r&&(n=n.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,n)}return t}function m(e){for(var r=1;re.length)&&(r=e.length);for(var t=0,n=new Array(r);t=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:t}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var n,o,a=!0,i=!1;return{s:function(){n=e[Symbol.iterator]()},n:function(){var e=n.next();return a=e.done,e},e:function(e){i=!0,o=e},f:function(){try{a||null==n.return||n.return()}finally{if(i)throw o}}}}var D,_="different",w="deepEquals",k="date",R="regex",O="reactElement",E="function",N="function"==typeof Symbol&&Symbol.for,S=N?Symbol.for("react.memo"):60115,C=N?Symbol.for("react.forward_ref"):60112,x=(l(D={},_,"different objects."),l(D,w,"different objects that are equal by value."),l(D,k,"different date objects with the same value."),l(D,R,"different regular expressions with the same value."),l(D,O,"different React elements (remember that the syntax always produces a *NEW* immutable React element so a component that receives as props always re-renders.)."),l(D,E,"different functions with the same name."),D),T=!1;function j(e){var r=e.Component,t=e.displayName,n=e.hookName,o=e.prefixMessage,a=e.diffObjType,i=e.differences,s=e.values,c=e.options;i&&i.length>0?(c.consoleLog(l({},t,r),"".concat(o," of ").concat(a," changes:")),i.forEach((function(e){var r=e.pathString,t=e.diffType,o=e.prevValue,i=e.nextValue;c.consoleGroup("%c".concat("hook"===a?"[hook ".concat(n," result]"):"".concat(a,"."),"%c").concat(r,"%c"),"color:".concat(c.diffNameColor,";"),"color:".concat(c.diffPathColor,";"),"color:default;"),c.consoleLog("".concat(x[t]," (more info at ").concat(n?"http://bit.ly/wdyr3":"http://bit.ly/wdyr02",")")),c.consoleLog(l({},"prev ".concat(r),o),"!==",l({},"next ".concat(r),i)),c.consoleGroupEnd()}))):i&&(c.consoleLog(l({},t,r),"".concat(o," the ").concat(a," object itself changed but its values are all equal."),"props"===a?"This could have been avoided by making the component pure, or by preventing its father from re-rendering.":"This usually means this component called setState when no changes in its state actually occurred.","More info at ".concat("http://bit.ly/wdyr02")),c.consoleLog("prev ".concat(a,":"),s.prev," !== ",s.next,":next ".concat(a)))}function P(e){var r=e.Component,t=e.displayName,n=e.hookName,o=e.prevProps,a=e.prevState,i=e.prevHook,s=e.nextProps,c=e.nextState,f=e.nextHook,u=e.reason,p=e.options,d=e.ownerDataMap;if(function(e,r,t){return!T&&(!!t.logOnDifferentValues||(!(!r.whyDidYouRender||!r.whyDidYouRender.logOnDifferentValues)||!(e.propsDifferences&&e.propsDifferences.some((function(e){return e.diffType===_}))||e.stateDifferences&&e.stateDifferences.some((function(e){return e.diffType===_}))||e.hookDifferences&&e.hookDifferences.some((function(e){return e.diffType===_})))))}(u,r,p)){p.consoleGroup("%c".concat(t),"color: ".concat(p.titleColor,";"));var m="Re-rendered because";if(u.propsDifferences&&(j({Component:r,displayName:t,prefixMessage:m,diffObjType:"props",differences:u.propsDifferences,values:{prev:o,next:s},options:p}),m="And because"),u.stateDifferences&&j({Component:r,displayName:t,prefixMessage:m,diffObjType:"state",differences:u.stateDifferences,values:{prev:a,next:c},options:p}),u.hookDifferences&&j({Component:r,displayName:t,prefixMessage:m,diffObjType:"hook",differences:u.hookDifferences,values:{prev:i,next:f},hookName:n,options:p}),u.propsDifferences&&u.ownerDifferences){var y=d.get(o),h=d.get(s);p.consoleGroup("Rendered by ".concat(h.displayName));var v="Re-rendered because";u.ownerDifferences.propsDifferences&&(j({Component:h.Component,displayName:h.displayName,prefixMessage:v,diffObjType:"props",differences:u.ownerDifferences.propsDifferences,values:{prev:y.props,next:h.props},options:p}),v="And because"),u.ownerDifferences.stateDifferences&&j({Component:h.Component,displayName:h.displayName,prefixMessage:v,diffObjType:"state",differences:u.ownerDifferences.stateDifferences,values:{prev:y.state,next:h.state},options:p}),u.ownerDifferences.hookDifferences&&u.ownerDifferences.hookDifferences.forEach((function(e,r){var t=e.hookName,n=e.differences;return j({Component:h.Component,displayName:h.displayName,prefixMessage:v,diffObjType:"hook",differences:n,values:{prev:y.hooks[r].result,next:h.hooks[r].result},hookName:t,options:p})})),p.consoleGroupEnd()}u.propsDifferences||u.stateDifferences||u.hookDifferences||p.consoleLog(l({},t,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("http://bit.ly/wdyr02")),p.consoleGroupEnd()}}function Y(e){return e&&"undefined"!=typeof module&&module.hot&&module.hot.addStatusHandler&&module.hot.addStatusHandler((function(r){"idle"===r&&(T=!0,setTimeout((function(){T=!1}),e))})),P}var H=function(){};function I(e){return e.displayName||e.name||e.type&&I(e.type)||e.render&&I(e.render)||(r(e)?e:void 0)}var L="undefined"!=typeof Element,A="function"==typeof Symbol&&Symbol.for?Symbol.for("react.element"):60103,M=function(e){return e.$$typeof===A};function W(e,r,t,n,o){return t.push({diffType:o,pathString:n,prevValue:e,nextValue:r}),o!==_}function F(e,r,t){try{var p=[];return function e(r,t,p){var l=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"";if(r===t)return!0;if(!r||!t)return W(r,t,p,l,_);if(u(r)&&u(t)){var d=r.length;if(d!==t.length)return W(h(r),h(t),p,l,_);for(var y=[],v=0,b=d;b--;b>0){var D=e(r[b],t[b],y,"".concat(l,"[").concat(b,"]"));D&&v++}return v===d?W(h(r),h(t),p,l,w):(p.push.apply(p,y),W(h(r),h(t),p,l,_))}if(a(r)&&a(t)){if(r.size!==t.size)return W(new Set(r),new Set(t),p,l,_);var N,S=g(r);try{for(S.s();!(N=S.n()).done;){var C=N.value;if(!t.has(C))return W(new Set(r),new Set(t),p,l,_)}}catch(e){S.e(e)}finally{S.f()}return W(new Set(r),new Set(t),p,l,w)}if(c(r)&&c(t))return r.getTime()===t.getTime()?W(new Date(r),new Date(t),p,l,k):W(new Date(r),new Date(t),p,l,_);if(s(r)&&s(t))return r.toString()===t.toString()?W(r,t,p,l,R):W(r,t,p,l,_);if(L&&r instanceof Element&&t instanceof Element)return W(r,t,p,l,_);if(M(r)&&M(t)){if(r.type!==t.type)return W(r,t,p,l,_);var x=e(r.props,t.props,[],"".concat(l,".props"));return W(r,t,p,l,x?O:_)}if(i(r)&&i(t))return r.name===t.name?W(r,t,p,l,E):W(r,t,p,l,_);if(f(r)&&f(t)){var T=o(r),j=T.length;if(j!==o(t).length)return W(m({},r),m({},t),p,l,_);for(var P=j;P--;P>0)if(!n(t,T[P]))return W(m({},r),m({},t),p,l,_);for(var Y=[],H=0,I=j;I--;I>0){var A=T[I],F=e(r[A],t[A],Y,"".concat(l,".").concat(A));F&&H++}return H===j?W(m({},r),m({},t),p,l,w):(p.push.apply(p,Y),W(m({},r),m({},t),p,l,_))}return W(r,t,p,l,_)}(e,r,p,t),p}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 U={};function G(e,r){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=n.shallow,a=void 0===o||o;if(e===r)return!1;if(!a)return F(e,r);var i=e||U,s=r||U,c=Object.keys(m(m({},i),s));return t(c,(function(e,r){var t=F(i[r],s[r],r);return t&&(e=[].concat(h(e),h(t))),e}),[])}function V(e,r,t,n,o,a,i){var s=i.get(e),c=i.get(n);return{propsDifferences:G(e,n),stateDifferences:G(r,o),hookDifferences:G(t,a,{shallow:!1}),ownerDifferences:null!=s&&null!=c&&{propsDifferences:G(s.props,c.props),stateDifferences:G(s.state,c.state),hookDifferences:s.hooks.map((function(e,r){return{hookName:e.hookName,differences:G(e.result,c.hooks[r].result,{shallow:!1})}}))}}}function B(e){var r=e.Component,t=e.displayName,n=e.hookName,o=e.prevProps,a=e.prevState,i=e.prevHook,s=e.nextProps,c=e.nextState,f=e.nextHook,u=e.options,p=e.ownerDataMap;return{Component:r,displayName:t,hookName:n,prevProps:o,prevState:a,prevHook:i,nextProps:s,nextState:c,nextHook:f,options:u,ownerDataMap:p,reason:V(o,a,i,s,c,f,p)}}function $(e){return e.prototype&&!!e.prototype.isReactComponent}function q(e){return e.$$typeof===S}function z(e){return e.$$typeof===C}function J(e){var r=e.Component,t=e.displayName,n=e.options,o=e.React,a=e.isHookChange;return!function(e,r){return r.exclude&&r.exclude.length>0&&r.exclude.some((function(r){return r.test(e)}))}(t,n)&&(!1!==r.whyDidYouRender&&((!a||!r.whyDidYouRender||!1!==r.whyDidYouRender.trackHooks)&&!!(r.whyDidYouRender||n.trackAllPureComponents&&(r&&r.prototype instanceof o.PureComponent||q(r))||function(e,r){return r.include&&r.include.length>0&&r.include.some((function(r){return r.test(e)}))}(t,n))))}function K(e,r,t,n,o){class a extends e{constructor(r,t){var n;super(r,t),n=this,this._WDYR={renderNumber:0};var o=super.render||this.render;o!==e.prototype.render&&(this.render=function(){return a.prototype.render.apply(n),o()})}render(){if(this._WDYR.renderNumber++,"isStrictMode"in this._WDYR||(this._WDYR.isStrictMode=function(e){for(var r=e&&e._reactInternalFiber;r;){if(1&r.mode)return!0;r=r.return}return!1}(this)),!this._WDYR.isStrictMode||this._WDYR.renderNumber%2!=1){if(this._WDYR.prevProps){var t=B({Component:e,displayName:r,prevProps:this._WDYR.prevProps,prevState:this._WDYR.prevState,nextProps:this.props,nextState:this.state,options:n,ownerDataMap:o});n.notifier(t)}this._WDYR.prevProps=this.props,this._WDYR.prevState=this.state}return super.render?super.render():null}}try{a.displayName=r}catch(e){}return p(a,e),a}function Q(e,r,t,n,o,a){var i="string"==typeof e?function(e,r){return function(t){return r.createElement(e,t)}}(e,n):e;function s(){var e=arguments[0],s=n.useRef(),c=s.current;if(s.current=e,c){var f=B({Component:i,displayName:t,prevProps:c,nextProps:e,options:o,ownerDataMap:a}),u=!f.reason.propsDifferences||r&&0===f.reason.propsDifferences.length;u||o.notifier(f)}return i.apply(void 0,arguments)}try{s.displayName=t}catch(e){}return s.ComponentForHooksTracking=i,p(s,i),s}var X=Symbol("initial-hook-value");function Z(r,t,n,o,a,i,s){var c=t.path,f=c?e(n,c):n;s.current.push({hookName:r,result:f});var u=o.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED&&o.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner.current,p=o.useRef(X);if(!u)return n;var l=u.type.ComponentForHooksTracking||u.type,d=I(l);if(!J({Component:l,displayName:d,options:a,React:o,isHookChange:!0}))return n;var m=p.current;if(p.current=n,m!==X){var y=B({Component:l,displayName:d,hookName:r,prevHook:c?e(m,c):m,nextHook:f,options:a,ownerDataMap:i});y.reason.hookDifferences&&a.notifier(y)}return n}function ee(e,r,t,n,o,a){return q(r)?function e(r,t,n,o,a){var i=r.type,s=$(i),c=z(i),f=q(i),u=c?i.render:i,l=s?K(u,t,0,o,a):f?e(u,t,n,o,a):Q(u,!0,t,n,o,a);try{l.displayName=I(u)}catch(e){}l.ComponentForHooksTracking=r,p(l,u);var d=n.memo(c?n.forwardRef(l):l,r.compare);try{d.displayName=t}catch(e){}return p(d,r),d}(r,t,n,o,a):z(r)?function(e,r,t,n,o){var a=e.render,i=q(a),s=i?a.type:a,c=Q(s,i,r,t,n,o);c.displayName=I(s),c.ComponentForHooksTracking=s,p(c,s);var f=t.forwardRef(i?t.memo(c,a.compare):c);try{f.displayName=r}catch(e){}return p(f,e),f}(r,t,n,o,a):$(r)?K(r,t,0,o,a):Q(r,!1,t,n,o,a)}function re(e,r,t,n,o,a){if(e.has(r))return e.get(r);var i=ee(0,r,t,n,o,a);return e.set(r,i),i}var te={useState:{path:"0"},useReducer:{path:"0"},useContext:!0,useMemo:!0};function ne(e,r){var t=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=console.group,t=console.groupEnd;e.collapseGroups?r=console.groupCollapsed:e.onlyLogs&&(r=console.log,t=H);var n=e.notifier||Y("hotReloadBufferMs"in e?e.hotReloadBufferMs:500);return m({include:null,exclude:null,notifier:n,onlyLogs:!1,consoleLog:console.log,consoleGroup:r,consoleGroupEnd:t,logOnDifferentValues:!1,logOwnerReasons:!1,trackHooks:!0,titleColor:"#058",diffNameColor:"blue",diffPathColor:"red",trackExtraHooks:[],trackAllPureComponents:!1},e)}(r),n=e.createElement,o=e.createFactory,a=new WeakMap,i=new WeakMap,s={current:[]},c=null;if(e.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED&&Object.defineProperty(e.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,"current",{get:function(){return c},set:function(e){c=e,s.current=[]}}),e.createElement=function(r){for(var o=null,c=null,f=null,u=arguments.length,p=new Array(u>1?u-1:0),l=1;le.length)&&(r=e.length);for(var t=0,n=new Array(r);t=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,i=!0,s=!1;return{s:function(){t=e[Symbol.iterator]()},n:function(){var e=t.next();return i=e.done,e},e:function(e){s=!0,a=e},f:function(){try{i||null==t.return||t.return()}finally{if(s)throw a}}}}var D,w="different",_="deepEquals",k="date",O="regex",R="reactElement",E="function",N="function"==typeof Symbol&&Symbol.for,S=N?Symbol.for("react.memo"):60115,x=N?Symbol.for("react.forward_ref"):60112,C=(l(D={},w,"different objects."),l(D,_,"different objects that are equal by value."),l(D,k,"different date objects with the same value."),l(D,O,"different regular expressions with the same value."),l(D,R,"different React elements (remember that the syntax always produces a *NEW* immutable React element so a component that receives as props always re-renders.)."),l(D,E,"different functions with the same name."),D),T=!1;function j(e){var r=e.Component,t=e.displayName,n=e.hookName,o=e.prefixMessage,a=e.diffObjType,i=e.differences,s=e.values,c=e.options;i&&i.length>0?(c.consoleLog(l({},t,r),"".concat(o," of ").concat(a," changes:")),i.forEach((function(e){var r=e.pathString,t=e.diffType,o=e.prevValue,i=e.nextValue;c.consoleGroup("%c".concat("hook"===a?"[hook ".concat(n," result]"):"".concat(a,"."),"%c").concat(r,"%c"),"color:".concat(c.diffNameColor,";"),"color:".concat(c.diffPathColor,";"),"color:default;"),c.consoleLog("".concat(C[t]," (more info at ").concat(n?"http://bit.ly/wdyr3":"http://bit.ly/wdyr02",")")),c.consoleLog(l({},"prev ".concat(r),o),"!==",l({},"next ".concat(r),i)),c.consoleGroupEnd()}))):i&&(c.consoleLog(l({},t,r),"".concat(o," the ").concat(a," object itself changed but its values are all equal."),"props"===a?"This could have been avoided by making the component pure, or by preventing its father from re-rendering.":"This usually means this component called setState when no changes in its state actually occurred.","More info at ".concat("http://bit.ly/wdyr02")),c.consoleLog("prev ".concat(a,":"),s.prev," !== ",s.next,":next ".concat(a)))}function P(e){var r=e.Component,t=e.displayName,n=e.hookName,o=e.prevProps,a=e.prevState,i=e.prevHook,s=e.nextProps,c=e.nextState,f=e.nextHook,u=e.reason,p=e.options,d=e.ownerDataMap;if(function(e,r,t){return!T&&(!!t.logOnDifferentValues||(!(!r.whyDidYouRender||!r.whyDidYouRender.logOnDifferentValues)||!(e.propsDifferences&&e.propsDifferences.some((function(e){return e.diffType===w}))||e.stateDifferences&&e.stateDifferences.some((function(e){return e.diffType===w}))||e.hookDifferences&&e.hookDifferences.some((function(e){return e.diffType===w})))))}(u,r,p)){p.consoleGroup("%c".concat(t),"color: ".concat(p.titleColor,";"));var m="Re-rendered because";if(u.propsDifferences&&(j({Component:r,displayName:t,prefixMessage:m,diffObjType:"props",differences:u.propsDifferences,values:{prev:o,next:s},options:p}),m="And because"),u.stateDifferences&&j({Component:r,displayName:t,prefixMessage:m,diffObjType:"state",differences:u.stateDifferences,values:{prev:a,next:c},options:p}),u.hookDifferences&&j({Component:r,displayName:t,prefixMessage:m,diffObjType:"hook",differences:u.hookDifferences,values:{prev:i,next:f},hookName:n,options:p}),u.propsDifferences&&u.ownerDifferences){var y=d.get(o),h=d.get(s);p.consoleGroup("Rendered by ".concat(h.displayName));var v="Re-rendered because";u.ownerDifferences.propsDifferences&&(j({Component:h.Component,displayName:h.displayName,prefixMessage:v,diffObjType:"props",differences:u.ownerDifferences.propsDifferences,values:{prev:y.props,next:h.props},options:p}),v="And because"),u.ownerDifferences.stateDifferences&&j({Component:h.Component,displayName:h.displayName,prefixMessage:v,diffObjType:"state",differences:u.ownerDifferences.stateDifferences,values:{prev:y.state,next:h.state},options:p}),u.ownerDifferences.hookDifferences&&u.ownerDifferences.hookDifferences.forEach((function(e,r){var t=e.hookName,n=e.differences;return j({Component:h.Component,displayName:h.displayName,prefixMessage:v,diffObjType:"hook",differences:n,values:{prev:y.hooks[r].result,next:h.hooks[r].result},hookName:t,options:p})})),p.consoleGroupEnd()}u.propsDifferences||u.stateDifferences||u.hookDifferences||p.consoleLog(l({},t,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("http://bit.ly/wdyr02")),p.consoleGroupEnd()}}function Y(e){return e&&"undefined"!=typeof module&&module.hot&&module.hot.addStatusHandler&&module.hot.addStatusHandler((function(r){"idle"===r&&(T=!0,setTimeout((function(){T=!1}),e))})),P}var H=function(){};function I(e){return e.displayName||e.name||e.type&&I(e.type)||e.render&&I(e.render)||(r(e)?e:void 0)}var L="undefined"!=typeof Element,A="function"==typeof Symbol&&Symbol.for?Symbol.for("react.element"):60103,M=function(e){return e.$$typeof===A};function W(e,r,t,n,o){return t.push({diffType:o,pathString:n,prevValue:e,nextValue:r}),o!==w}function F(e,r,t){try{var p=[];return function e(r,t,p){var l=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"";if(r===t)return!0;if(!r||!t)return W(r,t,p,l,w);if(u(r)&&u(t)){var d=r.length;if(d!==t.length)return W(h(r),h(t),p,l,w);for(var y=[],v=0,g=d;g--;g>0){var D=e(r[g],t[g],y,"".concat(l,"[").concat(g,"]"));D&&v++}return v===d?W(h(r),h(t),p,l,_):(p.push.apply(p,y),W(h(r),h(t),p,l,w))}if(a(r)&&a(t)){if(r.size!==t.size)return W(new Set(r),new Set(t),p,l,w);var N,S=b(r);try{for(S.s();!(N=S.n()).done;){var x=N.value;if(!t.has(x))return W(new Set(r),new Set(t),p,l,w)}}catch(e){S.e(e)}finally{S.f()}return W(new Set(r),new Set(t),p,l,_)}if(c(r)&&c(t))return r.getTime()===t.getTime()?W(new Date(r),new Date(t),p,l,k):W(new Date(r),new Date(t),p,l,w);if(s(r)&&s(t))return r.toString()===t.toString()?W(r,t,p,l,O):W(r,t,p,l,w);if(L&&r instanceof Element&&t instanceof Element)return W(r,t,p,l,w);if(M(r)&&M(t)){if(r.type!==t.type)return W(r,t,p,l,w);var C=e(r.props,t.props,[],"".concat(l,".props"));return W(r,t,p,l,C?R:w)}if(i(r)&&i(t))return r.name===t.name?W(r,t,p,l,E):W(r,t,p,l,w);if(f(r)&&f(t)){var T=o(r),j=T.length;if(j!==o(t).length)return W(m({},r),m({},t),p,l,w);for(var P=j;P--;P>0)if(!n(t,T[P]))return W(m({},r),m({},t),p,l,w);for(var Y=[],H=0,I=j;I--;I>0){var A=T[I],F=e(r[A],t[A],Y,"".concat(l,".").concat(A));F&&H++}return H===j?W(m({},r),m({},t),p,l,_):(p.push.apply(p,Y),W(m({},r),m({},t),p,l,w))}return W(r,t,p,l,w)}(e,r,p,t),p}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 U={};function G(e,r){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=n.shallow,a=void 0===o||o;if(e===r)return!1;if(!a)return F(e,r);var i=e||U,s=r||U,c=Object.keys(m(m({},i),s));return t(c,(function(e,r){var t=F(i[r],s[r],r);return t&&(e=[].concat(h(e),h(t))),e}),[])}function V(e){var r=e.prevOwnerData,t=e.nextOwnerData;if(!r||!t)return!1;var n=r.hooks.map((function(e,r){return{hookName:e.hookName,differences:G(e.result,t.hooks[r].result,{shallow:!1})}}));return{propsDifferences:G(r.props,t.props),stateDifferences:G(r.state,t.state),hookDifferences:n.length>0&&n}}function B(e,r,t,n,o,a,i){var s=i.get(e),c=i.get(n);return{propsDifferences:G(e,n),stateDifferences:G(r,o),hookDifferences:G(t,a,{shallow:!1}),ownerDifferences:V({prevOwnerData:s,nextOwnerData:c})}}function $(e){var r=e.Component,t=e.displayName,n=e.hookName,o=e.prevProps,a=e.prevState,i=e.prevHook,s=e.nextProps,c=e.nextState,f=e.nextHook,u=e.options,p=e.ownerDataMap;return{Component:r,displayName:t,hookName:n,prevProps:o,prevState:a,prevHook:i,nextProps:s,nextState:c,nextHook:f,options:u,ownerDataMap:p,reason:B(o,a,i,s,c,f,p)}}function q(e){return e.prototype&&!!e.prototype.isReactComponent}function z(e){return e.$$typeof===S}function J(e){return e.$$typeof===x}function K(e){var r=e.Component,t=e.displayName,n=e.options,o=e.React,a=e.isHookChange;return!function(e,r){return r.exclude&&r.exclude.length>0&&r.exclude.some((function(r){return r.test(e)}))}(t,n)&&(!1!==r.whyDidYouRender&&((!a||!r.whyDidYouRender||!1!==r.whyDidYouRender.trackHooks)&&!!(r.whyDidYouRender||n.trackAllPureComponents&&(r&&r.prototype instanceof o.PureComponent||z(r))||function(e,r){return r.include&&r.include.length>0&&r.include.some((function(r){return r.test(e)}))}(t,n))))}function Q(e,r,t,n,o){class a extends e{constructor(r,t){var n;super(r,t),n=this,this._WDYR={renderNumber:0};var o=super.render||this.render;o!==e.prototype.render&&(this.render=function(){return a.prototype.render.apply(n),o()})}render(){if(this._WDYR.renderNumber++,"isStrictMode"in this._WDYR||(this._WDYR.isStrictMode=function(e){for(var r=e&&e._reactInternalFiber;r;){if(1&r.mode)return!0;r=r.return}return!1}(this)),!this._WDYR.isStrictMode||this._WDYR.renderNumber%2!=1){if(this._WDYR.prevProps){var t=$({Component:e,displayName:r,prevProps:this._WDYR.prevProps,prevState:this._WDYR.prevState,nextProps:this.props,nextState:this.state,options:n,ownerDataMap:o});n.notifier(t)}this._WDYR.prevProps=this.props,this._WDYR.prevState=this.state}return super.render?super.render():null}}try{a.displayName=r}catch(e){}return p(a,e),a}function X(e,r,t,n,o,a){var i="string"==typeof e?function(e,r){return function(t){return r.createElement(e,t)}}(e,n):e;function s(){var e=arguments[0],s=n.useRef(),c=s.current;if(s.current=e,c){var f=$({Component:i,displayName:t,prevProps:c,nextProps:e,options:o,ownerDataMap:a}),u=!f.reason.propsDifferences||r&&0===f.reason.propsDifferences.length;u||o.notifier(f)}return i.apply(void 0,arguments)}try{s.displayName=t}catch(e){}return s.ComponentForHooksTracking=i,p(s,i),s}var Z=Symbol("initial-hook-value");function ee(r,t,n,o,a,i,s){var c=t.path,f=c?e(n,c):n;s.current.push({hookName:r,result:f});var u=o.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED&&o.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner.current,p=o.useRef(Z);if(!u)return n;var l=u.type.ComponentForHooksTracking||u.type,d=I(l);if(!K({Component:l,displayName:d,options:a,React:o,isHookChange:!0}))return n;var m=p.current;if(p.current=n,m!==Z){var y=$({Component:l,displayName:d,hookName:r,prevHook:c?e(m,c):m,nextHook:f,options:a,ownerDataMap:i});y.reason.hookDifferences&&a.notifier(y)}return n}function re(e,r,t,n,o,a){return z(r)?function e(r,t,n,o,a){var i=r.type,s=q(i),c=J(i),f=z(i),u=c?i.render:i,l=s?Q(u,t,0,o,a):f?e(u,t,n,o,a):X(u,!0,t,n,o,a);try{l.displayName=I(u)}catch(e){}l.ComponentForHooksTracking=r,p(l,u);var d=n.memo(c?n.forwardRef(l):l,r.compare);try{d.displayName=t}catch(e){}return p(d,r),d}(r,t,n,o,a):J(r)?function(e,r,t,n,o){var a=e.render,i=z(a),s=i?a.type:a,c=X(s,i,r,t,n,o);c.displayName=I(s),c.ComponentForHooksTracking=s,p(c,s);var f=t.forwardRef(i?t.memo(c,a.compare):c);try{f.displayName=r}catch(e){}return p(f,e),f}(r,t,n,o,a):q(r)?Q(r,t,0,o,a):X(r,!1,t,n,o,a)}function te(e,r,t,n,o,a){if(e.has(r))return e.get(r);var i=re(0,r,t,n,o,a);return e.set(r,i),i}function ne(e){return!!e&&("function"==typeof e||(z(e)?ne(e.type):J(e)?ne(e.render):void 0))}var oe={useState:{path:"0"},useReducer:{path:"0"},useContext:!0,useMemo:!0};function ae(e,r){var t=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=console.group,t=console.groupEnd;e.collapseGroups?r=console.groupCollapsed:e.onlyLogs&&(r=console.log,t=H);var n=e.notifier||Y("hotReloadBufferMs"in e?e.hotReloadBufferMs:500);return m({include:null,exclude:null,notifier:n,onlyLogs:!1,consoleLog:console.log,consoleGroup:r,consoleGroupEnd:t,logOnDifferentValues:!1,logOwnerReasons:!1,trackHooks:!0,titleColor:"#058",diffNameColor:"blue",diffPathColor:"red",trackExtraHooks:[],trackAllPureComponents:!1},e)}(r),n=e.createElement,o=e.createFactory,a=new WeakMap,i=new WeakMap,s={current:[]},c=null;if(e.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED&&Object.defineProperty(e.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,"current",{get:function(){return c},set:function(e){c=e,s.current=[]}}),e.createElement=function(r){for(var o=null,c=null,f=null,u=arguments.length,p=new Array(u>1?u-1:0),l=1;l syntax always produces a *NEW* immutable React element so a component that receives as props always re-renders.).',\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} result]` : `${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 its values are all equal.`,\r\n diffObjType === 'props' ?\r\n 'This could have been avoided by making the component pure, or by preventing its father from re-rendering.' :\r\n 'This usually means this component called setState when no changes in its 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, ownerDataMap} = 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\r\n if(reason.propsDifferences && reason.ownerDifferences){\r\n const prevOwnerData = ownerDataMap.get(prevProps)\r\n const nextOwnerData = ownerDataMap.get(nextProps)\r\n\r\n options.consoleGroup(`Rendered by ${nextOwnerData.displayName}`)\r\n let prefixMessage = 'Re-rendered because'\r\n\r\n if(reason.ownerDifferences.propsDifferences){\r\n logDifference({\r\n Component: nextOwnerData.Component,\r\n displayName: nextOwnerData.displayName,\r\n prefixMessage,\r\n diffObjType: 'props',\r\n differences: reason.ownerDifferences.propsDifferences,\r\n values: {prev: prevOwnerData.props, next: nextOwnerData.props},\r\n options\r\n })\r\n prefixMessage = 'And because'\r\n }\r\n\r\n if(reason.ownerDifferences.stateDifferences){\r\n logDifference({\r\n Component: nextOwnerData.Component,\r\n displayName: nextOwnerData.displayName,\r\n prefixMessage,\r\n diffObjType: 'state',\r\n differences: reason.ownerDifferences.stateDifferences,\r\n values: {prev: prevOwnerData.state, next: nextOwnerData.state},\r\n options\r\n })\r\n }\r\n\r\n if(reason.ownerDifferences.hookDifferences){\r\n reason.ownerDifferences.hookDifferences.forEach(({hookName, differences}, i) =>\r\n logDifference({\r\n Component: nextOwnerData.Component,\r\n displayName: nextOwnerData.displayName,\r\n prefixMessage,\r\n diffObjType: 'hook',\r\n differences,\r\n values: {prev: prevOwnerData.hooks[i].result, next: nextOwnerData.hooks[i].result},\r\n hookName,\r\n options\r\n })\r\n )\r\n }\r\n options.consoleGroupEnd()\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(typeof(module) !== 'undefined' && 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 ('hotReloadBufferMs' in userOptions) ? 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 logOwnerReasons: false,\r\n trackHooks: true,\r\n titleColor: '#058',\r\n diffNameColor: 'blue',\r\n diffPathColor: 'red',\r\n trackExtraHooks: [],\r\n trackAllPureComponents: false,\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 (type.render && getDisplayName(type.render)) ||\r\n (isString(type) ? type : undefined)\r\n )\r\n}\r\n","import {isArray, isPlainObject, isDate, isRegExp, isFunction, isSet, 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 arrayLength = a.length\r\n if(arrayLength !== b.length){\r\n return trackDiff([...a], [...b], diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n const arrayItemDiffs = []\r\n let numberOfDeepEqualsItems = 0\r\n for(let i = arrayLength; i--; i > 0){\r\n const diffEquals = accumulateDeepEqualDiffs(a[i], b[i], arrayItemDiffs, `${pathString}[${i}]`)\r\n if(diffEquals){\r\n numberOfDeepEqualsItems++\r\n }\r\n }\r\n\r\n if(numberOfDeepEqualsItems === arrayLength){\r\n return trackDiff([...a], [...b], diffsAccumulator, pathString, diffTypes.deepEquals)\r\n }\r\n\r\n diffsAccumulator.push(...arrayItemDiffs)\r\n\r\n return trackDiff([...a], [...b], diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isSet(a) && isSet(b)){\r\n if(a.size !== b.size){\r\n return trackDiff(new Set(a), new Set(b), diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n for(const valA of a){\r\n if(!b.has(valA)){\r\n return trackDiff(new Set(a), new Set(b), diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n }\r\n\r\n return trackDiff(new Set(a), new Set(b), diffsAccumulator, pathString, diffTypes.deepEquals)\r\n }\r\n\r\n if(isDate(a) && isDate(b)){\r\n return a.getTime() === b.getTime() ?\r\n trackDiff(new Date(a), new Date(b), diffsAccumulator, pathString, diffTypes.date) :\r\n trackDiff(new Date(a), new Date(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 if(a.type !== b.type){\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n const reactElementPropsAreDeepEqual =\r\n accumulateDeepEqualDiffs(a.props, b.props, [], `${pathString}.props`)\r\n\r\n return reactElementPropsAreDeepEqual ?\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 keysLength = keys.length\r\n if(keysLength !== getKeys(b).length){\r\n return trackDiff({...a}, {...b}, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n for(let i = keysLength; i--; 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 const objectValuesDiffs = []\r\n let numberOfDeepEqualsObjectValues = 0\r\n for(let i = keysLength; i--; i > 0){\r\n const key = keys[i]\r\n const deepEquals = accumulateDeepEqualDiffs(a[key], b[key], objectValuesDiffs, `${pathString}.${key}`)\r\n if(deepEquals){\r\n numberOfDeepEqualsObjectValues++\r\n }\r\n }\r\n\r\n if(numberOfDeepEqualsObjectValues === keysLength){\r\n return trackDiff({...a}, {...b}, diffsAccumulator, pathString, diffTypes.deepEquals)\r\n }\r\n\r\n diffsAccumulator.push(...objectValuesDiffs)\r\n\r\n return 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, ownerDataMap){\r\n const prevOwnerData = ownerDataMap.get(prevProps)\r\n const nextOwnerData = ownerDataMap.get(nextProps)\r\n\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 ownerDifferences: prevOwnerData != null && nextOwnerData != null ? {\r\n propsDifferences: findObjectsDifferences(prevOwnerData.props, nextOwnerData.props),\r\n stateDifferences: findObjectsDifferences(prevOwnerData.state, nextOwnerData.state),\r\n hookDifferences: prevOwnerData.hooks.map(({hookName, result}, i) => ({\r\n hookName,\r\n differences: findObjectsDifferences(result, nextOwnerData.hooks[i].result, {shallow: false})\r\n }))\r\n } : false\r\n }\r\n}\r\n\r\nexport default function getUpdateInfo({Component, displayName, hookName, prevProps, prevState, prevHook, nextProps, nextState, nextHook, options, ownerDataMap}){\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 ownerDataMap,\r\n reason: getUpdateReason(prevProps, prevState, prevHook, nextProps, nextState, nextHook, ownerDataMap)\r\n }\r\n}\r\n","// copied from https://github.com/facebook/react/blob/master/packages/react-reconciler/src/ReactTypeOfMode.js\r\nimport {REACT_FORWARD_REF_TYPE, REACT_MEMO_TYPE} from './consts'\r\n\r\nconst StrictMode = 0b0001\r\n\r\n// based on \"findStrictRoot\" from https://github.com/facebook/react/blob/master/packages/react-reconciler/src/ReactStrictModeWarnings.js\r\n// notice: this is only used for class components. functional components doesn't re-rendered inside strict mode\r\nexport function checkIfInsideAStrictModeTree(reactComponentInstance){\r\n let reactInternalFiber = reactComponentInstance && reactComponentInstance._reactInternalFiber\r\n while(reactInternalFiber){\r\n if(reactInternalFiber.mode & StrictMode){\r\n return true\r\n }\r\n reactInternalFiber = reactInternalFiber.return\r\n }\r\n return false\r\n}\r\n\r\nexport function isReactClassComponent(Component){\r\n return Component.prototype && !!Component.prototype.isReactComponent\r\n}\r\n\r\nexport function isMemoComponent(Component){\r\n return Component.$$typeof === REACT_MEMO_TYPE\r\n}\r\n\r\nexport function isForwardRefComponent(Component){\r\n return Component.$$typeof === REACT_FORWARD_REF_TYPE\r\n}\r\n","import {isMemoComponent} from './utils'\r\n\r\nfunction 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, React, isHookChange}){\r\n if(shouldExclude(displayName, options)){\r\n return false\r\n }\r\n\r\n if(Component.whyDidYouRender === false){\r\n return false\r\n }\r\n\r\n if(isHookChange && (\r\n Component.whyDidYouRender && Component.whyDidYouRender.trackHooks === false\r\n )){\r\n return false\r\n }\r\n\r\n return !!(\r\n Component.whyDidYouRender || (\r\n options.trackAllPureComponents && (\r\n (Component && Component.prototype instanceof React.PureComponent) ||\r\n isMemoComponent(Component)\r\n )\r\n ) ||\r\n shouldInclude(displayName, options)\r\n )\r\n}\r\n","import {defaults} from 'lodash'\r\n\r\nimport {checkIfInsideAStrictModeTree} from '../utils'\r\nimport getUpdateInfo from '../getUpdateInfo'\r\n\r\nexport default function patchClassComponent(ClassComponent, displayName, React, options, ownerDataMap){\r\n class WDYRPatchedClassComponent extends ClassComponent{\r\n constructor(props, context){\r\n super(props, context)\r\n\r\n this._WDYR = {\r\n renderNumber: 0\r\n }\r\n\r\n const origRender = super.render || this.render\r\n // this probably means render is an arrow function or this.render.bind(this) was called on the original class\r\n const renderIsABindedFunction = origRender !== ClassComponent.prototype.render\r\n if(renderIsABindedFunction){\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 this._WDYR.renderNumber++\r\n\r\n if(!('isStrictMode' in this._WDYR)){\r\n this._WDYR.isStrictMode = checkIfInsideAStrictModeTree(this)\r\n }\r\n\r\n // in strict mode- ignore every other render\r\n if(!(this._WDYR.isStrictMode && this._WDYR.renderNumber % 2 === 1)){\r\n if(this._WDYR.prevProps){\r\n const updateInfo = getUpdateInfo({\r\n Component: ClassComponent,\r\n displayName,\r\n prevProps: this._WDYR.prevProps,\r\n prevState: this._WDYR.prevState,\r\n nextProps: this.props,\r\n nextState: this.state,\r\n options,\r\n ownerDataMap\r\n })\r\n\r\n options.notifier(updateInfo)\r\n }\r\n\r\n this._WDYR.prevProps = this.props\r\n this._WDYR.prevState = this.state\r\n }\r\n\r\n return super.render ? super.render() : null\r\n }\r\n }\r\n\r\n try{\r\n WDYRPatchedClassComponent.displayName = displayName\r\n }catch(e){\r\n // not crucial if displayName couldn't be set\r\n }\r\n\r\n defaults(WDYRPatchedClassComponent, ClassComponent)\r\n\r\n return WDYRPatchedClassComponent\r\n}\r\n","import {defaults} from 'lodash'\r\n\r\nimport getUpdateInfo from '../getUpdateInfo'\r\n\r\nconst getFunctionalComponentFromStringComponent = (componentTypeStr, React) => props => (\r\n React.createElement(componentTypeStr, props)\r\n)\r\n\r\nexport default function patchFunctionalOrStrComponent(FunctionalOrStringComponent, isPure, displayName, React, options, ownerDataMap){\r\n const FunctionalComponent = typeof(FunctionalOrStringComponent) === 'string' ?\r\n getFunctionalComponentFromStringComponent(FunctionalOrStringComponent, React) :\r\n FunctionalOrStringComponent\r\n\r\n function WDYRFunctionalComponent(){\r\n const nextProps = arguments[0]\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 updateInfo = getUpdateInfo({\r\n Component: FunctionalComponent,\r\n displayName,\r\n prevProps,\r\n nextProps,\r\n options,\r\n ownerDataMap\r\n })\r\n\r\n const notifiedByHooks = (\r\n !updateInfo.reason.propsDifferences || (\r\n (isPure && updateInfo.reason.propsDifferences.length === 0)\r\n )\r\n )\r\n\r\n if(!notifiedByHooks){\r\n options.notifier(updateInfo)\r\n }\r\n }\r\n\r\n return FunctionalComponent(...arguments)\r\n }\r\n\r\n try{\r\n WDYRFunctionalComponent.displayName = displayName\r\n }catch(e){\r\n // not crucial if displayName couldn't be set\r\n }\r\n\r\n WDYRFunctionalComponent.ComponentForHooksTracking = FunctionalComponent\r\n defaults(WDYRFunctionalComponent, FunctionalComponent)\r\n\r\n return WDYRFunctionalComponent\r\n}\r\n","import {get} 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\nimport patchClassComponent from './patches/patchClassComponent'\r\nimport patchFunctionalOrStrComponent from './patches/patchFunctionalOrStrComponent'\r\nimport patchMemoComponent from './patches/patchMemoComponent'\r\nimport patchForwardRefComponent from './patches/patchForwardRefComponent'\r\n\r\nimport {isForwardRefComponent, isMemoComponent, isReactClassComponent} from './utils'\r\n\r\nconst initialHookValue = Symbol('initial-hook-value')\r\nfunction trackHookChanges(hookName, {path: hookPath}, hookResult, React, options, ownerDataMap, hooksRef){\r\n const nextHook = hookPath ? get(hookResult, hookPath) : hookResult\r\n hooksRef.current.push({hookName, result: nextHook})\r\n const ComponentHookDispatchedFromInstance = (\r\n React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED &&\r\n React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner.current\r\n )\r\n\r\n const prevHookResultRef = React.useRef(initialHookValue)\r\n\r\n if(!ComponentHookDispatchedFromInstance){\r\n return hookResult\r\n }\r\n\r\n const Component = ComponentHookDispatchedFromInstance.type.ComponentForHooksTracking || ComponentHookDispatchedFromInstance.type\r\n const displayName = getDisplayName(Component)\r\n\r\n const isShouldTrack = shouldTrack({Component, displayName, options, React, isHookChange: true})\r\n if(!isShouldTrack){\r\n return hookResult\r\n }\r\n\r\n const prevHookResult = prevHookResultRef.current\r\n prevHookResultRef.current = hookResult\r\n\r\n if(prevHookResult !== initialHookValue){\r\n const notification = getUpdateInfo({\r\n Component: Component,\r\n displayName,\r\n hookName,\r\n prevHook: hookPath ? get(prevHookResult, hookPath) : prevHookResult,\r\n nextHook,\r\n options,\r\n ownerDataMap\r\n })\r\n\r\n if(notification.reason.hookDifferences){\r\n options.notifier(notification)\r\n }\r\n }\r\n\r\n return hookResult\r\n}\r\n\r\nfunction createPatchedComponent(componentsMap, Component, displayName, React, options, ownerDataMap){\r\n if(isMemoComponent(Component)){\r\n return patchMemoComponent(Component, displayName, React, options, ownerDataMap)\r\n }\r\n\r\n if(isForwardRefComponent(Component)){\r\n return patchForwardRefComponent(Component, displayName, React, options, ownerDataMap)\r\n }\r\n\r\n if(isReactClassComponent(Component)){\r\n return patchClassComponent(Component, displayName, React, options, ownerDataMap)\r\n }\r\n\r\n return patchFunctionalOrStrComponent(Component, false, displayName, React, options, ownerDataMap)\r\n}\r\n\r\nfunction getPatchedComponent(componentsMap, Component, displayName, React, options, ownerDataMap){\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, ownerDataMap)\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 const ownerDataMap = new WeakMap()\r\n const hooksRef = {current: []}\r\n\r\n // Intercept assignments to ReactCurrentOwner.current and reset hooksRef\r\n let currentOwner = null\r\n if(React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED){\r\n Object.defineProperty(React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner, 'current', {\r\n get(){\r\n return currentOwner\r\n },\r\n set(value){\r\n currentOwner = value\r\n hooksRef.current = []\r\n }\r\n })\r\n }\r\n\r\n React.createElement = function(componentNameOrComponent, ...rest){\r\n let isShouldTrack = null\r\n let displayName = null\r\n let WDYRPatchedComponent = null\r\n\r\n try{\r\n isShouldTrack = (\r\n (\r\n typeof componentNameOrComponent === 'function' ||\r\n isMemoComponent(componentNameOrComponent) ||\r\n isForwardRefComponent(componentNameOrComponent)\r\n ) &&\r\n shouldTrack({Component: componentNameOrComponent, displayName: getDisplayName(componentNameOrComponent), React, options})\r\n )\r\n\r\n if(isShouldTrack){\r\n displayName = (\r\n componentNameOrComponent &&\r\n componentNameOrComponent.whyDidYouRender &&\r\n componentNameOrComponent.whyDidYouRender.customName ||\r\n getDisplayName(componentNameOrComponent)\r\n )\r\n\r\n WDYRPatchedComponent = getPatchedComponent(componentsMap, componentNameOrComponent, displayName, React, options, ownerDataMap)\r\n\r\n const element = origCreateElement.apply(React, [WDYRPatchedComponent, ...rest])\r\n if(options.logOwnerReasons){\r\n const OwnerInstance = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner.current\r\n if(OwnerInstance != null){\r\n const Component = OwnerInstance.type.ComponentForHooksTracking || OwnerInstance.type\r\n const displayName = getDisplayName(Component)\r\n ownerDataMap.set(element.props, {\r\n Component,\r\n displayName,\r\n props: OwnerInstance.pendingProps,\r\n state: OwnerInstance.stateNode != null ? OwnerInstance.stateNode.state : null,\r\n hooks: hooksRef.current\r\n })\r\n }\r\n }\r\n\r\n return element\r\n }\r\n }\r\n catch(e){\r\n options.consoleLog('whyDidYouRender error. Please file a bug at https://github.com/welldone-software/why-did-you-render/issues.', {\r\n errorInfo: {\r\n error: e,\r\n componentNameOrComponent,\r\n rest,\r\n options,\r\n isShouldTrack,\r\n displayName,\r\n WDYRPatchedComponent\r\n }\r\n })\r\n }\r\n\r\n return origCreateElement.apply(React, [componentNameOrComponent, ...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 if(options.trackHooks){\r\n const nativeHooks = Object.entries(hooksConfig).map(([hookName, hookTrackingConfig]) => {\r\n return [React, hookName, hookTrackingConfig]\r\n })\r\n\r\n const hooksToTrack = [\r\n ...nativeHooks,\r\n ...options.trackExtraHooks\r\n ]\r\n\r\n hooksToTrack.forEach(([hookParent, hookName, hookTrackingConfig = {}]) => {\r\n const originalHook = hookParent[hookName]\r\n const newHookName = hookName[0].toUpperCase() + hookName.slice(1)\r\n const newHook = function(...args){\r\n const hookResult = originalHook.call(this, ...args)\r\n trackHookChanges(hookName, hookTrackingConfig, hookResult, React, options, ownerDataMap, hooksRef)\r\n return hookResult\r\n }\r\n Object.defineProperty(newHook, 'name', {value: newHookName, writable: false})\r\n Object.assign(newHook, {originalHook})\r\n hookParent[hookName] = newHook\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\r\n componentsMap = null\r\n\r\n const hooksToRevert = [\r\n ...Object.keys(hooksConfig).map(hookName => [React, hookName]),\r\n ...options.trackExtraHooks\r\n ]\r\n hooksToRevert.forEach(([hookParent, hookName]) => {\r\n if(hookParent[hookName].originalHook){\r\n hookParent[hookName] = hookParent[hookName].originalHook\r\n }\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","import {defaults} from 'lodash'\r\n\r\nimport getDisplayName from '../getDisplayName'\r\n\r\nimport {isForwardRefComponent, isMemoComponent, isReactClassComponent} from '../utils'\r\nimport patchClassComponent from './patchClassComponent'\r\nimport patchFunctionalOrStrComponent from './patchFunctionalOrStrComponent'\r\n\r\nexport default function patchMemoComponent(MemoComponent, displayName, React, options, ownerDataMap){\r\n const {type: InnerMemoComponent} = MemoComponent\r\n\r\n const isInnerMemoComponentAClassComponent = isReactClassComponent(InnerMemoComponent)\r\n const isInnerMemoComponentForwardRefs = isForwardRefComponent(InnerMemoComponent)\r\n const isInnerMemoComponentAnotherMemoComponent = isMemoComponent(InnerMemoComponent)\r\n\r\n const WrappedFunctionalComponent = isInnerMemoComponentForwardRefs ?\r\n InnerMemoComponent.render :\r\n InnerMemoComponent\r\n\r\n const PatchedInnerComponent = isInnerMemoComponentAClassComponent ?\r\n patchClassComponent(WrappedFunctionalComponent, displayName, React, options, ownerDataMap) :\r\n (isInnerMemoComponentAnotherMemoComponent ?\r\n patchMemoComponent(WrappedFunctionalComponent, displayName, React, options, ownerDataMap) :\r\n patchFunctionalOrStrComponent(WrappedFunctionalComponent, true, displayName, React, options, ownerDataMap)\r\n )\r\n\r\n try{\r\n PatchedInnerComponent.displayName = getDisplayName(WrappedFunctionalComponent)\r\n }catch(e){\r\n // not crucial if displayName couldn't be set\r\n }\r\n\r\n PatchedInnerComponent.ComponentForHooksTracking = MemoComponent\r\n defaults(PatchedInnerComponent, WrappedFunctionalComponent)\r\n\r\n const WDYRMemoizedFunctionalComponent = React.memo(\r\n isInnerMemoComponentForwardRefs ? React.forwardRef(PatchedInnerComponent) : PatchedInnerComponent,\r\n MemoComponent.compare\r\n )\r\n\r\n try{\r\n WDYRMemoizedFunctionalComponent.displayName = displayName\r\n }catch(e){\r\n // not crucial if displayName couldn't be set\r\n }\r\n\r\n defaults(WDYRMemoizedFunctionalComponent, MemoComponent)\r\n\r\n return WDYRMemoizedFunctionalComponent\r\n}\r\n","import {defaults} from 'lodash'\r\n\r\nimport getDisplayName from '../getDisplayName'\r\nimport {isMemoComponent} from '../utils'\r\nimport patchFunctionalOrStrComponent from './patchFunctionalOrStrComponent'\r\n\r\nexport default function patchForwardRefComponent(ForwardRefComponent, displayName, React, options, ownerDataMap){\r\n const {render: InnerForwardRefComponent} = ForwardRefComponent\r\n\r\n const isInnerComponentMemoized = isMemoComponent(InnerForwardRefComponent)\r\n const WrappedFunctionalComponent = isInnerComponentMemoized ?\r\n InnerForwardRefComponent.type : InnerForwardRefComponent\r\n\r\n const WDYRWrappedByReactForwardRefFunctionalComponent = (\r\n patchFunctionalOrStrComponent(WrappedFunctionalComponent, isInnerComponentMemoized, displayName, React, options, ownerDataMap)\r\n )\r\n\r\n WDYRWrappedByReactForwardRefFunctionalComponent.displayName = getDisplayName(WrappedFunctionalComponent)\r\n WDYRWrappedByReactForwardRefFunctionalComponent.ComponentForHooksTracking = WrappedFunctionalComponent\r\n defaults(WDYRWrappedByReactForwardRefFunctionalComponent, WrappedFunctionalComponent)\r\n\r\n const WDYRForwardRefFunctionalComponent = React.forwardRef(\r\n isInnerComponentMemoized ?\r\n React.memo(WDYRWrappedByReactForwardRefFunctionalComponent, InnerForwardRefComponent.compare) :\r\n WDYRWrappedByReactForwardRefFunctionalComponent\r\n )\r\n\r\n try{\r\n WDYRForwardRefFunctionalComponent.displayName = displayName\r\n }catch(e){\r\n // not crucial if displayName couldn't be set\r\n }\r\n\r\n defaults(WDYRForwardRefFunctionalComponent, ForwardRefComponent)\r\n\r\n return WDYRForwardRefFunctionalComponent\r\n}\r\n","import whyDidYouRender from './whyDidYouRender'\r\nimport defaultNotifier from './defaultNotifier'\r\n\r\nwhyDidYouRender.defaultNotifier = defaultNotifier\r\nexport default whyDidYouRender\r\n"],"names":["diffTypes","hasSymbol","Symbol","REACT_MEMO_TYPE","REACT_FORWARD_REF_TYPE","diffTypesDescriptions","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","ownerDataMap","logOnDifferentValues","whyDidYouRender","propsDifferences","some","diff","stateDifferences","hookDifferences","shouldLog","titleColor","ownerDifferences","prevOwnerData","get","nextOwnerData","props","state","i","hooks","result","createDefaultNotifier","hotReloadBufferMs","module","hot","addStatusHandler","status","setTimeout","emptyFn","getDisplayName","type","name","render","_isString","undefined","hasElementType","Element","REACT_ELEMENT_TYPE","isReactElement","object","$$typeof","trackDiff","a","b","diffsAccumulator","push","calculateDeepEqualDiffs","initialPathString","diffs","accumulateDeepEqualDiffs","_isArray","arrayLength","arrayItemDiffs","numberOfDeepEqualsItems","diffEquals","_isSet","size","Set","valA","has","_isDate","getTime","Date","_isRegExp","toString","reactElementPropsAreDeepEqual","_isFunction","_isPlainObject","keys","_keys","keysLength","_has","objectValuesDiffs","numberOfDeepEqualsObjectValues","key","deepEquals","error","message","match","number","console","warn","emptyObject","findObjectsDifferences","userPrevObj","userNextObj","shallow","prevObj","nextObj","keysOfBothObjects","Object","_reduce","deepEqualDiffs","getUpdateReason","map","getUpdateInfo","isReactClassComponent","prototype","isReactComponent","isMemoComponent","isForwardRefComponent","shouldTrack","React","isHookChange","exclude","regex","test","shouldExclude","trackHooks","trackAllPureComponents","PureComponent","include","shouldInclude","patchClassComponent","ClassComponent","WDYRPatchedClassComponent","constructor","context","_WDYR","renderNumber","origRender","super","this","apply","_this","isStrictMode","reactComponentInstance","reactInternalFiber","_reactInternalFiber","mode","checkIfInsideAStrictModeTree","notifier","e","patchFunctionalOrStrComponent","FunctionalOrStringComponent","isPure","FunctionalComponent","componentTypeStr","createElement","getFunctionalComponentFromStringComponent","WDYRFunctionalComponent","arguments","ref","useRef","current","notifiedByHooks","ComponentForHooksTracking","initialHookValue","trackHookChanges","hookResult","hooksRef","hookPath","path","_get","ComponentHookDispatchedFromInstance","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","ReactCurrentOwner","prevHookResultRef","prevHookResult","notification","createPatchedComponent","componentsMap","patchMemoComponent","MemoComponent","InnerMemoComponent","isInnerMemoComponentAClassComponent","isInnerMemoComponentForwardRefs","isInnerMemoComponentAnotherMemoComponent","WrappedFunctionalComponent","PatchedInnerComponent","WDYRMemoizedFunctionalComponent","memo","forwardRef","compare","ForwardRefComponent","InnerForwardRefComponent","isInnerComponentMemoized","WDYRWrappedByReactForwardRefFunctionalComponent","WDYRForwardRefFunctionalComponent","patchForwardRefComponent","getPatchedComponent","WDYRPatchedComponent","set","hooksConfig","useState","useReducer","useContext","useMemo","userOptions","group","groupEnd","collapseGroups","groupCollapsed","onlyLogs","log","logOwnerReasons","trackExtraHooks","normalizeOptions","origCreateElement","origCreateFactory","createFactory","WeakMap","currentOwner","defineProperty","value","componentNameOrComponent","isShouldTrack","rest","customName","element","OwnerInstance","pendingProps","stateNode","errorInfo","assign","factory","bind","nativeHooks","entries","hookTrackingConfig","hookParent","originalHook","newHookName","toUpperCase","slice","newHook","args","call","writable","__REVERT_WHY_DID_YOU_RENDER__"],"mappings":";;;;;;;g4FAAO,MAAMA,EACE,YADFA,EAEG,aAFHA,EAGH,OAHGA,EAIF,QAJEA,EAKK,eALLA,EAMC,WAIRC,EAA8B,mBAAXC,QAAyBA,WACrCC,EAAkBF,EAAYC,WAAW,cAAgB,MACzDE,EAAyBH,EAAYC,WAAW,qBAAuB,MCP9EG,UACHL,EAAsB,0BACtBA,EAAuB,kDACvBA,EAAiB,mDACjBA,EAAkB,0DAClBA,EAAyB,mLACzBA,EAAqB,8CAGpBM,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,SAAQ,gBAAEC,IAAAA,WAAYC,IAAAA,SAAUC,IAAAA,UAAWC,IAAAA,UACrDP,EAAQQ,yBACe,SAAhBX,kBAAkCF,wBAAwBE,oBAAmBO,wBACzEJ,EAAQS,mCAA2BT,EAAQU,mBAAkB,kBAExEV,EAAQE,qBACHZ,EAAsBe,6BAA2BV,EAjDnC,sBADL,6BAoDdK,EAAQE,+BAAqBE,GAAeE,GAAY,0BAAiBF,GAAeG,IACxFP,EAAQW,sBAGJb,IACNE,EAAQE,gBACJR,EAAcD,aACbG,kBAAqBC,0DACR,UAAhBA,EACE,4GACA,2HA9DY,yBAiEhBG,EAAQE,0BAAmBL,OAAgBE,EAAOa,KAAM,QAASb,EAAOc,qBAAehB,KAI5E,SAASiB,EAAgBC,OAC/BtB,EAAmIsB,EAAnItB,UAAWC,EAAwHqB,EAAxHrB,YAAaC,EAA2GoB,EAA3GpB,SAAUqB,EAAiGD,EAAjGC,UAAWC,EAAsFF,EAAtFE,UAAWC,EAA2EH,EAA3EG,SAAUC,EAAiEJ,EAAjEI,UAAWC,EAAsDL,EAAtDK,UAAWC,EAA2CN,EAA3CM,SAAUC,EAAiCP,EAAjCO,OAAQtB,EAAyBe,EAAzBf,QAASuB,EAAgBR,EAAhBQ,gBAxD5H,SAAmBD,EAAQ7B,EAAWO,UACjCT,MAIAS,EAAQwB,0BAIR/B,EAAUgC,kBAAmBhC,EAAUgC,gBAAgBD,yBAKxDF,EAAOI,kBACPJ,EAAOI,iBAAiBC,MAAK,SAAAC,UAAQA,EAAKvB,WAAapB,MAEvDqC,EAAOO,kBACPP,EAAOO,iBAAiBF,MAAK,SAAAC,UAAQA,EAAKvB,WAAapB,MAEvDqC,EAAOQ,iBACPR,EAAOQ,gBAAgBH,MAAK,SAAAC,UAAQA,EAAKvB,WAAapB,QAqCpD8C,CAAUT,EAAQ7B,EAAWO,IAIjCA,EAAQQ,yBAAkBd,oBAAyBM,EAAQgC,qBAEvDpC,EAAgB,yBAEjB0B,EAAOI,mBACRlC,EAAc,CACZC,UAAAA,EACAC,YAAAA,EACAE,cAAAA,EACAC,YAAa,QACbC,YAAawB,EAAOI,iBACpB3B,OAAQ,CAACa,KAAMI,EAAWH,KAAMM,GAChCnB,QAAAA,IAEFJ,EAAgB,eAGf0B,EAAOO,kBACRrC,EAAc,CACZC,UAAAA,EACAC,YAAAA,EACAE,cAAAA,EACAC,YAAa,QACbC,YAAawB,EAAOO,iBACpB9B,OAAQ,CAACa,KAAMK,EAAWJ,KAAMO,GAChCpB,QAAAA,IAIDsB,EAAOQ,iBACRtC,EAAc,CACZC,UAAAA,EACAC,YAAAA,EACAE,cAAAA,EACAC,YAAa,OACbC,YAAawB,EAAOQ,gBACpB/B,OAAQ,CAACa,KAAMM,EAAUL,KAAMQ,GAC/B1B,SAAAA,EACAK,QAAAA,IAKDsB,EAAOI,kBAAoBJ,EAAOW,iBAAiB,KAC9CC,EAAgBX,EAAaY,IAAInB,GACjCoB,EAAgBb,EAAaY,IAAIhB,GAEvCnB,EAAQQ,mCAA4B4B,EAAc1C,kBAC9CE,EAAgB,sBAEjB0B,EAAOW,iBAAiBP,mBACzBlC,EAAc,CACZC,UAAW2C,EAAc3C,UACzBC,YAAa0C,EAAc1C,YAC3BE,cAAAA,EACAC,YAAa,QACbC,YAAawB,EAAOW,iBAAiBP,iBACrC3B,OAAQ,CAACa,KAAMsB,EAAcG,MAAOxB,KAAMuB,EAAcC,OACxDrC,QAAAA,IAEFJ,EAAgB,eAGf0B,EAAOW,iBAAiBJ,kBACzBrC,EAAc,CACZC,UAAW2C,EAAc3C,UACzBC,YAAa0C,EAAc1C,YAC3BE,cAAAA,EACAC,YAAa,QACbC,YAAawB,EAAOW,iBAAiBJ,iBACrC9B,OAAQ,CAACa,KAAMsB,EAAcI,MAAOzB,KAAMuB,EAAcE,OACxDtC,QAAAA,IAIDsB,EAAOW,iBAAiBH,iBACzBR,EAAOW,iBAAiBH,gBAAgB3B,SAAQ,WAA0BoC,OAAxB5C,IAAAA,SAAUG,IAAAA,mBAC1DN,EAAc,CACZC,UAAW2C,EAAc3C,UACzBC,YAAa0C,EAAc1C,YAC3BE,cAAAA,EACAC,YAAa,OACbC,YAAAA,EACAC,OAAQ,CAACa,KAAMsB,EAAcM,MAAMD,GAAGE,OAAQ5B,KAAMuB,EAAcI,MAAMD,GAAGE,QAC3E9C,SAAAA,EACAK,QAAAA,OAINA,EAAQW,kBAGNW,EAAOI,kBAAqBJ,EAAOO,kBAAqBP,EAAOQ,iBACjE9B,EAAQE,gBACJR,EAAcD,GAChB,6DACA,yGA5Kc,yBAiLlBO,EAAQW,mBAGH,SAAS+B,EAAsBC,UACjCA,GACqB,oBAAZC,QAA2BA,OAAOC,KAAOD,OAAOC,IAAIC,kBAC5DF,OAAOC,IAAIC,kBAAiB,SAAAC,GACZ,SAAXA,IACDxD,GAAc,EACdyD,YAAW,WACTzD,GAAc,IACboD,OAMJ7B,ECjMT,IAAMmC,EAAU,aCDD,SAASC,EAAeC,UAEnCA,EAAKzD,aACLyD,EAAKC,MACJD,EAAKA,MAAQD,EAAeC,EAAKA,OACjCA,EAAKE,QAAUH,EAAeC,EAAKE,UACnCC,EAASH,GAAQA,OAAOI,GCL7B,IAAMC,EAAoC,oBAAZC,QAIxBC,EAD8B,mBAAXvE,QAAyBA,WACXA,WAAW,iBAAmB,MAC/DwE,EAAiB,SAAAC,UAAUA,EAAOC,WAAaH,GAGrD,SAASI,EAAUC,EAAGC,EAAGC,EAAkB7D,EAAYC,UACrD4D,EAAiBC,KAAK,CACpB7D,SAAAA,EACAD,WAAAA,EACAE,UAAWyD,EACXxD,UAAWyD,IAEN3D,IAAapB,EAwHP,SAASkF,EAAwBJ,EAAGC,EAAGI,WAE5CC,EAAQ,UAvHlB,SAASC,EAAyBP,EAAGC,EAAGC,OAAkB7D,yDAAa,MAClE2D,IAAMC,SACA,MAGLD,IAAMC,SACDF,EAAUC,EAAGC,EAAGC,EAAkB7D,EAAYnB,MAGpDsF,EAAQR,IAAMQ,EAAQP,GAAG,KACpBQ,EAAcT,EAAE9D,UACnBuE,IAAgBR,EAAE/D,cACZ6D,IAAcC,KAAQC,GAAIC,EAAkB7D,EAAYnB,WAG3DwF,EAAiB,GACnBC,EAA0B,EACtBnC,EAAIiC,EAAajC,IAAKA,EAAI,EAAE,KAC5BoC,EAAaL,EAAyBP,EAAExB,GAAIyB,EAAEzB,GAAIkC,YAAmBrE,cAAcmC,QACtFoC,GACDD,WAIDA,IAA4BF,EACtBV,IAAcC,KAAQC,GAAIC,EAAkB7D,EAAYnB,IAGjEgF,EAAiBC,WAAjBD,EAAyBQ,GAElBX,IAAcC,KAAQC,GAAIC,EAAkB7D,EAAYnB,OAG9D2F,EAAMb,IAAMa,EAAMZ,GAAG,IACnBD,EAAEc,OAASb,EAAEa,YACPf,EAAU,IAAIgB,IAAIf,GAAI,IAAIe,IAAId,GAAIC,EAAkB7D,EAAYnB,aAGvD8E,kCAAE,KAAVgB,cACJf,EAAEgB,IAAID,UACDjB,EAAU,IAAIgB,IAAIf,GAAI,IAAIe,IAAId,GAAIC,EAAkB7D,EAAYnB,yCAIpE6E,EAAU,IAAIgB,IAAIf,GAAI,IAAIe,IAAId,GAAIC,EAAkB7D,EAAYnB,MAGtEgG,EAAOlB,IAAMkB,EAAOjB,UACdD,EAAEmB,YAAclB,EAAEkB,UACvBpB,EAAU,IAAIqB,KAAKpB,GAAI,IAAIoB,KAAKnB,GAAIC,EAAkB7D,EAAYnB,GAClE6E,EAAU,IAAIqB,KAAKpB,GAAI,IAAIoB,KAAKnB,GAAIC,EAAkB7D,EAAYnB,MAGnEmG,EAASrB,IAAMqB,EAASpB,UAClBD,EAAEsB,aAAerB,EAAEqB,WACxBvB,EAAUC,EAAGC,EAAGC,EAAkB7D,EAAYnB,GAC9C6E,EAAUC,EAAGC,EAAGC,EAAkB7D,EAAYnB,MAG/CuE,GAAkBO,aAAaN,SAAWO,aAAaP,eACjDK,EAAUC,EAAGC,EAAGC,EAAkB7D,EAAYnB,MAGpD0E,EAAeI,IAAMJ,EAAeK,GAAG,IACrCD,EAAEZ,OAASa,EAAEb,YACPW,EAAUC,EAAGC,EAAGC,EAAkB7D,EAAYnB,OAGjDqG,EACJhB,EAAyBP,EAAE1B,MAAO2B,EAAE3B,MAAO,aAAOjC,oBAGlD0D,EAAUC,EAAGC,EAAGC,EAAkB7D,EAD7BkF,EACyCrG,EACAA,MAG/CsG,EAAWxB,IAAMwB,EAAWvB,UACtBD,EAAEX,OAASY,EAAEZ,KAClBU,EAAUC,EAAGC,EAAGC,EAAkB7D,EAAYnB,GAC9C6E,EAAUC,EAAGC,EAAGC,EAAkB7D,EAAYnB,MAG/CuG,EAAczB,IAAMyB,EAAcxB,GAAG,KAChCyB,EAAOC,EAAQ3B,GACf4B,EAAaF,EAAKxF,UACrB0F,IAAeD,EAAQ1B,GAAG/D,cACpB6D,OAAcC,QAAQC,GAAIC,EAAkB7D,EAAYnB,OAG7D,IAAIsD,EAAIoD,EAAYpD,IAAKA,EAAI,MAC3BqD,EAAI5B,EAAGyB,EAAKlD,WACPuB,OAAcC,QAAQC,GAAIC,EAAkB7D,EAAYnB,WAI7D4G,EAAoB,GACtBC,EAAiC,EAC7BvD,EAAIoD,EAAYpD,IAAKA,EAAI,EAAE,KAC3BwD,EAAMN,EAAKlD,GACXyD,EAAa1B,EAAyBP,EAAEgC,GAAM/B,EAAE+B,GAAMF,YAAsBzF,cAAc2F,IAC7FC,GACDF,WAIDA,IAAmCH,EAC7B7B,OAAcC,QAAQC,GAAIC,EAAkB7D,EAAYnB,IAGjEgF,EAAiBC,WAAjBD,EAAyB4B,GAElB/B,OAAcC,QAAQC,GAAIC,EAAkB7D,EAAYnB,WAG1D6E,EAAUC,EAAGC,EAAGC,EAAkB7D,EAAYnB,GAMnDqF,CAAyBP,EAAGC,EAAGK,EAAOD,GAC/BC,EACR,MAAM4B,MACDA,EAAMC,SAAWD,EAAMC,QAAQC,MAAM,sBAA2C,aAAlBF,EAAMG,cAOtEC,QAAQC,KAAK,4EAA8EL,EAAM7C,KAAM6C,EAAMC,UACtG,QAEHD,GCvJV,IAAMM,EAAc,GAEL,SAASC,EAAuBC,EAAaC,gEAAgC,OAAlBC,QAAAA,mBACrEF,IAAgBC,SACV,MAGLC,SACKxC,EAAwBsC,EAAaC,OAGxCE,EAAUH,GAAeF,EACzBM,EAAUH,GAAeH,EAEzBO,EAAoBC,OAAOtB,YAASmB,GAAYC,WAE/CG,EAAOF,GAAmB,SAACrE,EAAQsD,OAClCkB,EAAiB9C,EAAwByC,EAAQb,GAAMc,EAAQd,GAAMA,UACxEkB,IACDxE,cACKA,KACAwE,KAGAxE,IACN,IC1BL,SAASyE,EAAgBlG,EAAWC,EAAWC,EAAUC,EAAWC,EAAWC,EAAUE,OACjFW,EAAgBX,EAAaY,IAAInB,GACjCoB,EAAgBb,EAAaY,IAAIhB,SAEhC,CACLO,iBAAkB8E,EAAuBxF,EAAWG,GACpDU,iBAAkB2E,EAAuBvF,EAAWG,GACpDU,gBAAiB0E,EAAuBtF,EAAUG,EAAU,CAACsF,SAAS,IACtE1E,iBAAmC,MAAjBC,GAA0C,MAAjBE,GAAwB,CACjEV,iBAAkB8E,EAAuBtE,EAAcG,MAAOD,EAAcC,OAC5ER,iBAAkB2E,EAAuBtE,EAAcI,MAAOF,EAAcE,OAC5ER,gBAAiBI,EAAcM,MAAM2E,KAAI,WAAqB5E,SAAO,CACnE5C,WADyCA,SAEzCG,YAAa0G,IAFsC/D,OAEPL,EAAcI,MAAMD,GAAGE,OAAQ,CAACkE,SAAS,UAM9E,SAASS,SAAe3H,IAAAA,UAAWC,IAAAA,YAAaC,IAAAA,SAAUqB,IAAAA,UAAWC,IAAAA,UAAWC,IAAAA,SAAUC,IAAAA,UAAWC,IAAAA,UAAWC,IAAAA,SAAUrB,IAAAA,QAASuB,IAAAA,mBACzI,CACL9B,UAAAA,EACAC,YAAAA,EACAC,SAAAA,EACAqB,UAAAA,EACAC,UAAAA,EACAC,SAAAA,EACAC,UAAAA,EACAC,UAAAA,EACAC,SAAAA,EACArB,QAAAA,EACAuB,aAAAA,EACAD,OAAQ4F,EAAgBlG,EAAWC,EAAWC,EAAUC,EAAWC,EAAWC,EAAUE,IChBrF,SAAS8F,EAAsB5H,UAC7BA,EAAU6H,aAAe7H,EAAU6H,UAAUC,iBAG/C,SAASC,EAAgB/H,UACvBA,EAAUoE,WAAazE,EAGzB,SAASqI,EAAsBhI,UAC7BA,EAAUoE,WAAaxE,ECTjB,SAASqI,SAAajI,IAAAA,UAAWC,IAAAA,YAAaM,IAAAA,QAAS2H,IAAAA,MAAOC,IAAAA,oBAR7E,SAAuBlI,EAAaM,UAEhCA,EAAQ6H,SACR7H,EAAQ6H,QAAQ5H,OAAS,GACzBD,EAAQ6H,QAAQlG,MAAK,SAAAmG,UAASA,EAAMC,KAAKrI,MAKxCsI,CAActI,EAAaM,MAIG,IAA9BP,EAAUgC,oBAIVmG,IACDnI,EAAUgC,kBAA4D,IAAzChC,EAAUgC,gBAAgBwG,gBAMvDxI,EAAUgC,iBACRzB,EAAQkI,yBACLzI,GAAaA,EAAU6H,qBAAqBK,EAAMQ,eACnDX,EAAgB/H,KAnCxB,SAAuBC,EAAaM,UAEhCA,EAAQoI,SACRpI,EAAQoI,QAAQnI,OAAS,GACzBD,EAAQoI,QAAQzG,MAAK,SAAAmG,UAASA,EAAMC,KAAKrI,MAkCzC2I,CAAc3I,EAAaM,MCnChB,SAASsI,EAAoBC,EAAgB7I,EAAaiI,EAAO3H,EAASuB,SACjFiH,UAAkCD,EACtCE,YAAYpG,EAAOqG,eACXrG,EAAOqG,eAERC,MAAQ,CACXC,aAAc,OAGVC,EAAaC,MAAMzF,QAAU0F,KAAK1F,OAERwF,IAAeN,EAAejB,UAAUjE,cAEjEA,OAAS,kBACZmF,EAA0BlB,UAAUjE,OAAO2F,MAAMC,GAC1CJ,MAIbxF,iBACOsF,MAAMC,eAEN,iBAAkBG,KAAKJ,aACrBA,MAAMO,aFrBZ,SAAsCC,WACvCC,EAAqBD,GAA0BA,EAAuBE,oBACpED,GAAmB,IANR,EAOZA,EAAmBE,YACb,EAETF,EAAqBA,gBAEhB,EEayBG,CAA6BR,QAIpDA,KAAKJ,MAAMO,cAAgBH,KAAKJ,MAAMC,aAAe,GAAM,EAAG,IAC9DG,KAAKJ,MAAM3H,UAAU,KAChBD,EAAaqG,EAAc,CAC/B3H,UAAW8I,EACX7I,YAAAA,EACAsB,UAAW+H,KAAKJ,MAAM3H,UACtBC,UAAW8H,KAAKJ,MAAM1H,UACtBE,UAAW4H,KAAK1G,MAChBjB,UAAW2H,KAAKzG,MAChBtC,QAAAA,EACAuB,aAAAA,IAGFvB,EAAQwJ,SAASzI,QAGd4H,MAAM3H,UAAY+H,KAAK1G,WACvBsG,MAAM1H,UAAY8H,KAAKzG,aAGvBwG,MAAMzF,OAASyF,MAAMzF,SAAW,UAKzCmF,EAA0B9I,YAAcA,EACzC,MAAM+J,aAIEjB,EAA2BD,GAE7BC,ECxDM,SAASkB,EAA8BC,EAA6BC,EAAQlK,EAAaiI,EAAO3H,EAASuB,OAChHsI,EAA8D,iBAAjCF,EALa,SAACG,EAAkBnC,UAAU,SAAAtF,UAC7EsF,EAAMoC,cAAcD,EAAkBzH,IAKpC2H,CAA0CL,EAA6BhC,GACvEgC,WAEOM,QACD9I,EAAY+I,UAAU,GACtBC,EAAMxC,EAAMyC,SAEZpJ,EAAYmJ,EAAIE,WACtBF,EAAIE,QAAUlJ,EAEXH,EAAU,KACLD,EAAaqG,EAAc,CAC/B3H,UAAWoK,EACXnK,YAAAA,EACAsB,UAAAA,EACAG,UAAAA,EACAnB,QAAAA,EACAuB,aAAAA,IAGI+I,GACHvJ,EAAWO,OAAOI,kBAChBkI,GAAwD,IAA9C7I,EAAWO,OAAOI,iBAAiBzB,OAI9CqK,GACFtK,EAAQwJ,SAASzI,UAId8I,eAAuBK,eAI9BD,EAAwBvK,YAAcA,EACvC,MAAM+J,WAIPQ,EAAwBM,0BAA4BV,IAC3CI,EAAyBJ,GAE3BI,ECvCT,IAAMO,EAAmBrL,OAAO,sBAChC,SAASsL,EAAiB9K,IAA4B+K,EAAY/C,EAAO3H,EAASuB,EAAcoJ,OAArDC,IAANC,KAC7BxJ,EAAWuJ,EAAWE,EAAIJ,EAAYE,GAAYF,EACxDC,EAASN,QAAQnG,KAAK,CAACvE,SAAAA,EAAU8C,OAAQpB,QACnC0J,EACJpD,EAAMqD,oDACNrD,EAAMqD,mDAAmDC,kBAAkBZ,QAGvEa,EAAoBvD,EAAMyC,OAAOI,OAEnCO,SACKL,MAGHjL,EAAYsL,EAAoC5H,KAAKoH,2BAA6BQ,EAAoC5H,KACtHzD,EAAcwD,EAAezD,OAEbiI,EAAY,CAACjI,UAAAA,EAAWC,YAAAA,EAAaM,QAAAA,EAAS2H,MAAAA,EAAOC,cAAc,WAEhF8C,MAGHS,EAAiBD,EAAkBb,WACzCa,EAAkBb,QAAUK,EAEzBS,IAAmBX,EAAiB,KAC/BY,EAAehE,EAAc,CACjC3H,UAAWA,EACXC,YAAAA,EACAC,SAAAA,EACAuB,SAAU0J,EAAWE,EAAIK,EAAgBP,GAAYO,EACrD9J,SAAAA,EACArB,QAAAA,EACAuB,aAAAA,IAGC6J,EAAa9J,OAAOQ,iBACrB9B,EAAQwJ,SAAS4B,UAIdV,EAGT,SAASW,GAAuBC,EAAe7L,EAAWC,EAAaiI,EAAO3H,EAASuB,UAClFiG,EAAgB/H,GCpDN,SAAS8L,EAAmBC,EAAe9L,EAAaiI,EAAO3H,EAASuB,OACxEkK,EAAsBD,EAA5BrI,KAEDuI,EAAsCrE,EAAsBoE,GAC5DE,EAAkClE,EAAsBgE,GACxDG,EAA2CpE,EAAgBiE,GAE3DI,EAA6BF,EACjCF,EAAmBpI,OACnBoI,EAEIK,EAAwBJ,EAC5BpD,EAAoBuD,EAA4BnM,EAAaiI,EAAO3H,EAASuB,GAC5EqK,EACCL,EAAmBM,EAA4BnM,EAAaiI,EAAO3H,EAASuB,GAC5EmI,EAA8BmC,GAA4B,EAAMnM,EAAaiI,EAAO3H,EAASuB,OAI/FuK,EAAsBpM,YAAcwD,EAAe2I,GACpD,MAAMpC,IAIPqC,EAAsBvB,0BAA4BiB,IACzCM,EAAuBD,OAE1BE,EAAkCpE,EAAMqE,KAC5CL,EAAkChE,EAAMsE,WAAWH,GAAyBA,EAC5EN,EAAcU,aAIdH,EAAgCrM,YAAcA,EAC/C,MAAM+J,aAIEsC,EAAiCP,GAEnCO,EDaER,CAAmB9L,EAAWC,EAAaiI,EAAO3H,EAASuB,GAGjEkG,EAAsBhI,GE1DZ,SAAkC0M,EAAqBzM,EAAaiI,EAAO3H,EAASuB,OAClF6K,EAA4BD,EAApC9I,OAEDgJ,EAA2B7E,EAAgB4E,GAC3CP,EAA6BQ,EACjCD,EAAyBjJ,KAAOiJ,EAE5BE,EACJ5C,EAA8BmC,EAA4BQ,EAA0B3M,EAAaiI,EAAO3H,EAASuB,GAGnH+K,EAAgD5M,YAAcwD,EAAe2I,GAC7ES,EAAgD/B,0BAA4BsB,IACnES,EAAiDT,OAEpDU,EAAoC5E,EAAMsE,WAC9CI,EACE1E,EAAMqE,KAAKM,EAAiDF,EAAyBF,SACrFI,OAIFC,EAAkC7M,YAAcA,EACjD,MAAM+J,aAIE8C,EAAmCJ,GAErCI,EF8BEC,CAAyB/M,EAAWC,EAAaiI,EAAO3H,EAASuB,GAGvE8F,EAAsB5H,GAChB6I,EAAoB7I,EAAWC,EAAaiI,EAAO3H,EAASuB,GAG9DmI,EAA8BjK,GAAW,EAAOC,EAAaiI,EAAO3H,EAASuB,GAGtF,SAASkL,GAAoBnB,EAAe7L,EAAWC,EAAaiI,EAAO3H,EAASuB,MAC/E+J,EAActG,IAAIvF,UACZ6L,EAAcnJ,IAAI1C,OAGrBiN,EAAuBrB,GAAuBC,EAAe7L,EAAWC,EAAaiI,EAAO3H,EAASuB,UAE3G+J,EAAcqB,IAAIlN,EAAWiN,GACtBA,EAGF,IAAME,GAAc,CACzBC,SAAU,CAAChC,KAAM,KACjBiC,WAAY,CAACjC,KAAM,KACnBkC,YAAY,EACZC,SAAS,GAGI,SAASvL,GAAgBkG,EAAOsF,OACvCjN,ETzFO,eAA0BiN,yDAAc,GACjDzM,EAAe6F,QAAQ6G,MACvBvM,EAAkB0F,QAAQ8G,SAE3BF,EAAYG,eACb5M,EAAe6F,QAAQgH,eAEjBJ,EAAYK,WAClB9M,EAAe6F,QAAQkH,IACvB5M,EAAkBsC,OAGduG,EAAWyD,EAAYzD,UAC3B9G,EACG,sBAAuBuK,EAAeA,EAAYtK,kBAAoB,eAKzEyF,QAAS,KACTP,QAAS,KACT2B,SAAAA,EACA8D,UAAU,EACVpN,WAAYmG,QAAQkH,IACpB/M,aAAAA,EACAG,gBAAAA,EACAa,sBAAsB,EACtBgM,iBAAiB,EACjBvF,YAAY,EACZjG,WAAY,OACZvB,cAAe,OACfC,cAAe,MACf+M,gBAAiB,GACjBvF,wBAAwB,GACrB+E,GSuDWS,CAAiBT,GAE3BU,EAAoBhG,EAAMoC,cAC1B6D,EAAoBjG,EAAMkG,cAE5BvC,EAAgB,IAAIwC,QAClBvM,EAAe,IAAIuM,QACnBnD,EAAW,CAACN,QAAS,IAGvB0D,EAAe,QAChBpG,EAAMqD,oDACPjE,OAAOiH,eAAerG,EAAMqD,mDAAmDC,kBAAmB,UAAW,CAC3G9I,sBACS4L,GAETpB,aAAIsB,GACFF,EAAeE,EACftD,EAASN,QAAU,MAKzB1C,EAAMoC,cAAgB,SAASmE,WACzBC,EAAgB,KAChBzO,EAAc,KACdgN,EAAuB,wBAH+B0B,mCAAAA,2BAMxDD,GAEwC,mBAA7BD,GACP1G,EAAgB0G,IAChBzG,EAAsByG,KAExBxG,EAAY,CAACjI,UAAWyO,EAA0BxO,YAAawD,EAAegL,GAA2BvG,MAAAA,EAAO3H,QAAAA,IAGjG,CACfN,EACEwO,GACAA,EAAyBzM,iBACzByM,EAAyBzM,gBAAgB4M,YACzCnL,EAAegL,GAGjBxB,EAAuBD,GAAoBnB,EAAe4C,EAA0BxO,EAAaiI,EAAO3H,EAASuB,OAE3G+M,EAAUX,EAAkB3E,MAAMrB,GAAQ+E,UAAyB0B,OACtEpO,EAAQwN,gBAAgB,KACnBe,EAAgB5G,EAAMqD,mDAAmDC,kBAAkBZ,WAC7E,MAAjBkE,EAAsB,KACjB9O,EAAY8O,EAAcpL,KAAKoH,2BAA6BgE,EAAcpL,KAC1EzD,EAAcwD,EAAezD,GACnC8B,EAAaoL,IAAI2B,EAAQjM,MAAO,CAC9B5C,UAAAA,EACAC,YAAAA,EACA2C,MAAOkM,EAAcC,aACrBlM,MAAkC,MAA3BiM,EAAcE,UAAoBF,EAAcE,UAAUnM,MAAQ,KACzEE,MAAOmI,EAASN,kBAKfiE,GAGX,MAAM7E,GACJzJ,EAAQE,WAAW,8GAA+G,CAChIwO,UAAW,CACTzI,MAAOwD,EACPyE,yBAAAA,EACAE,KAAAA,EACApO,QAAAA,EACAmO,cAAAA,EACAzO,YAAAA,EACAgN,qBAAAA,YAKCiB,EAAkB3E,MAAMrB,GAAQuG,UAA6BE,KAGtErH,OAAO4H,OAAOhH,EAAMoC,cAAe4D,GAEnChG,EAAMkG,cAAgB,SAAA1K,OACdyL,EAAUjH,EAAMoC,cAAc8E,KAAK,KAAM1L,UAC/CyL,EAAQzL,KAAOA,EACRyL,GAGT7H,OAAO4H,OAAOhH,EAAMkG,cAAeD,GAEhC5N,EAAQiI,WAAW,KACd6G,EAAc/H,OAAOgI,QAAQnC,IAAazF,KAAI,yBAAExH,OAAUqP,aACvD,CAACrH,EAAOhI,EAAUqP,kBAItBF,KACA9O,EAAQyN,kBAGAtN,SAAQ,yBAAE8O,OAAYtP,cAAUqP,aAAqB,KAC1DE,EAAeD,EAAWtP,GAC1BwP,EAAcxP,EAAS,GAAGyP,cAAgBzP,EAAS0P,MAAM,GACzDC,EAAU,sCAAYC,2BAAAA,sBACpB7E,EAAawE,EAAaM,WAAbN,GAAkBnG,aAASwG,WAC9C9E,EAAiB9K,EAAUqP,EAAoBtE,EAAY/C,EAAO3H,EAASuB,EAAcoJ,GAClFD,GAET3D,OAAOiH,eAAesB,EAAS,OAAQ,CAACrB,MAAOkB,EAAaM,UAAU,IACtE1I,OAAO4H,OAAOW,EAAS,CAACJ,aAAAA,IACxBD,EAAWtP,GAAY2P,YAI3B3H,EAAM+H,8BAAgC,WACpC3I,OAAO4H,OAAOhH,EAAO,CACnBoC,cAAe4D,EACfE,cAAeD,IAGjBtC,EAAgB,iBAGXvE,OAAOtB,KAAKmH,IAAazF,KAAI,SAAAxH,SAAY,CAACgI,EAAOhI,SACjDK,EAAQyN,kBAECtN,SAAQ,yBAAE8O,OAAYtP,OAC/BsP,EAAWtP,GAAUuP,eACtBD,EAAWtP,GAAYsP,EAAWtP,GAAUuP,wBAIzCvH,EAAM+H,+BAGR/H,EGtOTlG,GAAgBX,gBAAkBA"} \ 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/utils.js","../../src/shouldTrack.js","../../src/patches/patchClassComponent.js","../../src/patches/patchFunctionalOrStrComponent.js","../../src/whyDidYouRender.js","../../src/patches/patchMemoComponent.js","../../src/patches/patchForwardRefComponent.js","../../src/index.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\r\n// copied from packages/shared/ReactSymbols.js in https://github.com/facebook/react\r\nconst hasSymbol = typeof Symbol === 'function' && Symbol.for\r\nexport const REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3\r\nexport const REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0\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 (remember that the syntax always produces a *NEW* immutable React element so a component that receives as props always re-renders.).',\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} result]` : `${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 its values are all equal.`,\r\n diffObjType === 'props' ?\r\n 'This could have been avoided by making the component pure, or by preventing its father from re-rendering.' :\r\n 'This usually means this component called setState when no changes in its 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, ownerDataMap} = 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\r\n if(reason.propsDifferences && reason.ownerDifferences){\r\n const prevOwnerData = ownerDataMap.get(prevProps)\r\n const nextOwnerData = ownerDataMap.get(nextProps)\r\n\r\n options.consoleGroup(`Rendered by ${nextOwnerData.displayName}`)\r\n let prefixMessage = 'Re-rendered because'\r\n\r\n if(reason.ownerDifferences.propsDifferences){\r\n logDifference({\r\n Component: nextOwnerData.Component,\r\n displayName: nextOwnerData.displayName,\r\n prefixMessage,\r\n diffObjType: 'props',\r\n differences: reason.ownerDifferences.propsDifferences,\r\n values: {prev: prevOwnerData.props, next: nextOwnerData.props},\r\n options\r\n })\r\n prefixMessage = 'And because'\r\n }\r\n\r\n if(reason.ownerDifferences.stateDifferences){\r\n logDifference({\r\n Component: nextOwnerData.Component,\r\n displayName: nextOwnerData.displayName,\r\n prefixMessage,\r\n diffObjType: 'state',\r\n differences: reason.ownerDifferences.stateDifferences,\r\n values: {prev: prevOwnerData.state, next: nextOwnerData.state},\r\n options\r\n })\r\n }\r\n\r\n if(reason.ownerDifferences.hookDifferences){\r\n reason.ownerDifferences.hookDifferences.forEach(({hookName, differences}, i) =>\r\n logDifference({\r\n Component: nextOwnerData.Component,\r\n displayName: nextOwnerData.displayName,\r\n prefixMessage,\r\n diffObjType: 'hook',\r\n differences,\r\n values: {prev: prevOwnerData.hooks[i].result, next: nextOwnerData.hooks[i].result},\r\n hookName,\r\n options\r\n })\r\n )\r\n }\r\n options.consoleGroupEnd()\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(typeof(module) !== 'undefined' && 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 ('hotReloadBufferMs' in userOptions) ? 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 logOwnerReasons: false,\r\n trackHooks: true,\r\n titleColor: '#058',\r\n diffNameColor: 'blue',\r\n diffPathColor: 'red',\r\n trackExtraHooks: [],\r\n trackAllPureComponents: false,\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 (type.render && getDisplayName(type.render)) ||\r\n (isString(type) ? type : undefined)\r\n )\r\n}\r\n","import {isArray, isPlainObject, isDate, isRegExp, isFunction, isSet, 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 arrayLength = a.length\r\n if(arrayLength !== b.length){\r\n return trackDiff([...a], [...b], diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n const arrayItemDiffs = []\r\n let numberOfDeepEqualsItems = 0\r\n for(let i = arrayLength; i--; i > 0){\r\n const diffEquals = accumulateDeepEqualDiffs(a[i], b[i], arrayItemDiffs, `${pathString}[${i}]`)\r\n if(diffEquals){\r\n numberOfDeepEqualsItems++\r\n }\r\n }\r\n\r\n if(numberOfDeepEqualsItems === arrayLength){\r\n return trackDiff([...a], [...b], diffsAccumulator, pathString, diffTypes.deepEquals)\r\n }\r\n\r\n diffsAccumulator.push(...arrayItemDiffs)\r\n\r\n return trackDiff([...a], [...b], diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isSet(a) && isSet(b)){\r\n if(a.size !== b.size){\r\n return trackDiff(new Set(a), new Set(b), diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n for(const valA of a){\r\n if(!b.has(valA)){\r\n return trackDiff(new Set(a), new Set(b), diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n }\r\n\r\n return trackDiff(new Set(a), new Set(b), diffsAccumulator, pathString, diffTypes.deepEquals)\r\n }\r\n\r\n if(isDate(a) && isDate(b)){\r\n return a.getTime() === b.getTime() ?\r\n trackDiff(new Date(a), new Date(b), diffsAccumulator, pathString, diffTypes.date) :\r\n trackDiff(new Date(a), new Date(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 if(a.type !== b.type){\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n const reactElementPropsAreDeepEqual =\r\n accumulateDeepEqualDiffs(a.props, b.props, [], `${pathString}.props`)\r\n\r\n return reactElementPropsAreDeepEqual ?\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 keysLength = keys.length\r\n if(keysLength !== getKeys(b).length){\r\n return trackDiff({...a}, {...b}, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n for(let i = keysLength; i--; 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 const objectValuesDiffs = []\r\n let numberOfDeepEqualsObjectValues = 0\r\n for(let i = keysLength; i--; i > 0){\r\n const key = keys[i]\r\n const deepEquals = accumulateDeepEqualDiffs(a[key], b[key], objectValuesDiffs, `${pathString}.${key}`)\r\n if(deepEquals){\r\n numberOfDeepEqualsObjectValues++\r\n }\r\n }\r\n\r\n if(numberOfDeepEqualsObjectValues === keysLength){\r\n return trackDiff({...a}, {...b}, diffsAccumulator, pathString, diffTypes.deepEquals)\r\n }\r\n\r\n diffsAccumulator.push(...objectValuesDiffs)\r\n\r\n return 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 getOwnerDifferences({prevOwnerData, nextOwnerData}){\r\n if(!prevOwnerData || !nextOwnerData){\r\n return false\r\n }\r\n\r\n const hookDifferences = prevOwnerData.hooks.map(({hookName, result}, i) => ({\r\n hookName,\r\n differences: findObjectsDifferences(result, nextOwnerData.hooks[i].result, {shallow: false})\r\n }))\r\n\r\n return {\r\n propsDifferences: findObjectsDifferences(prevOwnerData.props, nextOwnerData.props),\r\n stateDifferences: findObjectsDifferences(prevOwnerData.state, nextOwnerData.state),\r\n hookDifferences: hookDifferences.length > 0 ? hookDifferences : false\r\n }\r\n}\r\n\r\nfunction getUpdateReason(prevProps, prevState, prevHook, nextProps, nextState, nextHook, ownerDataMap){\r\n const prevOwnerData = ownerDataMap.get(prevProps)\r\n const nextOwnerData = ownerDataMap.get(nextProps)\r\n\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 ownerDifferences: getOwnerDifferences({prevOwnerData, nextOwnerData})\r\n }\r\n}\r\n\r\nexport default function getUpdateInfo({Component, displayName, hookName, prevProps, prevState, prevHook, nextProps, nextState, nextHook, options, ownerDataMap}){\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 ownerDataMap,\r\n reason: getUpdateReason(prevProps, prevState, prevHook, nextProps, nextState, nextHook, ownerDataMap)\r\n }\r\n}\r\n","// copied from https://github.com/facebook/react/blob/master/packages/react-reconciler/src/ReactTypeOfMode.js\r\nimport {REACT_FORWARD_REF_TYPE, REACT_MEMO_TYPE} from './consts'\r\n\r\nconst StrictMode = 0b0001\r\n\r\n// based on \"findStrictRoot\" from https://github.com/facebook/react/blob/master/packages/react-reconciler/src/ReactStrictModeWarnings.js\r\n// notice: this is only used for class components. functional components doesn't re-rendered inside strict mode\r\nexport function checkIfInsideAStrictModeTree(reactComponentInstance){\r\n let reactInternalFiber = reactComponentInstance && reactComponentInstance._reactInternalFiber\r\n while(reactInternalFiber){\r\n if(reactInternalFiber.mode & StrictMode){\r\n return true\r\n }\r\n reactInternalFiber = reactInternalFiber.return\r\n }\r\n return false\r\n}\r\n\r\nexport function isReactClassComponent(Component){\r\n return Component.prototype && !!Component.prototype.isReactComponent\r\n}\r\n\r\nexport function isMemoComponent(Component){\r\n return Component.$$typeof === REACT_MEMO_TYPE\r\n}\r\n\r\nexport function isForwardRefComponent(Component){\r\n return Component.$$typeof === REACT_FORWARD_REF_TYPE\r\n}\r\n","import {isMemoComponent} from './utils'\r\n\r\nfunction 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, React, isHookChange}){\r\n if(shouldExclude(displayName, options)){\r\n return false\r\n }\r\n\r\n if(Component.whyDidYouRender === false){\r\n return false\r\n }\r\n\r\n if(isHookChange && (\r\n Component.whyDidYouRender && Component.whyDidYouRender.trackHooks === false\r\n )){\r\n return false\r\n }\r\n\r\n return !!(\r\n Component.whyDidYouRender || (\r\n options.trackAllPureComponents && (\r\n (Component && Component.prototype instanceof React.PureComponent) ||\r\n isMemoComponent(Component)\r\n )\r\n ) ||\r\n shouldInclude(displayName, options)\r\n )\r\n}\r\n","import {defaults} from 'lodash'\r\n\r\nimport {checkIfInsideAStrictModeTree} from '../utils'\r\nimport getUpdateInfo from '../getUpdateInfo'\r\n\r\nexport default function patchClassComponent(ClassComponent, displayName, React, options, ownerDataMap){\r\n class WDYRPatchedClassComponent extends ClassComponent{\r\n constructor(props, context){\r\n super(props, context)\r\n\r\n this._WDYR = {\r\n renderNumber: 0\r\n }\r\n\r\n const origRender = super.render || this.render\r\n // this probably means render is an arrow function or this.render.bind(this) was called on the original class\r\n const renderIsABindedFunction = origRender !== ClassComponent.prototype.render\r\n if(renderIsABindedFunction){\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 this._WDYR.renderNumber++\r\n\r\n if(!('isStrictMode' in this._WDYR)){\r\n this._WDYR.isStrictMode = checkIfInsideAStrictModeTree(this)\r\n }\r\n\r\n // in strict mode- ignore every other render\r\n if(!(this._WDYR.isStrictMode && this._WDYR.renderNumber % 2 === 1)){\r\n if(this._WDYR.prevProps){\r\n const updateInfo = getUpdateInfo({\r\n Component: ClassComponent,\r\n displayName,\r\n prevProps: this._WDYR.prevProps,\r\n prevState: this._WDYR.prevState,\r\n nextProps: this.props,\r\n nextState: this.state,\r\n options,\r\n ownerDataMap\r\n })\r\n\r\n options.notifier(updateInfo)\r\n }\r\n\r\n this._WDYR.prevProps = this.props\r\n this._WDYR.prevState = this.state\r\n }\r\n\r\n return super.render ? super.render() : null\r\n }\r\n }\r\n\r\n try{\r\n WDYRPatchedClassComponent.displayName = displayName\r\n }catch(e){\r\n // not crucial if displayName couldn't be set\r\n }\r\n\r\n defaults(WDYRPatchedClassComponent, ClassComponent)\r\n\r\n return WDYRPatchedClassComponent\r\n}\r\n","import {defaults} from 'lodash'\r\n\r\nimport getUpdateInfo from '../getUpdateInfo'\r\n\r\nconst getFunctionalComponentFromStringComponent = (componentTypeStr, React) => props => (\r\n React.createElement(componentTypeStr, props)\r\n)\r\n\r\nexport default function patchFunctionalOrStrComponent(FunctionalOrStringComponent, isPure, displayName, React, options, ownerDataMap){\r\n const FunctionalComponent = typeof(FunctionalOrStringComponent) === 'string' ?\r\n getFunctionalComponentFromStringComponent(FunctionalOrStringComponent, React) :\r\n FunctionalOrStringComponent\r\n\r\n function WDYRFunctionalComponent(){\r\n const nextProps = arguments[0]\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 updateInfo = getUpdateInfo({\r\n Component: FunctionalComponent,\r\n displayName,\r\n prevProps,\r\n nextProps,\r\n options,\r\n ownerDataMap\r\n })\r\n\r\n const notifiedByHooks = (\r\n !updateInfo.reason.propsDifferences || (\r\n (isPure && updateInfo.reason.propsDifferences.length === 0)\r\n )\r\n )\r\n\r\n if(!notifiedByHooks){\r\n options.notifier(updateInfo)\r\n }\r\n }\r\n\r\n return FunctionalComponent(...arguments)\r\n }\r\n\r\n try{\r\n WDYRFunctionalComponent.displayName = displayName\r\n }catch(e){\r\n // not crucial if displayName couldn't be set\r\n }\r\n\r\n WDYRFunctionalComponent.ComponentForHooksTracking = FunctionalComponent\r\n defaults(WDYRFunctionalComponent, FunctionalComponent)\r\n\r\n return WDYRFunctionalComponent\r\n}\r\n","import {get} 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\nimport patchClassComponent from './patches/patchClassComponent'\r\nimport patchFunctionalOrStrComponent from './patches/patchFunctionalOrStrComponent'\r\nimport patchMemoComponent from './patches/patchMemoComponent'\r\nimport patchForwardRefComponent from './patches/patchForwardRefComponent'\r\n\r\nimport {isForwardRefComponent, isMemoComponent, isReactClassComponent} from './utils'\r\n\r\nconst initialHookValue = Symbol('initial-hook-value')\r\nfunction trackHookChanges(hookName, {path: hookPath}, hookResult, React, options, ownerDataMap, hooksRef){\r\n const nextHook = hookPath ? get(hookResult, hookPath) : hookResult\r\n hooksRef.current.push({hookName, result: nextHook})\r\n const ComponentHookDispatchedFromInstance = (\r\n React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED &&\r\n React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner.current\r\n )\r\n\r\n const prevHookResultRef = React.useRef(initialHookValue)\r\n\r\n if(!ComponentHookDispatchedFromInstance){\r\n return hookResult\r\n }\r\n\r\n const Component = ComponentHookDispatchedFromInstance.type.ComponentForHooksTracking || ComponentHookDispatchedFromInstance.type\r\n const displayName = getDisplayName(Component)\r\n\r\n const isShouldTrack = shouldTrack({Component, displayName, options, React, isHookChange: true})\r\n if(!isShouldTrack){\r\n return hookResult\r\n }\r\n\r\n const prevHookResult = prevHookResultRef.current\r\n prevHookResultRef.current = hookResult\r\n\r\n if(prevHookResult !== initialHookValue){\r\n const notification = getUpdateInfo({\r\n Component: Component,\r\n displayName,\r\n hookName,\r\n prevHook: hookPath ? get(prevHookResult, hookPath) : prevHookResult,\r\n nextHook,\r\n options,\r\n ownerDataMap\r\n })\r\n\r\n if(notification.reason.hookDifferences){\r\n options.notifier(notification)\r\n }\r\n }\r\n\r\n return hookResult\r\n}\r\n\r\nfunction createPatchedComponent(componentsMap, Component, displayName, React, options, ownerDataMap){\r\n if(isMemoComponent(Component)){\r\n return patchMemoComponent(Component, displayName, React, options, ownerDataMap)\r\n }\r\n\r\n if(isForwardRefComponent(Component)){\r\n return patchForwardRefComponent(Component, displayName, React, options, ownerDataMap)\r\n }\r\n\r\n if(isReactClassComponent(Component)){\r\n return patchClassComponent(Component, displayName, React, options, ownerDataMap)\r\n }\r\n\r\n return patchFunctionalOrStrComponent(Component, false, displayName, React, options, ownerDataMap)\r\n}\r\n\r\nfunction getPatchedComponent(componentsMap, Component, displayName, React, options, ownerDataMap){\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, ownerDataMap)\r\n\r\n componentsMap.set(Component, WDYRPatchedComponent)\r\n return WDYRPatchedComponent\r\n}\r\n\r\nfunction getIsSupportedComponentType(Comp){\r\n if(!Comp){\r\n return false\r\n }\r\n\r\n if(typeof Comp === 'function'){\r\n return true\r\n }\r\n\r\n if(isMemoComponent(Comp)){\r\n return getIsSupportedComponentType(Comp.type)\r\n }\r\n\r\n if(isForwardRefComponent(Comp)){\r\n return getIsSupportedComponentType(Comp.render)\r\n }\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 const ownerDataMap = new WeakMap()\r\n const hooksRef = {current: []}\r\n\r\n // Intercept assignments to ReactCurrentOwner.current and reset hooksRef\r\n let currentOwner = null\r\n if(React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED){\r\n Object.defineProperty(React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner, 'current', {\r\n get(){\r\n return currentOwner\r\n },\r\n set(value){\r\n currentOwner = value\r\n hooksRef.current = []\r\n }\r\n })\r\n }\r\n\r\n React.createElement = function(componentNameOrComponent, ...rest){\r\n let isShouldTrack = null\r\n let displayName = null\r\n let WDYRPatchedComponent = null\r\n\r\n try{\r\n isShouldTrack = (\r\n getIsSupportedComponentType(componentNameOrComponent) &&\r\n shouldTrack({Component: componentNameOrComponent, displayName: getDisplayName(componentNameOrComponent), React, options})\r\n )\r\n\r\n if(isShouldTrack){\r\n displayName = (\r\n componentNameOrComponent &&\r\n componentNameOrComponent.whyDidYouRender &&\r\n componentNameOrComponent.whyDidYouRender.customName ||\r\n getDisplayName(componentNameOrComponent)\r\n )\r\n\r\n WDYRPatchedComponent = getPatchedComponent(componentsMap, componentNameOrComponent, displayName, React, options, ownerDataMap)\r\n\r\n const element = origCreateElement.apply(React, [WDYRPatchedComponent, ...rest])\r\n if(options.logOwnerReasons){\r\n const OwnerInstance = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner.current\r\n if(OwnerInstance){\r\n const Component = OwnerInstance.type.ComponentForHooksTracking || OwnerInstance.type\r\n const displayName = getDisplayName(Component)\r\n ownerDataMap.set(element.props, {\r\n Component,\r\n displayName,\r\n props: OwnerInstance.pendingProps,\r\n state: OwnerInstance.stateNode != null ? OwnerInstance.stateNode.state : null,\r\n hooks: hooksRef.current\r\n })\r\n }\r\n }\r\n\r\n return element\r\n }\r\n }\r\n catch(e){\r\n options.consoleLog('whyDidYouRender error. Please file a bug at https://github.com/welldone-software/why-did-you-render/issues.', {\r\n errorInfo: {\r\n error: e,\r\n componentNameOrComponent,\r\n rest,\r\n options,\r\n isShouldTrack,\r\n displayName,\r\n WDYRPatchedComponent\r\n }\r\n })\r\n }\r\n\r\n return origCreateElement.apply(React, [componentNameOrComponent, ...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 if(options.trackHooks){\r\n const nativeHooks = Object.entries(hooksConfig).map(([hookName, hookTrackingConfig]) => {\r\n return [React, hookName, hookTrackingConfig]\r\n })\r\n\r\n const hooksToTrack = [\r\n ...nativeHooks,\r\n ...options.trackExtraHooks\r\n ]\r\n\r\n hooksToTrack.forEach(([hookParent, hookName, hookTrackingConfig = {}]) => {\r\n const originalHook = hookParent[hookName]\r\n const newHookName = hookName[0].toUpperCase() + hookName.slice(1)\r\n const newHook = function(...args){\r\n const hookResult = originalHook.call(this, ...args)\r\n trackHookChanges(hookName, hookTrackingConfig, hookResult, React, options, ownerDataMap, hooksRef)\r\n return hookResult\r\n }\r\n Object.defineProperty(newHook, 'name', {value: newHookName, writable: false})\r\n Object.assign(newHook, {originalHook})\r\n hookParent[hookName] = newHook\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\r\n componentsMap = null\r\n\r\n const hooksToRevert = [\r\n ...Object.keys(hooksConfig).map(hookName => [React, hookName]),\r\n ...options.trackExtraHooks\r\n ]\r\n hooksToRevert.forEach(([hookParent, hookName]) => {\r\n if(hookParent[hookName].originalHook){\r\n hookParent[hookName] = hookParent[hookName].originalHook\r\n }\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","import {defaults} from 'lodash'\r\n\r\nimport getDisplayName from '../getDisplayName'\r\n\r\nimport {isForwardRefComponent, isMemoComponent, isReactClassComponent} from '../utils'\r\nimport patchClassComponent from './patchClassComponent'\r\nimport patchFunctionalOrStrComponent from './patchFunctionalOrStrComponent'\r\n\r\nexport default function patchMemoComponent(MemoComponent, displayName, React, options, ownerDataMap){\r\n const {type: InnerMemoComponent} = MemoComponent\r\n\r\n const isInnerMemoComponentAClassComponent = isReactClassComponent(InnerMemoComponent)\r\n const isInnerMemoComponentForwardRefs = isForwardRefComponent(InnerMemoComponent)\r\n const isInnerMemoComponentAnotherMemoComponent = isMemoComponent(InnerMemoComponent)\r\n\r\n const WrappedFunctionalComponent = isInnerMemoComponentForwardRefs ?\r\n InnerMemoComponent.render :\r\n InnerMemoComponent\r\n\r\n const PatchedInnerComponent = isInnerMemoComponentAClassComponent ?\r\n patchClassComponent(WrappedFunctionalComponent, displayName, React, options, ownerDataMap) :\r\n (isInnerMemoComponentAnotherMemoComponent ?\r\n patchMemoComponent(WrappedFunctionalComponent, displayName, React, options, ownerDataMap) :\r\n patchFunctionalOrStrComponent(WrappedFunctionalComponent, true, displayName, React, options, ownerDataMap)\r\n )\r\n\r\n try{\r\n PatchedInnerComponent.displayName = getDisplayName(WrappedFunctionalComponent)\r\n }catch(e){\r\n // not crucial if displayName couldn't be set\r\n }\r\n\r\n PatchedInnerComponent.ComponentForHooksTracking = MemoComponent\r\n defaults(PatchedInnerComponent, WrappedFunctionalComponent)\r\n\r\n const WDYRMemoizedFunctionalComponent = React.memo(\r\n isInnerMemoComponentForwardRefs ? React.forwardRef(PatchedInnerComponent) : PatchedInnerComponent,\r\n MemoComponent.compare\r\n )\r\n\r\n try{\r\n WDYRMemoizedFunctionalComponent.displayName = displayName\r\n }catch(e){\r\n // not crucial if displayName couldn't be set\r\n }\r\n\r\n defaults(WDYRMemoizedFunctionalComponent, MemoComponent)\r\n\r\n return WDYRMemoizedFunctionalComponent\r\n}\r\n","import {defaults} from 'lodash'\r\n\r\nimport getDisplayName from '../getDisplayName'\r\nimport {isMemoComponent} from '../utils'\r\nimport patchFunctionalOrStrComponent from './patchFunctionalOrStrComponent'\r\n\r\nexport default function patchForwardRefComponent(ForwardRefComponent, displayName, React, options, ownerDataMap){\r\n const {render: InnerForwardRefComponent} = ForwardRefComponent\r\n\r\n const isInnerComponentMemoized = isMemoComponent(InnerForwardRefComponent)\r\n const WrappedFunctionalComponent = isInnerComponentMemoized ?\r\n InnerForwardRefComponent.type : InnerForwardRefComponent\r\n\r\n const WDYRWrappedByReactForwardRefFunctionalComponent = (\r\n patchFunctionalOrStrComponent(WrappedFunctionalComponent, isInnerComponentMemoized, displayName, React, options, ownerDataMap)\r\n )\r\n\r\n WDYRWrappedByReactForwardRefFunctionalComponent.displayName = getDisplayName(WrappedFunctionalComponent)\r\n WDYRWrappedByReactForwardRefFunctionalComponent.ComponentForHooksTracking = WrappedFunctionalComponent\r\n defaults(WDYRWrappedByReactForwardRefFunctionalComponent, WrappedFunctionalComponent)\r\n\r\n const WDYRForwardRefFunctionalComponent = React.forwardRef(\r\n isInnerComponentMemoized ?\r\n React.memo(WDYRWrappedByReactForwardRefFunctionalComponent, InnerForwardRefComponent.compare) :\r\n WDYRWrappedByReactForwardRefFunctionalComponent\r\n )\r\n\r\n try{\r\n WDYRForwardRefFunctionalComponent.displayName = displayName\r\n }catch(e){\r\n // not crucial if displayName couldn't be set\r\n }\r\n\r\n defaults(WDYRForwardRefFunctionalComponent, ForwardRefComponent)\r\n\r\n return WDYRForwardRefFunctionalComponent\r\n}\r\n","import whyDidYouRender from './whyDidYouRender'\r\nimport defaultNotifier from './defaultNotifier'\r\n\r\nwhyDidYouRender.defaultNotifier = defaultNotifier\r\nexport default whyDidYouRender\r\n"],"names":["diffTypes","hasSymbol","Symbol","REACT_MEMO_TYPE","REACT_FORWARD_REF_TYPE","diffTypesDescriptions","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","ownerDataMap","logOnDifferentValues","whyDidYouRender","propsDifferences","some","diff","stateDifferences","hookDifferences","shouldLog","titleColor","ownerDifferences","prevOwnerData","get","nextOwnerData","props","state","i","hooks","result","createDefaultNotifier","hotReloadBufferMs","module","hot","addStatusHandler","status","setTimeout","emptyFn","getDisplayName","type","name","render","_isString","undefined","hasElementType","Element","REACT_ELEMENT_TYPE","isReactElement","object","$$typeof","trackDiff","a","b","diffsAccumulator","push","calculateDeepEqualDiffs","initialPathString","diffs","accumulateDeepEqualDiffs","_isArray","arrayLength","arrayItemDiffs","numberOfDeepEqualsItems","diffEquals","_isSet","size","Set","valA","has","_isDate","getTime","Date","_isRegExp","toString","reactElementPropsAreDeepEqual","_isFunction","_isPlainObject","keys","_keys","keysLength","_has","objectValuesDiffs","numberOfDeepEqualsObjectValues","key","deepEquals","error","message","match","number","console","warn","emptyObject","findObjectsDifferences","userPrevObj","userNextObj","shallow","prevObj","nextObj","keysOfBothObjects","Object","_reduce","deepEqualDiffs","getOwnerDifferences","map","getUpdateReason","getUpdateInfo","isReactClassComponent","prototype","isReactComponent","isMemoComponent","isForwardRefComponent","shouldTrack","React","isHookChange","exclude","regex","test","shouldExclude","trackHooks","trackAllPureComponents","PureComponent","include","shouldInclude","patchClassComponent","ClassComponent","WDYRPatchedClassComponent","constructor","context","_WDYR","renderNumber","origRender","super","this","apply","_this","isStrictMode","reactComponentInstance","reactInternalFiber","_reactInternalFiber","mode","checkIfInsideAStrictModeTree","notifier","e","patchFunctionalOrStrComponent","FunctionalOrStringComponent","isPure","FunctionalComponent","componentTypeStr","createElement","getFunctionalComponentFromStringComponent","WDYRFunctionalComponent","arguments","ref","useRef","current","notifiedByHooks","ComponentForHooksTracking","initialHookValue","trackHookChanges","hookResult","hooksRef","hookPath","path","_get","ComponentHookDispatchedFromInstance","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","ReactCurrentOwner","prevHookResultRef","prevHookResult","notification","createPatchedComponent","componentsMap","patchMemoComponent","MemoComponent","InnerMemoComponent","isInnerMemoComponentAClassComponent","isInnerMemoComponentForwardRefs","isInnerMemoComponentAnotherMemoComponent","WrappedFunctionalComponent","PatchedInnerComponent","WDYRMemoizedFunctionalComponent","memo","forwardRef","compare","ForwardRefComponent","InnerForwardRefComponent","isInnerComponentMemoized","WDYRWrappedByReactForwardRefFunctionalComponent","WDYRForwardRefFunctionalComponent","patchForwardRefComponent","getPatchedComponent","WDYRPatchedComponent","set","getIsSupportedComponentType","Comp","hooksConfig","useState","useReducer","useContext","useMemo","userOptions","group","groupEnd","collapseGroups","groupCollapsed","onlyLogs","log","logOwnerReasons","trackExtraHooks","normalizeOptions","origCreateElement","origCreateFactory","createFactory","WeakMap","currentOwner","defineProperty","value","componentNameOrComponent","isShouldTrack","rest","customName","element","OwnerInstance","pendingProps","stateNode","errorInfo","assign","factory","bind","nativeHooks","entries","hookTrackingConfig","hookParent","originalHook","newHookName","toUpperCase","slice","newHook","args","call","writable","__REVERT_WHY_DID_YOU_RENDER__"],"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 fc2fc8d..0e0f570 100644 --- a/dist/no-classes-transpile/umd/whyDidYouRender.js +++ b/dist/no-classes-transpile/umd/whyDidYouRender.js @@ -1,8 +1,8 @@ /** - * @welldone-software/why-did-you-render 4.2.2 + * @welldone-software/why-did-you-render 4.2.3 * MIT Licensed * Generated by Vitali Zaidman (https://github.com/vzaidman) - * Generated at 2020-05-20 + * Generated at 2020-05-30 */ (function (global, factory) { @@ -132,9 +132,12 @@ throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } - function _createForOfIteratorHelper(o) { + function _createForOfIteratorHelper(o, allowArrayLike) { + var it; + if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { - if (Array.isArray(o) || (o = _unsupportedIterableToArray(o))) { + if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { + if (it) o = it; var i = 0; var F = function () {}; @@ -160,8 +163,7 @@ throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } - var it, - normalCompletion = true, + var normalCompletion = true, didErr = false, err; return { @@ -3963,6 +3965,31 @@ }, []); } + function getOwnerDifferences(_ref) { + var prevOwnerData = _ref.prevOwnerData, + nextOwnerData = _ref.nextOwnerData; + + if (!prevOwnerData || !nextOwnerData) { + return false; + } + + var hookDifferences = prevOwnerData.hooks.map(function (_ref2, i) { + var hookName = _ref2.hookName, + result = _ref2.result; + return { + hookName: hookName, + differences: findObjectsDifferences(result, nextOwnerData.hooks[i].result, { + shallow: false + }) + }; + }); + return { + propsDifferences: findObjectsDifferences(prevOwnerData.props, nextOwnerData.props), + stateDifferences: findObjectsDifferences(prevOwnerData.state, nextOwnerData.state), + hookDifferences: hookDifferences.length > 0 ? hookDifferences : false + }; + } + function getUpdateReason(prevProps, prevState, prevHook, nextProps, nextState, nextHook, ownerDataMap) { var prevOwnerData = ownerDataMap.get(prevProps); var nextOwnerData = ownerDataMap.get(nextProps); @@ -3972,35 +3999,25 @@ hookDifferences: findObjectsDifferences(prevHook, nextHook, { shallow: false }), - ownerDifferences: prevOwnerData != null && nextOwnerData != null ? { - propsDifferences: findObjectsDifferences(prevOwnerData.props, nextOwnerData.props), - stateDifferences: findObjectsDifferences(prevOwnerData.state, nextOwnerData.state), - hookDifferences: prevOwnerData.hooks.map(function (_ref, i) { - var hookName = _ref.hookName, - result = _ref.result; - return { - hookName: hookName, - differences: findObjectsDifferences(result, nextOwnerData.hooks[i].result, { - shallow: false - }) - }; - }) - } : false + ownerDifferences: getOwnerDifferences({ + prevOwnerData: prevOwnerData, + nextOwnerData: nextOwnerData + }) }; } - function getUpdateInfo(_ref2) { - var Component = _ref2.Component, - displayName = _ref2.displayName, - hookName = _ref2.hookName, - prevProps = _ref2.prevProps, - prevState = _ref2.prevState, - prevHook = _ref2.prevHook, - nextProps = _ref2.nextProps, - nextState = _ref2.nextState, - nextHook = _ref2.nextHook, - options = _ref2.options, - ownerDataMap = _ref2.ownerDataMap; + function getUpdateInfo(_ref3) { + var Component = _ref3.Component, + displayName = _ref3.displayName, + hookName = _ref3.hookName, + prevProps = _ref3.prevProps, + prevState = _ref3.prevState, + prevHook = _ref3.prevHook, + nextProps = _ref3.nextProps, + nextState = _ref3.nextState, + nextHook = _ref3.nextHook, + options = _ref3.options, + ownerDataMap = _ref3.ownerDataMap; return { Component: Component, displayName: displayName, @@ -4660,6 +4677,24 @@ return WDYRPatchedComponent; } + function getIsSupportedComponentType(Comp) { + if (!Comp) { + return false; + } + + if (typeof Comp === 'function') { + return true; + } + + if (isMemoComponent(Comp)) { + return getIsSupportedComponentType(Comp.type); + } + + if (isForwardRefComponent(Comp)) { + return getIsSupportedComponentType(Comp.render); + } + } + var hooksConfig = { useState: { path: '0' @@ -4704,7 +4739,7 @@ } try { - isShouldTrack = (typeof componentNameOrComponent === 'function' || isMemoComponent(componentNameOrComponent) || isForwardRefComponent(componentNameOrComponent)) && shouldTrack({ + isShouldTrack = getIsSupportedComponentType(componentNameOrComponent) && shouldTrack({ Component: componentNameOrComponent, displayName: getDisplayName(componentNameOrComponent), React: React, @@ -4719,7 +4754,7 @@ if (options.logOwnerReasons) { var OwnerInstance = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner.current; - if (OwnerInstance != null) { + if (OwnerInstance) { var Component = OwnerInstance.type.ComponentForHooksTracking || OwnerInstance.type; var _displayName = getDisplayName(Component); diff --git a/dist/no-classes-transpile/umd/whyDidYouRender.min.js b/dist/no-classes-transpile/umd/whyDidYouRender.min.js index 1798b79..2d7c2d2 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 4.2.2 + * @welldone-software/why-did-you-render 4.2.3 * MIT Licensed * Generated by Vitali Zaidman (https://github.com/vzaidman) - * Generated at 2020-05-20 + * Generated at 2020-05-30 */ -!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(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function r(r){for(var n=1;ne.length)&&(t=e.length);for(var r=0,n=new Array(t);r=e.length?{done:!0}:{done:!1,value:e[t++]}},e:function(e){throw e},f:r}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var n,o,i=!0,c=!1;return{s:function(){n=e[Symbol.iterator]()},n:function(){var e=n.next();return i=e.done,e},e:function(e){c=!0,o=e},f:function(){try{i||null==n.return||n.return()}finally{if(c)throw o}}}}var u=Array.isArray,f="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function s(e,t){return e(t={exports:{}},t.exports),t.exports}var l="object"==typeof f&&f&&f.Object===Object&&f,p="object"==typeof self&&self&&self.Object===Object&&self,v=l||p||Function("return this")(),h=v.Symbol,y=Object.prototype,d=y.hasOwnProperty,b=y.toString,m=h?h.toStringTag:void 0;var _=function(e){var t=d.call(e,m),r=e[m];try{e[m]=void 0;var n=!0}catch(e){}var o=b.call(e);return n&&(t?e[m]=r:delete e[m]),o},g=Object.prototype.toString;var j=function(e){return g.call(e)},w=h?h.toStringTag:void 0;var O=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":w&&w in Object(e)?_(e):j(e)};var D=function(e){return null!=e&&"object"==typeof e};var S=function(e){return"symbol"==typeof e||D(e)&&"[object Symbol]"==O(e)},k=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,E=/^\w*$/;var R=function(e,t){if(u(e))return!1;var r=typeof e;return!("number"!=r&&"symbol"!=r&&"boolean"!=r&&null!=e&&!S(e))||(E.test(e)||!k.test(e)||null!=t&&e in Object(t))};var N=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)};var x,C=function(e){if(!N(e))return!1;var t=O(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t},T=v["__core-js_shared__"],A=(x=/[^.]+$/.exec(T&&T.keys&&T.keys.IE_PROTO||""))?"Symbol(src)_1."+x:"";var P=function(e){return!!A&&A in e},M=Function.prototype.toString;var I=function(e){if(null!=e){try{return M.call(e)}catch(e){}try{return e+""}catch(e){}}return""},Y=/^\[object .+?Constructor\]$/,L=Function.prototype,H=Object.prototype,z=L.toString,W=H.hasOwnProperty,F=RegExp("^"+z.call(W).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");var U=function(e){return!(!N(e)||P(e))&&(C(e)?F:Y).test(I(e))};var $=function(e,t){return null==e?void 0:e[t]};var B=function(e,t){var r=$(e,t);return U(r)?r:void 0},V=B(Object,"create");var G=function(){this.__data__=V?V(null):{},this.size=0};var q=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t},J=Object.prototype.hasOwnProperty;var K=function(e){var t=this.__data__;if(V){var r=t[e];return"__lodash_hash_undefined__"===r?void 0:r}return J.call(t,e)?t[e]:void 0},Q=Object.prototype.hasOwnProperty;var X=function(e){var t=this.__data__;return V?void 0!==t[e]:Q.call(t,e)};var Z=function(e,t){var r=this.__data__;return this.size+=this.has(e)?0:1,r[e]=V&&void 0===t?"__lodash_hash_undefined__":t,this};function ee(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t-1};var fe=function(e,t){var r=this.__data__,n=oe(r,e);return n<0?(++this.size,r.push([e,t])):r[n][1]=t,this};function se(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t syntax always produces a *NEW* immutable React element so a component that receives as props always re-renders.)."),e(Me,Fe,"different functions with the same name."),Me),Ge=!1;function qe(t){var r=t.Component,n=t.displayName,o=t.hookName,a=t.prefixMessage,i=t.diffObjType,c=t.differences,u=t.values,f=t.options;c&&c.length>0?(f.consoleLog(e({},n,r),"".concat(a," of ").concat(i," changes:")),c.forEach((function(t){var r=t.pathString,n=t.diffType,a=t.prevValue,c=t.nextValue;f.consoleGroup("%c".concat("hook"===i?"[hook ".concat(o," result]"):"".concat(i,"."),"%c").concat(r,"%c"),"color:".concat(f.diffNameColor,";"),"color:".concat(f.diffPathColor,";"),"color:default;"),f.consoleLog("".concat(Ve[n]," (more info at ").concat(o?"http://bit.ly/wdyr3":"http://bit.ly/wdyr02",")")),f.consoleLog(e({},"prev ".concat(r),a),"!==",e({},"next ".concat(r),c)),f.consoleGroupEnd()}))):c&&(f.consoleLog(e({},n,r),"".concat(a," the ").concat(i," object itself changed but its values are all equal."),"props"===i?"This could have been avoided by making the component pure, or by preventing its father from re-rendering.":"This usually means this component called setState when no changes in its state actually occurred.","More info at ".concat("http://bit.ly/wdyr02")),f.consoleLog("prev ".concat(i,":"),u.prev," !== ",u.next,":next ".concat(i)))}function Je(t){var r=t.Component,n=t.displayName,o=t.hookName,a=t.prevProps,i=t.prevState,c=t.prevHook,u=t.nextProps,f=t.nextState,s=t.nextHook,l=t.reason,p=t.options,v=t.ownerDataMap;if(function(e,t,r){return!Ge&&(!!r.logOnDifferentValues||(!(!t.whyDidYouRender||!t.whyDidYouRender.logOnDifferentValues)||!(e.propsDifferences&&e.propsDifferences.some((function(e){return e.diffType===Ye}))||e.stateDifferences&&e.stateDifferences.some((function(e){return e.diffType===Ye}))||e.hookDifferences&&e.hookDifferences.some((function(e){return e.diffType===Ye})))))}(l,r,p)){p.consoleGroup("%c".concat(n),"color: ".concat(p.titleColor,";"));var h="Re-rendered because";if(l.propsDifferences&&(qe({Component:r,displayName:n,prefixMessage:h,diffObjType:"props",differences:l.propsDifferences,values:{prev:a,next:u},options:p}),h="And because"),l.stateDifferences&&qe({Component:r,displayName:n,prefixMessage:h,diffObjType:"state",differences:l.stateDifferences,values:{prev:i,next:f},options:p}),l.hookDifferences&&qe({Component:r,displayName:n,prefixMessage:h,diffObjType:"hook",differences:l.hookDifferences,values:{prev:c,next:s},hookName:o,options:p}),l.propsDifferences&&l.ownerDifferences){var y=v.get(a),d=v.get(u);p.consoleGroup("Rendered by ".concat(d.displayName));var b="Re-rendered because";l.ownerDifferences.propsDifferences&&(qe({Component:d.Component,displayName:d.displayName,prefixMessage:b,diffObjType:"props",differences:l.ownerDifferences.propsDifferences,values:{prev:y.props,next:d.props},options:p}),b="And because"),l.ownerDifferences.stateDifferences&&qe({Component:d.Component,displayName:d.displayName,prefixMessage:b,diffObjType:"state",differences:l.ownerDifferences.stateDifferences,values:{prev:y.state,next:d.state},options:p}),l.ownerDifferences.hookDifferences&&l.ownerDifferences.hookDifferences.forEach((function(e,t){var r=e.hookName,n=e.differences;return qe({Component:d.Component,displayName:d.displayName,prefixMessage:b,diffObjType:"hook",differences:n,values:{prev:y.hooks[t].result,next:d.hooks[t].result},hookName:r,options:p})})),p.consoleGroupEnd()}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("http://bit.ly/wdyr02")),p.consoleGroupEnd()}}function Ke(e){return e&&"undefined"!=typeof module&&module.hot&&module.hot.addStatusHandler&&module.hot.addStatusHandler((function(t){"idle"===t&&(Ge=!0,setTimeout((function(){Ge=!1}),e))})),Je}var Qe=function(){};var Xe=function(e){return"string"==typeof e||!u(e)&&D(e)&&"[object String]"==O(e)};function Ze(e){return e.displayName||e.name||e.type&&Ze(e.type)||e.render&&Ze(e.render)||(Xe(e)?e:void 0)}var et=function(e,t,r,n){var o=-1,a=null==e?0:e.length;for(n&&a&&(r=e[++o]);++o-1&&e%1==0&&e-1&&e%1==0&&e<=9007199254740991},vt={};vt["[object Float32Array]"]=vt["[object Float64Array]"]=vt["[object Int8Array]"]=vt["[object Int16Array]"]=vt["[object Int32Array]"]=vt["[object Uint8Array]"]=vt["[object Uint8ClampedArray]"]=vt["[object Uint16Array]"]=vt["[object Uint32Array]"]=!0,vt["[object Arguments]"]=vt["[object Array]"]=vt["[object ArrayBuffer]"]=vt["[object Boolean]"]=vt["[object DataView]"]=vt["[object Date]"]=vt["[object Error]"]=vt["[object Function]"]=vt["[object Map]"]=vt["[object Number]"]=vt["[object Object]"]=vt["[object RegExp]"]=vt["[object Set]"]=vt["[object String]"]=vt["[object WeakMap]"]=!1;var ht=function(e){return D(e)&&pt(e.length)&&!!vt[O(e)]};var yt=function(e){return function(t){return e(t)}},dt=s((function(e,t){var r=t&&!t.nodeType&&t,n=r&&e&&!e.nodeType&&e,o=n&&n.exports===r&&l.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})),bt=dt&&dt.isTypedArray,mt=bt?yt(bt):ht,_t=Object.prototype.hasOwnProperty;var gt=function(e,t){var r=u(e),n=!r&&ct(e),o=!r&&!n&&ft(e),a=!r&&!n&&!o&&mt(e),i=r||n||o||a,c=i?rt(e.length,String):[],f=c.length;for(var s in e)!t&&!_t.call(e,s)||i&&("length"==s||o&&("offset"==s||"parent"==s)||a&&("buffer"==s||"byteLength"==s||"byteOffset"==s)||lt(s,f))||c.push(s);return c},jt=Object.prototype;var wt=function(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||jt)};var Ot=function(e,t){return function(r){return e(t(r))}},Dt=Ot(Object.keys,Object),St=Object.prototype.hasOwnProperty;var kt=function(e){if(!wt(e))return Dt(e);var t=[];for(var r in Object(e))St.call(e,r)&&"constructor"!=r&&t.push(r);return t};var Et=function(e){return null!=e&&pt(e.length)&&!C(e)};var Rt=function(e){return Et(e)?gt(e):kt(e)};var Nt=function(e,t){return function(r,n){if(null==r)return r;if(!Et(r))return e(r,n);for(var o=r.length,a=t?o:-1,i=Object(r);(t?a--:++ac))return!1;var f=a.get(e);if(f&&a.get(t))return f==t;var s=-1,l=!0,p=2&r?new zt:void 0;for(a.set(e,t),a.set(t,e);++s3&&void 0!==arguments[3]?arguments[3]:"";if(t===n)return!0;if(!t||!n)return on(t,n,a,i,Ye);if(u(t)&&u(n)){var f=t.length;if(f!==n.length)return on(o(t),o(n),a,i,Ye);for(var s=[],l=0,p=f;p--;p>0){var v=e(t[p],n[p],s,"".concat(i,"[").concat(p,"]"));v&&l++}return l===f?on(o(t),o(n),a,i,Le):(a.push.apply(a,s),on(o(t),o(n),a,i,Ye))}if(Wr(t)&&Wr(n)){if(t.size!==n.size)return on(new Set(t),new Set(n),a,i,Ye);var h,y=c(t);try{for(y.s();!(h=y.n()).done;){var d=h.value;if(!n.has(d))return on(new Set(t),new Set(n),a,i,Ye)}}catch(e){y.e(e)}finally{y.f()}return on(new Set(t),new Set(n),a,i,Le)}if(Gr(t)&&Gr(n))return t.getTime()===n.getTime()?on(new Date(t),new Date(n),a,i,He):on(new Date(t),new Date(n),a,i,Ye);if($r(t)&&$r(n))return t.toString()===n.toString()?on(t,n,a,i,ze):on(t,n,a,i,Ye);if(tn&&t instanceof Element&&n instanceof Element)return on(t,n,a,i,Ye);if(nn(t)&&nn(n)){if(t.type!==n.type)return on(t,n,a,i,Ye);var b=e(t.props,n.props,[],"".concat(i,".props"));return on(t,n,a,i,b?We:Ye)}if(C(t)&&C(n))return t.name===n.name?on(t,n,a,i,Fe):on(t,n,a,i,Ye);if(en(t)&&en(n)){var m=Rt(t),_=m.length;if(_!==Rt(n).length)return on(r({},t),r({},n),a,i,Ye);for(var g=_;g--;g>0)if(!Lr(n,m[g]))return on(r({},t),r({},n),a,i,Ye);for(var j=[],w=0,O=_;O--;O>0){var D=m[O],S=e(t[D],n[D],j,"".concat(i,".").concat(D));S&&w++}return w===_?on(r({},t),r({},n),a,i,Le):(a.push.apply(a,j),on(r({},t),r({},n),a,i,Ye))}return on(t,n,a,i,Ye)}(e,t,a,n),a}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 cn={};function un(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},a=n.shallow,i=void 0===a||a;if(e===t)return!1;if(!i)return an(e,t);var c=e||cn,u=t||cn,f=Object.keys(r(r({},c),u));return Mr(f,(function(e,t){var r=an(c[t],u[t],t);return r&&(e=[].concat(o(e),o(r))),e}),[])}function fn(e,t,r,n,o,a,i){var c=i.get(e),u=i.get(n);return{propsDifferences:un(e,n),stateDifferences:un(t,o),hookDifferences:un(r,a,{shallow:!1}),ownerDifferences:null!=c&&null!=u&&{propsDifferences:un(c.props,u.props),stateDifferences:un(c.state,u.state),hookDifferences:c.hooks.map((function(e,t){return{hookName:e.hookName,differences:un(e.result,u.hooks[t].result,{shallow:!1})}}))}}}function sn(e){var t=e.Component,r=e.displayName,n=e.hookName,o=e.prevProps,a=e.prevState,i=e.prevHook,c=e.nextProps,u=e.nextState,f=e.nextHook,s=e.options,l=e.ownerDataMap;return{Component:t,displayName:r,hookName:n,prevProps:o,prevState:a,prevHook:i,nextProps:c,nextState:u,nextHook:f,options:s,ownerDataMap:l,reason:fn(o,a,i,c,u,f,l)}}function ln(e){return e.prototype&&!!e.prototype.isReactComponent}function pn(e){return e.$$typeof===$e}function vn(e){return e.$$typeof===Be}function hn(e){var t=e.Component,r=e.displayName,n=e.options,o=e.React,a=e.isHookChange;return!function(e,t){return t.exclude&&t.exclude.length>0&&t.exclude.some((function(t){return t.test(e)}))}(r,n)&&(!1!==t.whyDidYouRender&&((!a||!t.whyDidYouRender||!1!==t.whyDidYouRender.trackHooks)&&!!(t.whyDidYouRender||n.trackAllPureComponents&&(t&&t.prototype instanceof o.PureComponent||pn(t))||function(e,t){return t.include&&t.include.length>0&&t.include.some((function(t){return t.test(e)}))}(r,n))))}var yn=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)},dn=Math.max;var bn=function(e,t,r){return t=dn(void 0===t?e.length-1:t,0),function(){for(var n=arguments,o=-1,a=dn(n.length-t,0),i=Array(a);++o0){if(++t>=800)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}(gn);var On=function(e,t){return wn(bn(e,t,Nr),e+"")};var Dn=function(e,t,r){if(!N(r))return!1;var n=typeof t;return!!("number"==n?Et(r)&<(t,r.length):"string"==n&&t in r)&&ne(r[t],e)};var Sn=function(e){var t=[];if(null!=e)for(var r in Object(e))t.push(r);return t},kn=Object.prototype.hasOwnProperty;var En=function(e){if(!N(e))return Sn(e);var t=wt(e),r=[];for(var n in e)("constructor"!=n||!t&&kn.call(e,n))&&r.push(n);return r};var Rn=function(e){return Et(e)?gt(e,!0):En(e)},Nn=Object.prototype,xn=Nn.hasOwnProperty,Cn=On((function(e,t){e=Object(e);var r=-1,n=t.length,o=n>2?t[2]:void 0;for(o&&Dn(t[0],t[1],o)&&(n=1);++r0&&void 0!==arguments[0]?arguments[0]:{},t=console.group,n=console.groupEnd;e.collapseGroups?t=console.groupCollapsed:e.onlyLogs&&(t=console.log,n=Qe);var o=e.notifier||Ke("hotReloadBufferMs"in e?e.hotReloadBufferMs:500);return r({include:null,exclude:null,notifier:o,onlyLogs:!1,consoleLog:console.log,consoleGroup:t,consoleGroupEnd:n,logOnDifferentValues:!1,logOwnerReasons:!1,trackHooks:!0,titleColor:"#058",diffNameColor:"blue",diffPathColor:"red",trackExtraHooks:[],trackAllPureComponents:!1},e)}(t),i=e.createElement,c=e.createFactory,u=new WeakMap,f=new WeakMap,s={current:[]},l=null;if(e.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED&&Object.defineProperty(e.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,"current",{get:function(){return l},set:function(e){l=e,s.current=[]}}),e.createElement=function(t){for(var r=null,n=null,o=null,c=arguments.length,l=new Array(c>1?c-1:0),p=1;pe.length)&&(t=e.length);for(var r=0,n=new Array(t);r=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,c=!0,u=!1;return{s:function(){r=e[Symbol.iterator]()},n:function(){var e=r.next();return c=e.done,e},e:function(e){u=!0,i=e},f:function(){try{c||null==r.return||r.return()}finally{if(u)throw i}}}}var u=Array.isArray,f="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function s(e,t){return e(t={exports:{}},t.exports),t.exports}var l="object"==typeof f&&f&&f.Object===Object&&f,p="object"==typeof self&&self&&self.Object===Object&&self,v=l||p||Function("return this")(),h=v.Symbol,y=Object.prototype,d=y.hasOwnProperty,b=y.toString,m=h?h.toStringTag:void 0;var _=function(e){var t=d.call(e,m),r=e[m];try{e[m]=void 0;var n=!0}catch(e){}var o=b.call(e);return n&&(t?e[m]=r:delete e[m]),o},g=Object.prototype.toString;var j=function(e){return g.call(e)},w=h?h.toStringTag:void 0;var O=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":w&&w in Object(e)?_(e):j(e)};var D=function(e){return null!=e&&"object"==typeof e};var S=function(e){return"symbol"==typeof e||D(e)&&"[object Symbol]"==O(e)},k=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,E=/^\w*$/;var R=function(e,t){if(u(e))return!1;var r=typeof e;return!("number"!=r&&"symbol"!=r&&"boolean"!=r&&null!=e&&!S(e))||(E.test(e)||!k.test(e)||null!=t&&e in Object(t))};var N=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)};var x,C=function(e){if(!N(e))return!1;var t=O(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t},T=v["__core-js_shared__"],A=(x=/[^.]+$/.exec(T&&T.keys&&T.keys.IE_PROTO||""))?"Symbol(src)_1."+x:"";var P=function(e){return!!A&&A in e},M=Function.prototype.toString;var I=function(e){if(null!=e){try{return M.call(e)}catch(e){}try{return e+""}catch(e){}}return""},Y=/^\[object .+?Constructor\]$/,L=Function.prototype,H=Object.prototype,z=L.toString,W=H.hasOwnProperty,F=RegExp("^"+z.call(W).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");var U=function(e){return!(!N(e)||P(e))&&(C(e)?F:Y).test(I(e))};var $=function(e,t){return null==e?void 0:e[t]};var B=function(e,t){var r=$(e,t);return U(r)?r:void 0},V=B(Object,"create");var G=function(){this.__data__=V?V(null):{},this.size=0};var q=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t},J=Object.prototype.hasOwnProperty;var K=function(e){var t=this.__data__;if(V){var r=t[e];return"__lodash_hash_undefined__"===r?void 0:r}return J.call(t,e)?t[e]:void 0},Q=Object.prototype.hasOwnProperty;var X=function(e){var t=this.__data__;return V?void 0!==t[e]:Q.call(t,e)};var Z=function(e,t){var r=this.__data__;return this.size+=this.has(e)?0:1,r[e]=V&&void 0===t?"__lodash_hash_undefined__":t,this};function ee(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t-1};var fe=function(e,t){var r=this.__data__,n=oe(r,e);return n<0?(++this.size,r.push([e,t])):r[n][1]=t,this};function se(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t syntax always produces a *NEW* immutable React element so a component that receives as props always re-renders.)."),e(Me,Fe,"different functions with the same name."),Me),Ge=!1;function qe(t){var r=t.Component,n=t.displayName,o=t.hookName,a=t.prefixMessage,i=t.diffObjType,c=t.differences,u=t.values,f=t.options;c&&c.length>0?(f.consoleLog(e({},n,r),"".concat(a," of ").concat(i," changes:")),c.forEach((function(t){var r=t.pathString,n=t.diffType,a=t.prevValue,c=t.nextValue;f.consoleGroup("%c".concat("hook"===i?"[hook ".concat(o," result]"):"".concat(i,"."),"%c").concat(r,"%c"),"color:".concat(f.diffNameColor,";"),"color:".concat(f.diffPathColor,";"),"color:default;"),f.consoleLog("".concat(Ve[n]," (more info at ").concat(o?"http://bit.ly/wdyr3":"http://bit.ly/wdyr02",")")),f.consoleLog(e({},"prev ".concat(r),a),"!==",e({},"next ".concat(r),c)),f.consoleGroupEnd()}))):c&&(f.consoleLog(e({},n,r),"".concat(a," the ").concat(i," object itself changed but its values are all equal."),"props"===i?"This could have been avoided by making the component pure, or by preventing its father from re-rendering.":"This usually means this component called setState when no changes in its state actually occurred.","More info at ".concat("http://bit.ly/wdyr02")),f.consoleLog("prev ".concat(i,":"),u.prev," !== ",u.next,":next ".concat(i)))}function Je(t){var r=t.Component,n=t.displayName,o=t.hookName,a=t.prevProps,i=t.prevState,c=t.prevHook,u=t.nextProps,f=t.nextState,s=t.nextHook,l=t.reason,p=t.options,v=t.ownerDataMap;if(function(e,t,r){return!Ge&&(!!r.logOnDifferentValues||(!(!t.whyDidYouRender||!t.whyDidYouRender.logOnDifferentValues)||!(e.propsDifferences&&e.propsDifferences.some((function(e){return e.diffType===Ye}))||e.stateDifferences&&e.stateDifferences.some((function(e){return e.diffType===Ye}))||e.hookDifferences&&e.hookDifferences.some((function(e){return e.diffType===Ye})))))}(l,r,p)){p.consoleGroup("%c".concat(n),"color: ".concat(p.titleColor,";"));var h="Re-rendered because";if(l.propsDifferences&&(qe({Component:r,displayName:n,prefixMessage:h,diffObjType:"props",differences:l.propsDifferences,values:{prev:a,next:u},options:p}),h="And because"),l.stateDifferences&&qe({Component:r,displayName:n,prefixMessage:h,diffObjType:"state",differences:l.stateDifferences,values:{prev:i,next:f},options:p}),l.hookDifferences&&qe({Component:r,displayName:n,prefixMessage:h,diffObjType:"hook",differences:l.hookDifferences,values:{prev:c,next:s},hookName:o,options:p}),l.propsDifferences&&l.ownerDifferences){var y=v.get(a),d=v.get(u);p.consoleGroup("Rendered by ".concat(d.displayName));var b="Re-rendered because";l.ownerDifferences.propsDifferences&&(qe({Component:d.Component,displayName:d.displayName,prefixMessage:b,diffObjType:"props",differences:l.ownerDifferences.propsDifferences,values:{prev:y.props,next:d.props},options:p}),b="And because"),l.ownerDifferences.stateDifferences&&qe({Component:d.Component,displayName:d.displayName,prefixMessage:b,diffObjType:"state",differences:l.ownerDifferences.stateDifferences,values:{prev:y.state,next:d.state},options:p}),l.ownerDifferences.hookDifferences&&l.ownerDifferences.hookDifferences.forEach((function(e,t){var r=e.hookName,n=e.differences;return qe({Component:d.Component,displayName:d.displayName,prefixMessage:b,diffObjType:"hook",differences:n,values:{prev:y.hooks[t].result,next:d.hooks[t].result},hookName:r,options:p})})),p.consoleGroupEnd()}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("http://bit.ly/wdyr02")),p.consoleGroupEnd()}}function Ke(e){return e&&"undefined"!=typeof module&&module.hot&&module.hot.addStatusHandler&&module.hot.addStatusHandler((function(t){"idle"===t&&(Ge=!0,setTimeout((function(){Ge=!1}),e))})),Je}var Qe=function(){};var Xe=function(e){return"string"==typeof e||!u(e)&&D(e)&&"[object String]"==O(e)};function Ze(e){return e.displayName||e.name||e.type&&Ze(e.type)||e.render&&Ze(e.render)||(Xe(e)?e:void 0)}var et=function(e,t,r,n){var o=-1,a=null==e?0:e.length;for(n&&a&&(r=e[++o]);++o-1&&e%1==0&&e-1&&e%1==0&&e<=9007199254740991},vt={};vt["[object Float32Array]"]=vt["[object Float64Array]"]=vt["[object Int8Array]"]=vt["[object Int16Array]"]=vt["[object Int32Array]"]=vt["[object Uint8Array]"]=vt["[object Uint8ClampedArray]"]=vt["[object Uint16Array]"]=vt["[object Uint32Array]"]=!0,vt["[object Arguments]"]=vt["[object Array]"]=vt["[object ArrayBuffer]"]=vt["[object Boolean]"]=vt["[object DataView]"]=vt["[object Date]"]=vt["[object Error]"]=vt["[object Function]"]=vt["[object Map]"]=vt["[object Number]"]=vt["[object Object]"]=vt["[object RegExp]"]=vt["[object Set]"]=vt["[object String]"]=vt["[object WeakMap]"]=!1;var ht=function(e){return D(e)&&pt(e.length)&&!!vt[O(e)]};var yt=function(e){return function(t){return e(t)}},dt=s((function(e,t){var r=t&&!t.nodeType&&t,n=r&&e&&!e.nodeType&&e,o=n&&n.exports===r&&l.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})),bt=dt&&dt.isTypedArray,mt=bt?yt(bt):ht,_t=Object.prototype.hasOwnProperty;var gt=function(e,t){var r=u(e),n=!r&&ct(e),o=!r&&!n&&ft(e),a=!r&&!n&&!o&&mt(e),i=r||n||o||a,c=i?rt(e.length,String):[],f=c.length;for(var s in e)!t&&!_t.call(e,s)||i&&("length"==s||o&&("offset"==s||"parent"==s)||a&&("buffer"==s||"byteLength"==s||"byteOffset"==s)||lt(s,f))||c.push(s);return c},jt=Object.prototype;var wt=function(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||jt)};var Ot=function(e,t){return function(r){return e(t(r))}},Dt=Ot(Object.keys,Object),St=Object.prototype.hasOwnProperty;var kt=function(e){if(!wt(e))return Dt(e);var t=[];for(var r in Object(e))St.call(e,r)&&"constructor"!=r&&t.push(r);return t};var Et=function(e){return null!=e&&pt(e.length)&&!C(e)};var Rt=function(e){return Et(e)?gt(e):kt(e)};var Nt=function(e,t){return function(r,n){if(null==r)return r;if(!Et(r))return e(r,n);for(var o=r.length,a=t?o:-1,i=Object(r);(t?a--:++ac))return!1;var f=a.get(e);if(f&&a.get(t))return f==t;var s=-1,l=!0,p=2&r?new zt:void 0;for(a.set(e,t),a.set(t,e);++s3&&void 0!==arguments[3]?arguments[3]:"";if(t===n)return!0;if(!t||!n)return on(t,n,a,i,Ye);if(u(t)&&u(n)){var f=t.length;if(f!==n.length)return on(o(t),o(n),a,i,Ye);for(var s=[],l=0,p=f;p--;p>0){var v=e(t[p],n[p],s,"".concat(i,"[").concat(p,"]"));v&&l++}return l===f?on(o(t),o(n),a,i,Le):(a.push.apply(a,s),on(o(t),o(n),a,i,Ye))}if(Wr(t)&&Wr(n)){if(t.size!==n.size)return on(new Set(t),new Set(n),a,i,Ye);var h,y=c(t);try{for(y.s();!(h=y.n()).done;){var d=h.value;if(!n.has(d))return on(new Set(t),new Set(n),a,i,Ye)}}catch(e){y.e(e)}finally{y.f()}return on(new Set(t),new Set(n),a,i,Le)}if(Gr(t)&&Gr(n))return t.getTime()===n.getTime()?on(new Date(t),new Date(n),a,i,He):on(new Date(t),new Date(n),a,i,Ye);if($r(t)&&$r(n))return t.toString()===n.toString()?on(t,n,a,i,ze):on(t,n,a,i,Ye);if(tn&&t instanceof Element&&n instanceof Element)return on(t,n,a,i,Ye);if(nn(t)&&nn(n)){if(t.type!==n.type)return on(t,n,a,i,Ye);var b=e(t.props,n.props,[],"".concat(i,".props"));return on(t,n,a,i,b?We:Ye)}if(C(t)&&C(n))return t.name===n.name?on(t,n,a,i,Fe):on(t,n,a,i,Ye);if(en(t)&&en(n)){var m=Rt(t),_=m.length;if(_!==Rt(n).length)return on(r({},t),r({},n),a,i,Ye);for(var g=_;g--;g>0)if(!Lr(n,m[g]))return on(r({},t),r({},n),a,i,Ye);for(var j=[],w=0,O=_;O--;O>0){var D=m[O],S=e(t[D],n[D],j,"".concat(i,".").concat(D));S&&w++}return w===_?on(r({},t),r({},n),a,i,Le):(a.push.apply(a,j),on(r({},t),r({},n),a,i,Ye))}return on(t,n,a,i,Ye)}(e,t,a,n),a}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 cn={};function un(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},a=n.shallow,i=void 0===a||a;if(e===t)return!1;if(!i)return an(e,t);var c=e||cn,u=t||cn,f=Object.keys(r(r({},c),u));return Mr(f,(function(e,t){var r=an(c[t],u[t],t);return r&&(e=[].concat(o(e),o(r))),e}),[])}function fn(e){var t=e.prevOwnerData,r=e.nextOwnerData;if(!t||!r)return!1;var n=t.hooks.map((function(e,t){return{hookName:e.hookName,differences:un(e.result,r.hooks[t].result,{shallow:!1})}}));return{propsDifferences:un(t.props,r.props),stateDifferences:un(t.state,r.state),hookDifferences:n.length>0&&n}}function sn(e,t,r,n,o,a,i){var c=i.get(e),u=i.get(n);return{propsDifferences:un(e,n),stateDifferences:un(t,o),hookDifferences:un(r,a,{shallow:!1}),ownerDifferences:fn({prevOwnerData:c,nextOwnerData:u})}}function ln(e){var t=e.Component,r=e.displayName,n=e.hookName,o=e.prevProps,a=e.prevState,i=e.prevHook,c=e.nextProps,u=e.nextState,f=e.nextHook,s=e.options,l=e.ownerDataMap;return{Component:t,displayName:r,hookName:n,prevProps:o,prevState:a,prevHook:i,nextProps:c,nextState:u,nextHook:f,options:s,ownerDataMap:l,reason:sn(o,a,i,c,u,f,l)}}function pn(e){return e.prototype&&!!e.prototype.isReactComponent}function vn(e){return e.$$typeof===$e}function hn(e){return e.$$typeof===Be}function yn(e){var t=e.Component,r=e.displayName,n=e.options,o=e.React,a=e.isHookChange;return!function(e,t){return t.exclude&&t.exclude.length>0&&t.exclude.some((function(t){return t.test(e)}))}(r,n)&&(!1!==t.whyDidYouRender&&((!a||!t.whyDidYouRender||!1!==t.whyDidYouRender.trackHooks)&&!!(t.whyDidYouRender||n.trackAllPureComponents&&(t&&t.prototype instanceof o.PureComponent||vn(t))||function(e,t){return t.include&&t.include.length>0&&t.include.some((function(t){return t.test(e)}))}(r,n))))}var dn=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)},bn=Math.max;var mn=function(e,t,r){return t=bn(void 0===t?e.length-1:t,0),function(){for(var n=arguments,o=-1,a=bn(n.length-t,0),i=Array(a);++o0){if(++t>=800)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}(jn);var Dn=function(e,t){return On(mn(e,t,Nr),e+"")};var Sn=function(e,t,r){if(!N(r))return!1;var n=typeof t;return!!("number"==n?Et(r)&<(t,r.length):"string"==n&&t in r)&&ne(r[t],e)};var kn=function(e){var t=[];if(null!=e)for(var r in Object(e))t.push(r);return t},En=Object.prototype.hasOwnProperty;var Rn=function(e){if(!N(e))return kn(e);var t=wt(e),r=[];for(var n in e)("constructor"!=n||!t&&En.call(e,n))&&r.push(n);return r};var Nn=function(e){return Et(e)?gt(e,!0):Rn(e)},xn=Object.prototype,Cn=xn.hasOwnProperty,Tn=Dn((function(e,t){e=Object(e);var r=-1,n=t.length,o=n>2?t[2]:void 0;for(o&&Sn(t[0],t[1],o)&&(n=1);++r0&&void 0!==arguments[0]?arguments[0]:{},t=console.group,n=console.groupEnd;e.collapseGroups?t=console.groupCollapsed:e.onlyLogs&&(t=console.log,n=Qe);var o=e.notifier||Ke("hotReloadBufferMs"in e?e.hotReloadBufferMs:500);return r({include:null,exclude:null,notifier:o,onlyLogs:!1,consoleLog:console.log,consoleGroup:t,consoleGroupEnd:n,logOnDifferentValues:!1,logOwnerReasons:!1,trackHooks:!0,titleColor:"#058",diffNameColor:"blue",diffPathColor:"red",trackExtraHooks:[],trackAllPureComponents:!1},e)}(t),i=e.createElement,c=e.createFactory,u=new WeakMap,f=new WeakMap,s={current:[]},l=null;if(e.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED&&Object.defineProperty(e.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,"current",{get:function(){return l},set:function(e){l=e,s.current=[]}}),e.createElement=function(t){for(var r=null,n=null,o=null,c=arguments.length,l=new Array(c>1?c-1:0),p=1;p 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","/** 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 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 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","/**\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\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","/**\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 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 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 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","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\r\n// copied from packages/shared/ReactSymbols.js in https://github.com/facebook/react\r\nconst hasSymbol = typeof Symbol === 'function' && Symbol.for\r\nexport const REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3\r\nexport const REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0\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 (remember that the syntax always produces a *NEW* immutable React element so a component that receives as props always re-renders.).',\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} result]` : `${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 its values are all equal.`,\r\n diffObjType === 'props' ?\r\n 'This could have been avoided by making the component pure, or by preventing its father from re-rendering.' :\r\n 'This usually means this component called setState when no changes in its 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, ownerDataMap} = 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\r\n if(reason.propsDifferences && reason.ownerDifferences){\r\n const prevOwnerData = ownerDataMap.get(prevProps)\r\n const nextOwnerData = ownerDataMap.get(nextProps)\r\n\r\n options.consoleGroup(`Rendered by ${nextOwnerData.displayName}`)\r\n let prefixMessage = 'Re-rendered because'\r\n\r\n if(reason.ownerDifferences.propsDifferences){\r\n logDifference({\r\n Component: nextOwnerData.Component,\r\n displayName: nextOwnerData.displayName,\r\n prefixMessage,\r\n diffObjType: 'props',\r\n differences: reason.ownerDifferences.propsDifferences,\r\n values: {prev: prevOwnerData.props, next: nextOwnerData.props},\r\n options\r\n })\r\n prefixMessage = 'And because'\r\n }\r\n\r\n if(reason.ownerDifferences.stateDifferences){\r\n logDifference({\r\n Component: nextOwnerData.Component,\r\n displayName: nextOwnerData.displayName,\r\n prefixMessage,\r\n diffObjType: 'state',\r\n differences: reason.ownerDifferences.stateDifferences,\r\n values: {prev: prevOwnerData.state, next: nextOwnerData.state},\r\n options\r\n })\r\n }\r\n\r\n if(reason.ownerDifferences.hookDifferences){\r\n reason.ownerDifferences.hookDifferences.forEach(({hookName, differences}, i) =>\r\n logDifference({\r\n Component: nextOwnerData.Component,\r\n displayName: nextOwnerData.displayName,\r\n prefixMessage,\r\n diffObjType: 'hook',\r\n differences,\r\n values: {prev: prevOwnerData.hooks[i].result, next: nextOwnerData.hooks[i].result},\r\n hookName,\r\n options\r\n })\r\n )\r\n }\r\n options.consoleGroupEnd()\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(typeof(module) !== 'undefined' && 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 ('hotReloadBufferMs' in userOptions) ? 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 logOwnerReasons: false,\r\n trackHooks: true,\r\n titleColor: '#058',\r\n diffNameColor: 'blue',\r\n diffPathColor: 'red',\r\n trackExtraHooks: [],\r\n trackAllPureComponents: false,\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 (type.render && getDisplayName(type.render)) ||\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","/**\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","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 * 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 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","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","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 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","/**\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","/**\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 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 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","var overArg = require('./_overArg');\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nmodule.exports = getPrototype;\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","import {isArray, isPlainObject, isDate, isRegExp, isFunction, isSet, 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 arrayLength = a.length\r\n if(arrayLength !== b.length){\r\n return trackDiff([...a], [...b], diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n const arrayItemDiffs = []\r\n let numberOfDeepEqualsItems = 0\r\n for(let i = arrayLength; i--; i > 0){\r\n const diffEquals = accumulateDeepEqualDiffs(a[i], b[i], arrayItemDiffs, `${pathString}[${i}]`)\r\n if(diffEquals){\r\n numberOfDeepEqualsItems++\r\n }\r\n }\r\n\r\n if(numberOfDeepEqualsItems === arrayLength){\r\n return trackDiff([...a], [...b], diffsAccumulator, pathString, diffTypes.deepEquals)\r\n }\r\n\r\n diffsAccumulator.push(...arrayItemDiffs)\r\n\r\n return trackDiff([...a], [...b], diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isSet(a) && isSet(b)){\r\n if(a.size !== b.size){\r\n return trackDiff(new Set(a), new Set(b), diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n for(const valA of a){\r\n if(!b.has(valA)){\r\n return trackDiff(new Set(a), new Set(b), diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n }\r\n\r\n return trackDiff(new Set(a), new Set(b), diffsAccumulator, pathString, diffTypes.deepEquals)\r\n }\r\n\r\n if(isDate(a) && isDate(b)){\r\n return a.getTime() === b.getTime() ?\r\n trackDiff(new Date(a), new Date(b), diffsAccumulator, pathString, diffTypes.date) :\r\n trackDiff(new Date(a), new Date(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 if(a.type !== b.type){\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n const reactElementPropsAreDeepEqual =\r\n accumulateDeepEqualDiffs(a.props, b.props, [], `${pathString}.props`)\r\n\r\n return reactElementPropsAreDeepEqual ?\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 keysLength = keys.length\r\n if(keysLength !== getKeys(b).length){\r\n return trackDiff({...a}, {...b}, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n for(let i = keysLength; i--; 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 const objectValuesDiffs = []\r\n let numberOfDeepEqualsObjectValues = 0\r\n for(let i = keysLength; i--; i > 0){\r\n const key = keys[i]\r\n const deepEquals = accumulateDeepEqualDiffs(a[key], b[key], objectValuesDiffs, `${pathString}.${key}`)\r\n if(deepEquals){\r\n numberOfDeepEqualsObjectValues++\r\n }\r\n }\r\n\r\n if(numberOfDeepEqualsObjectValues === keysLength){\r\n return trackDiff({...a}, {...b}, diffsAccumulator, pathString, diffTypes.deepEquals)\r\n }\r\n\r\n diffsAccumulator.push(...objectValuesDiffs)\r\n\r\n return 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, ownerDataMap){\r\n const prevOwnerData = ownerDataMap.get(prevProps)\r\n const nextOwnerData = ownerDataMap.get(nextProps)\r\n\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 ownerDifferences: prevOwnerData != null && nextOwnerData != null ? {\r\n propsDifferences: findObjectsDifferences(prevOwnerData.props, nextOwnerData.props),\r\n stateDifferences: findObjectsDifferences(prevOwnerData.state, nextOwnerData.state),\r\n hookDifferences: prevOwnerData.hooks.map(({hookName, result}, i) => ({\r\n hookName,\r\n differences: findObjectsDifferences(result, nextOwnerData.hooks[i].result, {shallow: false})\r\n }))\r\n } : false\r\n }\r\n}\r\n\r\nexport default function getUpdateInfo({Component, displayName, hookName, prevProps, prevState, prevHook, nextProps, nextState, nextHook, options, ownerDataMap}){\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 ownerDataMap,\r\n reason: getUpdateReason(prevProps, prevState, prevHook, nextProps, nextState, nextHook, ownerDataMap)\r\n }\r\n}\r\n","// copied from https://github.com/facebook/react/blob/master/packages/react-reconciler/src/ReactTypeOfMode.js\r\nimport {REACT_FORWARD_REF_TYPE, REACT_MEMO_TYPE} from './consts'\r\n\r\nconst StrictMode = 0b0001\r\n\r\n// based on \"findStrictRoot\" from https://github.com/facebook/react/blob/master/packages/react-reconciler/src/ReactStrictModeWarnings.js\r\n// notice: this is only used for class components. functional components doesn't re-rendered inside strict mode\r\nexport function checkIfInsideAStrictModeTree(reactComponentInstance){\r\n let reactInternalFiber = reactComponentInstance && reactComponentInstance._reactInternalFiber\r\n while(reactInternalFiber){\r\n if(reactInternalFiber.mode & StrictMode){\r\n return true\r\n }\r\n reactInternalFiber = reactInternalFiber.return\r\n }\r\n return false\r\n}\r\n\r\nexport function isReactClassComponent(Component){\r\n return Component.prototype && !!Component.prototype.isReactComponent\r\n}\r\n\r\nexport function isMemoComponent(Component){\r\n return Component.$$typeof === REACT_MEMO_TYPE\r\n}\r\n\r\nexport function isForwardRefComponent(Component){\r\n return Component.$$typeof === REACT_FORWARD_REF_TYPE\r\n}\r\n","import {isMemoComponent} from './utils'\r\n\r\nfunction 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, React, isHookChange}){\r\n if(shouldExclude(displayName, options)){\r\n return false\r\n }\r\n\r\n if(Component.whyDidYouRender === false){\r\n return false\r\n }\r\n\r\n if(isHookChange && (\r\n Component.whyDidYouRender && Component.whyDidYouRender.trackHooks === false\r\n )){\r\n return false\r\n }\r\n\r\n return !!(\r\n Component.whyDidYouRender || (\r\n options.trackAllPureComponents && (\r\n (Component && Component.prototype instanceof React.PureComponent) ||\r\n isMemoComponent(Component)\r\n )\r\n ) ||\r\n shouldInclude(displayName, options)\r\n )\r\n}\r\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 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 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 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","/**\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 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","import {defaults} from 'lodash'\r\n\r\nimport {checkIfInsideAStrictModeTree} from '../utils'\r\nimport getUpdateInfo from '../getUpdateInfo'\r\n\r\nexport default function patchClassComponent(ClassComponent, displayName, React, options, ownerDataMap){\r\n class WDYRPatchedClassComponent extends ClassComponent{\r\n constructor(props, context){\r\n super(props, context)\r\n\r\n this._WDYR = {\r\n renderNumber: 0\r\n }\r\n\r\n const origRender = super.render || this.render\r\n // this probably means render is an arrow function or this.render.bind(this) was called on the original class\r\n const renderIsABindedFunction = origRender !== ClassComponent.prototype.render\r\n if(renderIsABindedFunction){\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 this._WDYR.renderNumber++\r\n\r\n if(!('isStrictMode' in this._WDYR)){\r\n this._WDYR.isStrictMode = checkIfInsideAStrictModeTree(this)\r\n }\r\n\r\n // in strict mode- ignore every other render\r\n if(!(this._WDYR.isStrictMode && this._WDYR.renderNumber % 2 === 1)){\r\n if(this._WDYR.prevProps){\r\n const updateInfo = getUpdateInfo({\r\n Component: ClassComponent,\r\n displayName,\r\n prevProps: this._WDYR.prevProps,\r\n prevState: this._WDYR.prevState,\r\n nextProps: this.props,\r\n nextState: this.state,\r\n options,\r\n ownerDataMap\r\n })\r\n\r\n options.notifier(updateInfo)\r\n }\r\n\r\n this._WDYR.prevProps = this.props\r\n this._WDYR.prevState = this.state\r\n }\r\n\r\n return super.render ? super.render() : null\r\n }\r\n }\r\n\r\n try{\r\n WDYRPatchedClassComponent.displayName = displayName\r\n }catch(e){\r\n // not crucial if displayName couldn't be set\r\n }\r\n\r\n defaults(WDYRPatchedClassComponent, ClassComponent)\r\n\r\n return WDYRPatchedClassComponent\r\n}\r\n","import {defaults} from 'lodash'\r\n\r\nimport getUpdateInfo from '../getUpdateInfo'\r\n\r\nconst getFunctionalComponentFromStringComponent = (componentTypeStr, React) => props => (\r\n React.createElement(componentTypeStr, props)\r\n)\r\n\r\nexport default function patchFunctionalOrStrComponent(FunctionalOrStringComponent, isPure, displayName, React, options, ownerDataMap){\r\n const FunctionalComponent = typeof(FunctionalOrStringComponent) === 'string' ?\r\n getFunctionalComponentFromStringComponent(FunctionalOrStringComponent, React) :\r\n FunctionalOrStringComponent\r\n\r\n function WDYRFunctionalComponent(){\r\n const nextProps = arguments[0]\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 updateInfo = getUpdateInfo({\r\n Component: FunctionalComponent,\r\n displayName,\r\n prevProps,\r\n nextProps,\r\n options,\r\n ownerDataMap\r\n })\r\n\r\n const notifiedByHooks = (\r\n !updateInfo.reason.propsDifferences || (\r\n (isPure && updateInfo.reason.propsDifferences.length === 0)\r\n )\r\n )\r\n\r\n if(!notifiedByHooks){\r\n options.notifier(updateInfo)\r\n }\r\n }\r\n\r\n return FunctionalComponent(...arguments)\r\n }\r\n\r\n try{\r\n WDYRFunctionalComponent.displayName = displayName\r\n }catch(e){\r\n // not crucial if displayName couldn't be set\r\n }\r\n\r\n WDYRFunctionalComponent.ComponentForHooksTracking = FunctionalComponent\r\n defaults(WDYRFunctionalComponent, FunctionalComponent)\r\n\r\n return WDYRFunctionalComponent\r\n}\r\n","import {get} 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\nimport patchClassComponent from './patches/patchClassComponent'\r\nimport patchFunctionalOrStrComponent from './patches/patchFunctionalOrStrComponent'\r\nimport patchMemoComponent from './patches/patchMemoComponent'\r\nimport patchForwardRefComponent from './patches/patchForwardRefComponent'\r\n\r\nimport {isForwardRefComponent, isMemoComponent, isReactClassComponent} from './utils'\r\n\r\nconst initialHookValue = Symbol('initial-hook-value')\r\nfunction trackHookChanges(hookName, {path: hookPath}, hookResult, React, options, ownerDataMap, hooksRef){\r\n const nextHook = hookPath ? get(hookResult, hookPath) : hookResult\r\n hooksRef.current.push({hookName, result: nextHook})\r\n const ComponentHookDispatchedFromInstance = (\r\n React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED &&\r\n React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner.current\r\n )\r\n\r\n const prevHookResultRef = React.useRef(initialHookValue)\r\n\r\n if(!ComponentHookDispatchedFromInstance){\r\n return hookResult\r\n }\r\n\r\n const Component = ComponentHookDispatchedFromInstance.type.ComponentForHooksTracking || ComponentHookDispatchedFromInstance.type\r\n const displayName = getDisplayName(Component)\r\n\r\n const isShouldTrack = shouldTrack({Component, displayName, options, React, isHookChange: true})\r\n if(!isShouldTrack){\r\n return hookResult\r\n }\r\n\r\n const prevHookResult = prevHookResultRef.current\r\n prevHookResultRef.current = hookResult\r\n\r\n if(prevHookResult !== initialHookValue){\r\n const notification = getUpdateInfo({\r\n Component: Component,\r\n displayName,\r\n hookName,\r\n prevHook: hookPath ? get(prevHookResult, hookPath) : prevHookResult,\r\n nextHook,\r\n options,\r\n ownerDataMap\r\n })\r\n\r\n if(notification.reason.hookDifferences){\r\n options.notifier(notification)\r\n }\r\n }\r\n\r\n return hookResult\r\n}\r\n\r\nfunction createPatchedComponent(componentsMap, Component, displayName, React, options, ownerDataMap){\r\n if(isMemoComponent(Component)){\r\n return patchMemoComponent(Component, displayName, React, options, ownerDataMap)\r\n }\r\n\r\n if(isForwardRefComponent(Component)){\r\n return patchForwardRefComponent(Component, displayName, React, options, ownerDataMap)\r\n }\r\n\r\n if(isReactClassComponent(Component)){\r\n return patchClassComponent(Component, displayName, React, options, ownerDataMap)\r\n }\r\n\r\n return patchFunctionalOrStrComponent(Component, false, displayName, React, options, ownerDataMap)\r\n}\r\n\r\nfunction getPatchedComponent(componentsMap, Component, displayName, React, options, ownerDataMap){\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, ownerDataMap)\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 const ownerDataMap = new WeakMap()\r\n const hooksRef = {current: []}\r\n\r\n // Intercept assignments to ReactCurrentOwner.current and reset hooksRef\r\n let currentOwner = null\r\n if(React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED){\r\n Object.defineProperty(React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner, 'current', {\r\n get(){\r\n return currentOwner\r\n },\r\n set(value){\r\n currentOwner = value\r\n hooksRef.current = []\r\n }\r\n })\r\n }\r\n\r\n React.createElement = function(componentNameOrComponent, ...rest){\r\n let isShouldTrack = null\r\n let displayName = null\r\n let WDYRPatchedComponent = null\r\n\r\n try{\r\n isShouldTrack = (\r\n (\r\n typeof componentNameOrComponent === 'function' ||\r\n isMemoComponent(componentNameOrComponent) ||\r\n isForwardRefComponent(componentNameOrComponent)\r\n ) &&\r\n shouldTrack({Component: componentNameOrComponent, displayName: getDisplayName(componentNameOrComponent), React, options})\r\n )\r\n\r\n if(isShouldTrack){\r\n displayName = (\r\n componentNameOrComponent &&\r\n componentNameOrComponent.whyDidYouRender &&\r\n componentNameOrComponent.whyDidYouRender.customName ||\r\n getDisplayName(componentNameOrComponent)\r\n )\r\n\r\n WDYRPatchedComponent = getPatchedComponent(componentsMap, componentNameOrComponent, displayName, React, options, ownerDataMap)\r\n\r\n const element = origCreateElement.apply(React, [WDYRPatchedComponent, ...rest])\r\n if(options.logOwnerReasons){\r\n const OwnerInstance = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner.current\r\n if(OwnerInstance != null){\r\n const Component = OwnerInstance.type.ComponentForHooksTracking || OwnerInstance.type\r\n const displayName = getDisplayName(Component)\r\n ownerDataMap.set(element.props, {\r\n Component,\r\n displayName,\r\n props: OwnerInstance.pendingProps,\r\n state: OwnerInstance.stateNode != null ? OwnerInstance.stateNode.state : null,\r\n hooks: hooksRef.current\r\n })\r\n }\r\n }\r\n\r\n return element\r\n }\r\n }\r\n catch(e){\r\n options.consoleLog('whyDidYouRender error. Please file a bug at https://github.com/welldone-software/why-did-you-render/issues.', {\r\n errorInfo: {\r\n error: e,\r\n componentNameOrComponent,\r\n rest,\r\n options,\r\n isShouldTrack,\r\n displayName,\r\n WDYRPatchedComponent\r\n }\r\n })\r\n }\r\n\r\n return origCreateElement.apply(React, [componentNameOrComponent, ...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 if(options.trackHooks){\r\n const nativeHooks = Object.entries(hooksConfig).map(([hookName, hookTrackingConfig]) => {\r\n return [React, hookName, hookTrackingConfig]\r\n })\r\n\r\n const hooksToTrack = [\r\n ...nativeHooks,\r\n ...options.trackExtraHooks\r\n ]\r\n\r\n hooksToTrack.forEach(([hookParent, hookName, hookTrackingConfig = {}]) => {\r\n const originalHook = hookParent[hookName]\r\n const newHookName = hookName[0].toUpperCase() + hookName.slice(1)\r\n const newHook = function(...args){\r\n const hookResult = originalHook.call(this, ...args)\r\n trackHookChanges(hookName, hookTrackingConfig, hookResult, React, options, ownerDataMap, hooksRef)\r\n return hookResult\r\n }\r\n Object.defineProperty(newHook, 'name', {value: newHookName, writable: false})\r\n Object.assign(newHook, {originalHook})\r\n hookParent[hookName] = newHook\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\r\n componentsMap = null\r\n\r\n const hooksToRevert = [\r\n ...Object.keys(hooksConfig).map(hookName => [React, hookName]),\r\n ...options.trackExtraHooks\r\n ]\r\n hooksToRevert.forEach(([hookParent, hookName]) => {\r\n if(hookParent[hookName].originalHook){\r\n hookParent[hookName] = hookParent[hookName].originalHook\r\n }\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","import {defaults} from 'lodash'\r\n\r\nimport getDisplayName from '../getDisplayName'\r\n\r\nimport {isForwardRefComponent, isMemoComponent, isReactClassComponent} from '../utils'\r\nimport patchClassComponent from './patchClassComponent'\r\nimport patchFunctionalOrStrComponent from './patchFunctionalOrStrComponent'\r\n\r\nexport default function patchMemoComponent(MemoComponent, displayName, React, options, ownerDataMap){\r\n const {type: InnerMemoComponent} = MemoComponent\r\n\r\n const isInnerMemoComponentAClassComponent = isReactClassComponent(InnerMemoComponent)\r\n const isInnerMemoComponentForwardRefs = isForwardRefComponent(InnerMemoComponent)\r\n const isInnerMemoComponentAnotherMemoComponent = isMemoComponent(InnerMemoComponent)\r\n\r\n const WrappedFunctionalComponent = isInnerMemoComponentForwardRefs ?\r\n InnerMemoComponent.render :\r\n InnerMemoComponent\r\n\r\n const PatchedInnerComponent = isInnerMemoComponentAClassComponent ?\r\n patchClassComponent(WrappedFunctionalComponent, displayName, React, options, ownerDataMap) :\r\n (isInnerMemoComponentAnotherMemoComponent ?\r\n patchMemoComponent(WrappedFunctionalComponent, displayName, React, options, ownerDataMap) :\r\n patchFunctionalOrStrComponent(WrappedFunctionalComponent, true, displayName, React, options, ownerDataMap)\r\n )\r\n\r\n try{\r\n PatchedInnerComponent.displayName = getDisplayName(WrappedFunctionalComponent)\r\n }catch(e){\r\n // not crucial if displayName couldn't be set\r\n }\r\n\r\n PatchedInnerComponent.ComponentForHooksTracking = MemoComponent\r\n defaults(PatchedInnerComponent, WrappedFunctionalComponent)\r\n\r\n const WDYRMemoizedFunctionalComponent = React.memo(\r\n isInnerMemoComponentForwardRefs ? React.forwardRef(PatchedInnerComponent) : PatchedInnerComponent,\r\n MemoComponent.compare\r\n )\r\n\r\n try{\r\n WDYRMemoizedFunctionalComponent.displayName = displayName\r\n }catch(e){\r\n // not crucial if displayName couldn't be set\r\n }\r\n\r\n defaults(WDYRMemoizedFunctionalComponent, MemoComponent)\r\n\r\n return WDYRMemoizedFunctionalComponent\r\n}\r\n","import {defaults} from 'lodash'\r\n\r\nimport getDisplayName from '../getDisplayName'\r\nimport {isMemoComponent} from '../utils'\r\nimport patchFunctionalOrStrComponent from './patchFunctionalOrStrComponent'\r\n\r\nexport default function patchForwardRefComponent(ForwardRefComponent, displayName, React, options, ownerDataMap){\r\n const {render: InnerForwardRefComponent} = ForwardRefComponent\r\n\r\n const isInnerComponentMemoized = isMemoComponent(InnerForwardRefComponent)\r\n const WrappedFunctionalComponent = isInnerComponentMemoized ?\r\n InnerForwardRefComponent.type : InnerForwardRefComponent\r\n\r\n const WDYRWrappedByReactForwardRefFunctionalComponent = (\r\n patchFunctionalOrStrComponent(WrappedFunctionalComponent, isInnerComponentMemoized, displayName, React, options, ownerDataMap)\r\n )\r\n\r\n WDYRWrappedByReactForwardRefFunctionalComponent.displayName = getDisplayName(WrappedFunctionalComponent)\r\n WDYRWrappedByReactForwardRefFunctionalComponent.ComponentForHooksTracking = WrappedFunctionalComponent\r\n defaults(WDYRWrappedByReactForwardRefFunctionalComponent, WrappedFunctionalComponent)\r\n\r\n const WDYRForwardRefFunctionalComponent = React.forwardRef(\r\n isInnerComponentMemoized ?\r\n React.memo(WDYRWrappedByReactForwardRefFunctionalComponent, InnerForwardRefComponent.compare) :\r\n WDYRWrappedByReactForwardRefFunctionalComponent\r\n )\r\n\r\n try{\r\n WDYRForwardRefFunctionalComponent.displayName = displayName\r\n }catch(e){\r\n // not crucial if displayName couldn't be set\r\n }\r\n\r\n defaults(WDYRForwardRefFunctionalComponent, ForwardRefComponent)\r\n\r\n return WDYRForwardRefFunctionalComponent\r\n}\r\n","import whyDidYouRender from './whyDidYouRender'\r\nimport defaultNotifier from './defaultNotifier'\r\n\r\nwhyDidYouRender.defaultNotifier = defaultNotifier\r\nexport default whyDidYouRender\r\n"],"names":["Array","isArray","global","Object","freeSelf","self","freeGlobal","Function","root","Symbol","objectProto","prototype","hasOwnProperty","nativeObjectToString","toString","symToStringTag","toStringTag","undefined","value","isOwn","call","tag","unmasked","e","result","getRawTag","objectToString","isObjectLike","baseGetTag","reIsDeepProp","reIsPlainProp","object","type","isSymbol","test","uid","isObject","maskSrcKey","exec","coreJsData","keys","IE_PROTO","func","funcToString","reIsHostCtor","funcProto","reIsNative","RegExp","replace","isMasked","isFunction","toSource","key","getValue","baseIsNative","getNative","this","__data__","nativeCreate","size","has","data","Hash","entries","index","length","clear","entry","set","hashClear","hashDelete","get","hashGet","hashHas","hashSet","other","array","eq","splice","assocIndexOf","pop","push","ListCache","listCacheClear","listCacheDelete","listCacheGet","listCacheHas","listCacheSet","hash","map","Map","string","isKeyable","getMapData","MapCache","mapCacheClear","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","memoize","resolver","TypeError","memoized","args","arguments","apply","cache","Cache","rePropName","reEscapeChar","memoizeCapped","charCodeAt","match","number","quote","subString","iteratee","symbolProto","symbolToString","baseToString","arrayMap","isKey","stringToPath","path","castPath","toKey","defaultValue","baseGet","diffTypes","hasSymbol","REACT_MEMO_TYPE","REACT_FORWARD_REF_TYPE","diffTypesDescriptions","inHotReload","logDifference","Component","displayName","hookName","prefixMessage","diffObjType","differences","values","options","consoleLog","forEach","pathString","diffType","prevValue","nextValue","consoleGroup","diffNameColor","diffPathColor","consoleGroupEnd","prev","next","defaultNotifier","updateInfo","prevProps","prevState","prevHook","nextProps","nextState","nextHook","reason","ownerDataMap","logOnDifferentValues","whyDidYouRender","propsDifferences","some","diff","stateDifferences","hookDifferences","shouldLog","titleColor","ownerDifferences","prevOwnerData","nextOwnerData","props","state","i","hooks","createDefaultNotifier","hotReloadBufferMs","module","hot","addStatusHandler","status","setTimeout","emptyFn","getDisplayName","name","render","_isString","accumulator","initAccum","fromRight","keysFunc","iterable","createBaseFor","n","propertyIsEnumerable","baseIsArguments","freeExports","exports","nodeType","freeModule","Buffer","isBuffer","stubFalse","reIsUint","typedArrayTags","isLength","freeProcess","process","nodeUtil","types","require","binding","nodeIsTypedArray","isTypedArray","baseUnary","baseIsTypedArray","inherited","isArr","isArg","isArguments","isBuff","isType","skipIndexes","baseTimes","String","isIndex","Ctor","constructor","transform","arg","overArg","isPrototype","nativeKeys","isArrayLike","arrayLikeKeys","baseKeys","eachFunc","collection","createBaseEach","baseFor","pairs","LARGE_ARRAY_SIZE","Stack","stackClear","stackDelete","stackGet","stackHas","stackSet","SetCache","add","setCacheAdd","setCacheHas","predicate","bitmask","customizer","equalFunc","stack","isPartial","arrLength","othLength","stacked","seen","arrValue","othValue","compared","arraySome","othIndex","cacheHas","Uint8Array","symbolValueOf","valueOf","byteLength","byteOffset","buffer","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","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","equalByTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","equalObjects","baseIsEqual","baseIsEqualDeep","source","matchData","noCustomizer","srcValue","COMPARE_PARTIAL_FLAG","isStrictComparable","getMatchData","matchesStrictComparable","baseIsMatch","hasFunc","hasPath","baseHasIn","hasIn","baseProperty","basePropertyDeep","identity","baseMatchesProperty","baseMatches","property","arrayReduce","baseReduce","baseIteratee","baseEach","baseHas","nodeIsSet","isSet","baseIsSet","nodeIsRegExp","isRegExp","baseIsRegExp","nodeIsDate","isDate","baseIsDate","getPrototypeOf","objectCtorString","proto","getPrototype","hasElementType","Element","REACT_ELEMENT_TYPE","isReactElement","$$typeof","trackDiff","a","b","diffsAccumulator","calculateDeepEqualDiffs","initialPathString","diffs","accumulateDeepEqualDiffs","_isArray","arrayLength","arrayItemDiffs","numberOfDeepEqualsItems","diffEquals","_isSet","valA","_isDate","getTime","Date","_isRegExp","reactElementPropsAreDeepEqual","_isFunction","_isPlainObject","_keys","keysLength","_has","objectValuesDiffs","numberOfDeepEqualsObjectValues","deepEquals","error","console","warn","emptyObject","findObjectsDifferences","userPrevObj","userNextObj","shallow","prevObj","nextObj","keysOfBothObjects","_reduce","deepEqualDiffs","getUpdateReason","getUpdateInfo","isReactClassComponent","isReactComponent","isMemoComponent","isForwardRefComponent","shouldTrack","React","isHookChange","exclude","regex","shouldExclude","trackHooks","trackAllPureComponents","PureComponent","include","shouldInclude","thisArg","nativeMax","Math","max","start","otherArgs","defineProperty","configurable","enumerable","constant","writable","nativeNow","now","count","lastCalled","stamp","remaining","shortOut","baseSetToString","setToString","overRest","nativeKeysIn","isProto","baseKeysIn","baseRest","sources","guard","isIterateeCall","keysIn","propsIndex","propsLength","patchClassComponent","ClassComponent","WDYRPatchedClassComponent","context","_WDYR","renderNumber","origRender","super","_this","isStrictMode","reactComponentInstance","reactInternalFiber","_reactInternalFiber","mode","checkIfInsideAStrictModeTree","notifier","patchFunctionalOrStrComponent","FunctionalOrStringComponent","isPure","FunctionalComponent","componentTypeStr","createElement","getFunctionalComponentFromStringComponent","WDYRFunctionalComponent","ref","useRef","current","notifiedByHooks","ComponentForHooksTracking","initialHookValue","trackHookChanges","hookResult","hooksRef","hookPath","_get","ComponentHookDispatchedFromInstance","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","ReactCurrentOwner","prevHookResultRef","prevHookResult","notification","createPatchedComponent","componentsMap","patchMemoComponent","MemoComponent","InnerMemoComponent","isInnerMemoComponentAClassComponent","isInnerMemoComponentForwardRefs","isInnerMemoComponentAnotherMemoComponent","WrappedFunctionalComponent","PatchedInnerComponent","WDYRMemoizedFunctionalComponent","memo","forwardRef","compare","ForwardRefComponent","InnerForwardRefComponent","isInnerComponentMemoized","WDYRWrappedByReactForwardRefFunctionalComponent","WDYRForwardRefFunctionalComponent","patchForwardRefComponent","getPatchedComponent","WDYRPatchedComponent","hooksConfig","useState","useReducer","useContext","useMemo","userOptions","group","groupEnd","collapseGroups","groupCollapsed","onlyLogs","log","logOwnerReasons","trackExtraHooks","normalizeOptions","origCreateElement","origCreateFactory","createFactory","currentOwner","componentNameOrComponent","isShouldTrack","rest","customName","element","OwnerInstance","pendingProps","stateNode","errorInfo","assign","factory","bind","nativeHooks","hookTrackingConfig","hookParent","originalHook","newHookName","toUpperCase","slice","newHook","__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/isArray.js","../../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/isObjectLike.js","../../node_modules/lodash/isSymbol.js","../../node_modules/lodash/_isKey.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/_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/_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/_Map.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/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","../../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/_createBaseFor.js","../../node_modules/lodash/_baseFor.js","../../node_modules/lodash/_baseTimes.js","../../node_modules/lodash/_baseIsArguments.js","../../node_modules/lodash/isArguments.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/_createBaseEach.js","../../node_modules/lodash/_baseEach.js","../../node_modules/lodash/_baseForOwn.js","../../node_modules/lodash/_stackClear.js","../../node_modules/lodash/_stackDelete.js","../../node_modules/lodash/_stackGet.js","../../node_modules/lodash/_stackHas.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/_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/_baseReduce.js","../../node_modules/lodash/reduce.js","../../node_modules/lodash/_baseHas.js","../../node_modules/lodash/has.js","../../node_modules/lodash/_baseIsSet.js","../../node_modules/lodash/isSet.js","../../node_modules/lodash/_baseIsRegExp.js","../../node_modules/lodash/isRegExp.js","../../node_modules/lodash/_baseIsDate.js","../../node_modules/lodash/isDate.js","../../node_modules/lodash/_getPrototype.js","../../node_modules/lodash/isPlainObject.js","../../src/calculateDeepEqualDiffs.js","../../src/findObjectsDifferences.js","../../src/getUpdateInfo.js","../../src/utils.js","../../src/shouldTrack.js","../../node_modules/lodash/_apply.js","../../node_modules/lodash/_overRest.js","../../node_modules/lodash/constant.js","../../node_modules/lodash/_defineProperty.js","../../node_modules/lodash/_baseSetToString.js","../../node_modules/lodash/_shortOut.js","../../node_modules/lodash/_setToString.js","../../node_modules/lodash/_baseRest.js","../../node_modules/lodash/_isIterateeCall.js","../../node_modules/lodash/_nativeKeysIn.js","../../node_modules/lodash/_baseKeysIn.js","../../node_modules/lodash/keysIn.js","../../node_modules/lodash/defaults.js","../../src/patches/patchClassComponent.js","../../src/patches/patchFunctionalOrStrComponent.js","../../src/whyDidYouRender.js","../../src/patches/patchMemoComponent.js","../../src/patches/patchForwardRefComponent.js","../../src/index.js"],"sourcesContent":["/**\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","/** 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 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 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","/**\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\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","/**\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 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 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 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","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\r\n// copied from packages/shared/ReactSymbols.js in https://github.com/facebook/react\r\nconst hasSymbol = typeof Symbol === 'function' && Symbol.for\r\nexport const REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3\r\nexport const REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0\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 (remember that the syntax always produces a *NEW* immutable React element so a component that receives as props always re-renders.).',\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} result]` : `${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 its values are all equal.`,\r\n diffObjType === 'props' ?\r\n 'This could have been avoided by making the component pure, or by preventing its father from re-rendering.' :\r\n 'This usually means this component called setState when no changes in its 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, ownerDataMap} = 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\r\n if(reason.propsDifferences && reason.ownerDifferences){\r\n const prevOwnerData = ownerDataMap.get(prevProps)\r\n const nextOwnerData = ownerDataMap.get(nextProps)\r\n\r\n options.consoleGroup(`Rendered by ${nextOwnerData.displayName}`)\r\n let prefixMessage = 'Re-rendered because'\r\n\r\n if(reason.ownerDifferences.propsDifferences){\r\n logDifference({\r\n Component: nextOwnerData.Component,\r\n displayName: nextOwnerData.displayName,\r\n prefixMessage,\r\n diffObjType: 'props',\r\n differences: reason.ownerDifferences.propsDifferences,\r\n values: {prev: prevOwnerData.props, next: nextOwnerData.props},\r\n options\r\n })\r\n prefixMessage = 'And because'\r\n }\r\n\r\n if(reason.ownerDifferences.stateDifferences){\r\n logDifference({\r\n Component: nextOwnerData.Component,\r\n displayName: nextOwnerData.displayName,\r\n prefixMessage,\r\n diffObjType: 'state',\r\n differences: reason.ownerDifferences.stateDifferences,\r\n values: {prev: prevOwnerData.state, next: nextOwnerData.state},\r\n options\r\n })\r\n }\r\n\r\n if(reason.ownerDifferences.hookDifferences){\r\n reason.ownerDifferences.hookDifferences.forEach(({hookName, differences}, i) =>\r\n logDifference({\r\n Component: nextOwnerData.Component,\r\n displayName: nextOwnerData.displayName,\r\n prefixMessage,\r\n diffObjType: 'hook',\r\n differences,\r\n values: {prev: prevOwnerData.hooks[i].result, next: nextOwnerData.hooks[i].result},\r\n hookName,\r\n options\r\n })\r\n )\r\n }\r\n options.consoleGroupEnd()\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(typeof(module) !== 'undefined' && 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 ('hotReloadBufferMs' in userOptions) ? 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 logOwnerReasons: false,\r\n trackHooks: true,\r\n titleColor: '#058',\r\n diffNameColor: 'blue',\r\n diffPathColor: 'red',\r\n trackExtraHooks: [],\r\n trackAllPureComponents: false,\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 (type.render && getDisplayName(type.render)) ||\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","/**\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","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 * 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 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","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","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 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","/**\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","/**\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 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 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","var overArg = require('./_overArg');\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nmodule.exports = getPrototype;\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","import {isArray, isPlainObject, isDate, isRegExp, isFunction, isSet, 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 arrayLength = a.length\r\n if(arrayLength !== b.length){\r\n return trackDiff([...a], [...b], diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n const arrayItemDiffs = []\r\n let numberOfDeepEqualsItems = 0\r\n for(let i = arrayLength; i--; i > 0){\r\n const diffEquals = accumulateDeepEqualDiffs(a[i], b[i], arrayItemDiffs, `${pathString}[${i}]`)\r\n if(diffEquals){\r\n numberOfDeepEqualsItems++\r\n }\r\n }\r\n\r\n if(numberOfDeepEqualsItems === arrayLength){\r\n return trackDiff([...a], [...b], diffsAccumulator, pathString, diffTypes.deepEquals)\r\n }\r\n\r\n diffsAccumulator.push(...arrayItemDiffs)\r\n\r\n return trackDiff([...a], [...b], diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isSet(a) && isSet(b)){\r\n if(a.size !== b.size){\r\n return trackDiff(new Set(a), new Set(b), diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n for(const valA of a){\r\n if(!b.has(valA)){\r\n return trackDiff(new Set(a), new Set(b), diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n }\r\n\r\n return trackDiff(new Set(a), new Set(b), diffsAccumulator, pathString, diffTypes.deepEquals)\r\n }\r\n\r\n if(isDate(a) && isDate(b)){\r\n return a.getTime() === b.getTime() ?\r\n trackDiff(new Date(a), new Date(b), diffsAccumulator, pathString, diffTypes.date) :\r\n trackDiff(new Date(a), new Date(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 if(a.type !== b.type){\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n const reactElementPropsAreDeepEqual =\r\n accumulateDeepEqualDiffs(a.props, b.props, [], `${pathString}.props`)\r\n\r\n return reactElementPropsAreDeepEqual ?\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 keysLength = keys.length\r\n if(keysLength !== getKeys(b).length){\r\n return trackDiff({...a}, {...b}, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n for(let i = keysLength; i--; 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 const objectValuesDiffs = []\r\n let numberOfDeepEqualsObjectValues = 0\r\n for(let i = keysLength; i--; i > 0){\r\n const key = keys[i]\r\n const deepEquals = accumulateDeepEqualDiffs(a[key], b[key], objectValuesDiffs, `${pathString}.${key}`)\r\n if(deepEquals){\r\n numberOfDeepEqualsObjectValues++\r\n }\r\n }\r\n\r\n if(numberOfDeepEqualsObjectValues === keysLength){\r\n return trackDiff({...a}, {...b}, diffsAccumulator, pathString, diffTypes.deepEquals)\r\n }\r\n\r\n diffsAccumulator.push(...objectValuesDiffs)\r\n\r\n return 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 getOwnerDifferences({prevOwnerData, nextOwnerData}){\r\n if(!prevOwnerData || !nextOwnerData){\r\n return false\r\n }\r\n\r\n const hookDifferences = prevOwnerData.hooks.map(({hookName, result}, i) => ({\r\n hookName,\r\n differences: findObjectsDifferences(result, nextOwnerData.hooks[i].result, {shallow: false})\r\n }))\r\n\r\n return {\r\n propsDifferences: findObjectsDifferences(prevOwnerData.props, nextOwnerData.props),\r\n stateDifferences: findObjectsDifferences(prevOwnerData.state, nextOwnerData.state),\r\n hookDifferences: hookDifferences.length > 0 ? hookDifferences : false\r\n }\r\n}\r\n\r\nfunction getUpdateReason(prevProps, prevState, prevHook, nextProps, nextState, nextHook, ownerDataMap){\r\n const prevOwnerData = ownerDataMap.get(prevProps)\r\n const nextOwnerData = ownerDataMap.get(nextProps)\r\n\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 ownerDifferences: getOwnerDifferences({prevOwnerData, nextOwnerData})\r\n }\r\n}\r\n\r\nexport default function getUpdateInfo({Component, displayName, hookName, prevProps, prevState, prevHook, nextProps, nextState, nextHook, options, ownerDataMap}){\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 ownerDataMap,\r\n reason: getUpdateReason(prevProps, prevState, prevHook, nextProps, nextState, nextHook, ownerDataMap)\r\n }\r\n}\r\n","// copied from https://github.com/facebook/react/blob/master/packages/react-reconciler/src/ReactTypeOfMode.js\r\nimport {REACT_FORWARD_REF_TYPE, REACT_MEMO_TYPE} from './consts'\r\n\r\nconst StrictMode = 0b0001\r\n\r\n// based on \"findStrictRoot\" from https://github.com/facebook/react/blob/master/packages/react-reconciler/src/ReactStrictModeWarnings.js\r\n// notice: this is only used for class components. functional components doesn't re-rendered inside strict mode\r\nexport function checkIfInsideAStrictModeTree(reactComponentInstance){\r\n let reactInternalFiber = reactComponentInstance && reactComponentInstance._reactInternalFiber\r\n while(reactInternalFiber){\r\n if(reactInternalFiber.mode & StrictMode){\r\n return true\r\n }\r\n reactInternalFiber = reactInternalFiber.return\r\n }\r\n return false\r\n}\r\n\r\nexport function isReactClassComponent(Component){\r\n return Component.prototype && !!Component.prototype.isReactComponent\r\n}\r\n\r\nexport function isMemoComponent(Component){\r\n return Component.$$typeof === REACT_MEMO_TYPE\r\n}\r\n\r\nexport function isForwardRefComponent(Component){\r\n return Component.$$typeof === REACT_FORWARD_REF_TYPE\r\n}\r\n","import {isMemoComponent} from './utils'\r\n\r\nfunction 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, React, isHookChange}){\r\n if(shouldExclude(displayName, options)){\r\n return false\r\n }\r\n\r\n if(Component.whyDidYouRender === false){\r\n return false\r\n }\r\n\r\n if(isHookChange && (\r\n Component.whyDidYouRender && Component.whyDidYouRender.trackHooks === false\r\n )){\r\n return false\r\n }\r\n\r\n return !!(\r\n Component.whyDidYouRender || (\r\n options.trackAllPureComponents && (\r\n (Component && Component.prototype instanceof React.PureComponent) ||\r\n isMemoComponent(Component)\r\n )\r\n ) ||\r\n shouldInclude(displayName, options)\r\n )\r\n}\r\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 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 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 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","/**\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 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","import {defaults} from 'lodash'\r\n\r\nimport {checkIfInsideAStrictModeTree} from '../utils'\r\nimport getUpdateInfo from '../getUpdateInfo'\r\n\r\nexport default function patchClassComponent(ClassComponent, displayName, React, options, ownerDataMap){\r\n class WDYRPatchedClassComponent extends ClassComponent{\r\n constructor(props, context){\r\n super(props, context)\r\n\r\n this._WDYR = {\r\n renderNumber: 0\r\n }\r\n\r\n const origRender = super.render || this.render\r\n // this probably means render is an arrow function or this.render.bind(this) was called on the original class\r\n const renderIsABindedFunction = origRender !== ClassComponent.prototype.render\r\n if(renderIsABindedFunction){\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 this._WDYR.renderNumber++\r\n\r\n if(!('isStrictMode' in this._WDYR)){\r\n this._WDYR.isStrictMode = checkIfInsideAStrictModeTree(this)\r\n }\r\n\r\n // in strict mode- ignore every other render\r\n if(!(this._WDYR.isStrictMode && this._WDYR.renderNumber % 2 === 1)){\r\n if(this._WDYR.prevProps){\r\n const updateInfo = getUpdateInfo({\r\n Component: ClassComponent,\r\n displayName,\r\n prevProps: this._WDYR.prevProps,\r\n prevState: this._WDYR.prevState,\r\n nextProps: this.props,\r\n nextState: this.state,\r\n options,\r\n ownerDataMap\r\n })\r\n\r\n options.notifier(updateInfo)\r\n }\r\n\r\n this._WDYR.prevProps = this.props\r\n this._WDYR.prevState = this.state\r\n }\r\n\r\n return super.render ? super.render() : null\r\n }\r\n }\r\n\r\n try{\r\n WDYRPatchedClassComponent.displayName = displayName\r\n }catch(e){\r\n // not crucial if displayName couldn't be set\r\n }\r\n\r\n defaults(WDYRPatchedClassComponent, ClassComponent)\r\n\r\n return WDYRPatchedClassComponent\r\n}\r\n","import {defaults} from 'lodash'\r\n\r\nimport getUpdateInfo from '../getUpdateInfo'\r\n\r\nconst getFunctionalComponentFromStringComponent = (componentTypeStr, React) => props => (\r\n React.createElement(componentTypeStr, props)\r\n)\r\n\r\nexport default function patchFunctionalOrStrComponent(FunctionalOrStringComponent, isPure, displayName, React, options, ownerDataMap){\r\n const FunctionalComponent = typeof(FunctionalOrStringComponent) === 'string' ?\r\n getFunctionalComponentFromStringComponent(FunctionalOrStringComponent, React) :\r\n FunctionalOrStringComponent\r\n\r\n function WDYRFunctionalComponent(){\r\n const nextProps = arguments[0]\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 updateInfo = getUpdateInfo({\r\n Component: FunctionalComponent,\r\n displayName,\r\n prevProps,\r\n nextProps,\r\n options,\r\n ownerDataMap\r\n })\r\n\r\n const notifiedByHooks = (\r\n !updateInfo.reason.propsDifferences || (\r\n (isPure && updateInfo.reason.propsDifferences.length === 0)\r\n )\r\n )\r\n\r\n if(!notifiedByHooks){\r\n options.notifier(updateInfo)\r\n }\r\n }\r\n\r\n return FunctionalComponent(...arguments)\r\n }\r\n\r\n try{\r\n WDYRFunctionalComponent.displayName = displayName\r\n }catch(e){\r\n // not crucial if displayName couldn't be set\r\n }\r\n\r\n WDYRFunctionalComponent.ComponentForHooksTracking = FunctionalComponent\r\n defaults(WDYRFunctionalComponent, FunctionalComponent)\r\n\r\n return WDYRFunctionalComponent\r\n}\r\n","import {get} 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\nimport patchClassComponent from './patches/patchClassComponent'\r\nimport patchFunctionalOrStrComponent from './patches/patchFunctionalOrStrComponent'\r\nimport patchMemoComponent from './patches/patchMemoComponent'\r\nimport patchForwardRefComponent from './patches/patchForwardRefComponent'\r\n\r\nimport {isForwardRefComponent, isMemoComponent, isReactClassComponent} from './utils'\r\n\r\nconst initialHookValue = Symbol('initial-hook-value')\r\nfunction trackHookChanges(hookName, {path: hookPath}, hookResult, React, options, ownerDataMap, hooksRef){\r\n const nextHook = hookPath ? get(hookResult, hookPath) : hookResult\r\n hooksRef.current.push({hookName, result: nextHook})\r\n const ComponentHookDispatchedFromInstance = (\r\n React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED &&\r\n React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner.current\r\n )\r\n\r\n const prevHookResultRef = React.useRef(initialHookValue)\r\n\r\n if(!ComponentHookDispatchedFromInstance){\r\n return hookResult\r\n }\r\n\r\n const Component = ComponentHookDispatchedFromInstance.type.ComponentForHooksTracking || ComponentHookDispatchedFromInstance.type\r\n const displayName = getDisplayName(Component)\r\n\r\n const isShouldTrack = shouldTrack({Component, displayName, options, React, isHookChange: true})\r\n if(!isShouldTrack){\r\n return hookResult\r\n }\r\n\r\n const prevHookResult = prevHookResultRef.current\r\n prevHookResultRef.current = hookResult\r\n\r\n if(prevHookResult !== initialHookValue){\r\n const notification = getUpdateInfo({\r\n Component: Component,\r\n displayName,\r\n hookName,\r\n prevHook: hookPath ? get(prevHookResult, hookPath) : prevHookResult,\r\n nextHook,\r\n options,\r\n ownerDataMap\r\n })\r\n\r\n if(notification.reason.hookDifferences){\r\n options.notifier(notification)\r\n }\r\n }\r\n\r\n return hookResult\r\n}\r\n\r\nfunction createPatchedComponent(componentsMap, Component, displayName, React, options, ownerDataMap){\r\n if(isMemoComponent(Component)){\r\n return patchMemoComponent(Component, displayName, React, options, ownerDataMap)\r\n }\r\n\r\n if(isForwardRefComponent(Component)){\r\n return patchForwardRefComponent(Component, displayName, React, options, ownerDataMap)\r\n }\r\n\r\n if(isReactClassComponent(Component)){\r\n return patchClassComponent(Component, displayName, React, options, ownerDataMap)\r\n }\r\n\r\n return patchFunctionalOrStrComponent(Component, false, displayName, React, options, ownerDataMap)\r\n}\r\n\r\nfunction getPatchedComponent(componentsMap, Component, displayName, React, options, ownerDataMap){\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, ownerDataMap)\r\n\r\n componentsMap.set(Component, WDYRPatchedComponent)\r\n return WDYRPatchedComponent\r\n}\r\n\r\nfunction getIsSupportedComponentType(Comp){\r\n if(!Comp){\r\n return false\r\n }\r\n\r\n if(typeof Comp === 'function'){\r\n return true\r\n }\r\n\r\n if(isMemoComponent(Comp)){\r\n return getIsSupportedComponentType(Comp.type)\r\n }\r\n\r\n if(isForwardRefComponent(Comp)){\r\n return getIsSupportedComponentType(Comp.render)\r\n }\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 const ownerDataMap = new WeakMap()\r\n const hooksRef = {current: []}\r\n\r\n // Intercept assignments to ReactCurrentOwner.current and reset hooksRef\r\n let currentOwner = null\r\n if(React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED){\r\n Object.defineProperty(React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner, 'current', {\r\n get(){\r\n return currentOwner\r\n },\r\n set(value){\r\n currentOwner = value\r\n hooksRef.current = []\r\n }\r\n })\r\n }\r\n\r\n React.createElement = function(componentNameOrComponent, ...rest){\r\n let isShouldTrack = null\r\n let displayName = null\r\n let WDYRPatchedComponent = null\r\n\r\n try{\r\n isShouldTrack = (\r\n getIsSupportedComponentType(componentNameOrComponent) &&\r\n shouldTrack({Component: componentNameOrComponent, displayName: getDisplayName(componentNameOrComponent), React, options})\r\n )\r\n\r\n if(isShouldTrack){\r\n displayName = (\r\n componentNameOrComponent &&\r\n componentNameOrComponent.whyDidYouRender &&\r\n componentNameOrComponent.whyDidYouRender.customName ||\r\n getDisplayName(componentNameOrComponent)\r\n )\r\n\r\n WDYRPatchedComponent = getPatchedComponent(componentsMap, componentNameOrComponent, displayName, React, options, ownerDataMap)\r\n\r\n const element = origCreateElement.apply(React, [WDYRPatchedComponent, ...rest])\r\n if(options.logOwnerReasons){\r\n const OwnerInstance = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner.current\r\n if(OwnerInstance){\r\n const Component = OwnerInstance.type.ComponentForHooksTracking || OwnerInstance.type\r\n const displayName = getDisplayName(Component)\r\n ownerDataMap.set(element.props, {\r\n Component,\r\n displayName,\r\n props: OwnerInstance.pendingProps,\r\n state: OwnerInstance.stateNode != null ? OwnerInstance.stateNode.state : null,\r\n hooks: hooksRef.current\r\n })\r\n }\r\n }\r\n\r\n return element\r\n }\r\n }\r\n catch(e){\r\n options.consoleLog('whyDidYouRender error. Please file a bug at https://github.com/welldone-software/why-did-you-render/issues.', {\r\n errorInfo: {\r\n error: e,\r\n componentNameOrComponent,\r\n rest,\r\n options,\r\n isShouldTrack,\r\n displayName,\r\n WDYRPatchedComponent\r\n }\r\n })\r\n }\r\n\r\n return origCreateElement.apply(React, [componentNameOrComponent, ...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 if(options.trackHooks){\r\n const nativeHooks = Object.entries(hooksConfig).map(([hookName, hookTrackingConfig]) => {\r\n return [React, hookName, hookTrackingConfig]\r\n })\r\n\r\n const hooksToTrack = [\r\n ...nativeHooks,\r\n ...options.trackExtraHooks\r\n ]\r\n\r\n hooksToTrack.forEach(([hookParent, hookName, hookTrackingConfig = {}]) => {\r\n const originalHook = hookParent[hookName]\r\n const newHookName = hookName[0].toUpperCase() + hookName.slice(1)\r\n const newHook = function(...args){\r\n const hookResult = originalHook.call(this, ...args)\r\n trackHookChanges(hookName, hookTrackingConfig, hookResult, React, options, ownerDataMap, hooksRef)\r\n return hookResult\r\n }\r\n Object.defineProperty(newHook, 'name', {value: newHookName, writable: false})\r\n Object.assign(newHook, {originalHook})\r\n hookParent[hookName] = newHook\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\r\n componentsMap = null\r\n\r\n const hooksToRevert = [\r\n ...Object.keys(hooksConfig).map(hookName => [React, hookName]),\r\n ...options.trackExtraHooks\r\n ]\r\n hooksToRevert.forEach(([hookParent, hookName]) => {\r\n if(hookParent[hookName].originalHook){\r\n hookParent[hookName] = hookParent[hookName].originalHook\r\n }\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","import {defaults} from 'lodash'\r\n\r\nimport getDisplayName from '../getDisplayName'\r\n\r\nimport {isForwardRefComponent, isMemoComponent, isReactClassComponent} from '../utils'\r\nimport patchClassComponent from './patchClassComponent'\r\nimport patchFunctionalOrStrComponent from './patchFunctionalOrStrComponent'\r\n\r\nexport default function patchMemoComponent(MemoComponent, displayName, React, options, ownerDataMap){\r\n const {type: InnerMemoComponent} = MemoComponent\r\n\r\n const isInnerMemoComponentAClassComponent = isReactClassComponent(InnerMemoComponent)\r\n const isInnerMemoComponentForwardRefs = isForwardRefComponent(InnerMemoComponent)\r\n const isInnerMemoComponentAnotherMemoComponent = isMemoComponent(InnerMemoComponent)\r\n\r\n const WrappedFunctionalComponent = isInnerMemoComponentForwardRefs ?\r\n InnerMemoComponent.render :\r\n InnerMemoComponent\r\n\r\n const PatchedInnerComponent = isInnerMemoComponentAClassComponent ?\r\n patchClassComponent(WrappedFunctionalComponent, displayName, React, options, ownerDataMap) :\r\n (isInnerMemoComponentAnotherMemoComponent ?\r\n patchMemoComponent(WrappedFunctionalComponent, displayName, React, options, ownerDataMap) :\r\n patchFunctionalOrStrComponent(WrappedFunctionalComponent, true, displayName, React, options, ownerDataMap)\r\n )\r\n\r\n try{\r\n PatchedInnerComponent.displayName = getDisplayName(WrappedFunctionalComponent)\r\n }catch(e){\r\n // not crucial if displayName couldn't be set\r\n }\r\n\r\n PatchedInnerComponent.ComponentForHooksTracking = MemoComponent\r\n defaults(PatchedInnerComponent, WrappedFunctionalComponent)\r\n\r\n const WDYRMemoizedFunctionalComponent = React.memo(\r\n isInnerMemoComponentForwardRefs ? React.forwardRef(PatchedInnerComponent) : PatchedInnerComponent,\r\n MemoComponent.compare\r\n )\r\n\r\n try{\r\n WDYRMemoizedFunctionalComponent.displayName = displayName\r\n }catch(e){\r\n // not crucial if displayName couldn't be set\r\n }\r\n\r\n defaults(WDYRMemoizedFunctionalComponent, MemoComponent)\r\n\r\n return WDYRMemoizedFunctionalComponent\r\n}\r\n","import {defaults} from 'lodash'\r\n\r\nimport getDisplayName from '../getDisplayName'\r\nimport {isMemoComponent} from '../utils'\r\nimport patchFunctionalOrStrComponent from './patchFunctionalOrStrComponent'\r\n\r\nexport default function patchForwardRefComponent(ForwardRefComponent, displayName, React, options, ownerDataMap){\r\n const {render: InnerForwardRefComponent} = ForwardRefComponent\r\n\r\n const isInnerComponentMemoized = isMemoComponent(InnerForwardRefComponent)\r\n const WrappedFunctionalComponent = isInnerComponentMemoized ?\r\n InnerForwardRefComponent.type : InnerForwardRefComponent\r\n\r\n const WDYRWrappedByReactForwardRefFunctionalComponent = (\r\n patchFunctionalOrStrComponent(WrappedFunctionalComponent, isInnerComponentMemoized, displayName, React, options, ownerDataMap)\r\n )\r\n\r\n WDYRWrappedByReactForwardRefFunctionalComponent.displayName = getDisplayName(WrappedFunctionalComponent)\r\n WDYRWrappedByReactForwardRefFunctionalComponent.ComponentForHooksTracking = WrappedFunctionalComponent\r\n defaults(WDYRWrappedByReactForwardRefFunctionalComponent, WrappedFunctionalComponent)\r\n\r\n const WDYRForwardRefFunctionalComponent = React.forwardRef(\r\n isInnerComponentMemoized ?\r\n React.memo(WDYRWrappedByReactForwardRefFunctionalComponent, InnerForwardRefComponent.compare) :\r\n WDYRWrappedByReactForwardRefFunctionalComponent\r\n )\r\n\r\n try{\r\n WDYRForwardRefFunctionalComponent.displayName = displayName\r\n }catch(e){\r\n // not crucial if displayName couldn't be set\r\n }\r\n\r\n defaults(WDYRForwardRefFunctionalComponent, ForwardRefComponent)\r\n\r\n return WDYRForwardRefFunctionalComponent\r\n}\r\n","import whyDidYouRender from './whyDidYouRender'\r\nimport defaultNotifier from './defaultNotifier'\r\n\r\nwhyDidYouRender.defaultNotifier = defaultNotifier\r\nexport default whyDidYouRender\r\n"],"names":["Array","isArray","global","Object","freeSelf","self","freeGlobal","Function","root","Symbol","objectProto","prototype","hasOwnProperty","nativeObjectToString","toString","symToStringTag","toStringTag","undefined","value","isOwn","call","tag","unmasked","e","result","getRawTag","objectToString","isObjectLike","baseGetTag","reIsDeepProp","reIsPlainProp","object","type","isSymbol","test","uid","isObject","maskSrcKey","exec","coreJsData","keys","IE_PROTO","func","funcToString","reIsHostCtor","funcProto","reIsNative","RegExp","replace","isMasked","isFunction","toSource","key","getValue","baseIsNative","getNative","this","__data__","nativeCreate","size","has","data","Hash","entries","index","length","clear","entry","set","hashClear","hashDelete","get","hashGet","hashHas","hashSet","other","array","eq","splice","assocIndexOf","pop","push","ListCache","listCacheClear","listCacheDelete","listCacheGet","listCacheHas","listCacheSet","hash","map","Map","string","isKeyable","getMapData","MapCache","mapCacheClear","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","memoize","resolver","TypeError","memoized","args","arguments","apply","cache","Cache","rePropName","reEscapeChar","memoizeCapped","charCodeAt","match","number","quote","subString","iteratee","symbolProto","symbolToString","baseToString","arrayMap","isKey","stringToPath","path","castPath","toKey","defaultValue","baseGet","diffTypes","hasSymbol","REACT_MEMO_TYPE","REACT_FORWARD_REF_TYPE","diffTypesDescriptions","inHotReload","logDifference","Component","displayName","hookName","prefixMessage","diffObjType","differences","values","options","consoleLog","forEach","pathString","diffType","prevValue","nextValue","consoleGroup","diffNameColor","diffPathColor","consoleGroupEnd","prev","next","defaultNotifier","updateInfo","prevProps","prevState","prevHook","nextProps","nextState","nextHook","reason","ownerDataMap","logOnDifferentValues","whyDidYouRender","propsDifferences","some","diff","stateDifferences","hookDifferences","shouldLog","titleColor","ownerDifferences","prevOwnerData","nextOwnerData","props","state","i","hooks","createDefaultNotifier","hotReloadBufferMs","module","hot","addStatusHandler","status","setTimeout","emptyFn","getDisplayName","name","render","_isString","accumulator","initAccum","fromRight","keysFunc","iterable","createBaseFor","n","propertyIsEnumerable","baseIsArguments","freeExports","exports","nodeType","freeModule","Buffer","isBuffer","stubFalse","reIsUint","typedArrayTags","isLength","freeProcess","process","nodeUtil","types","require","binding","nodeIsTypedArray","isTypedArray","baseUnary","baseIsTypedArray","inherited","isArr","isArg","isArguments","isBuff","isType","skipIndexes","baseTimes","String","isIndex","Ctor","constructor","transform","arg","overArg","isPrototype","nativeKeys","isArrayLike","arrayLikeKeys","baseKeys","eachFunc","collection","createBaseEach","baseFor","pairs","LARGE_ARRAY_SIZE","Stack","stackClear","stackDelete","stackGet","stackHas","stackSet","SetCache","add","setCacheAdd","setCacheHas","predicate","bitmask","customizer","equalFunc","stack","isPartial","arrLength","othLength","stacked","seen","arrValue","othValue","compared","arraySome","othIndex","cacheHas","Uint8Array","symbolValueOf","valueOf","byteLength","byteOffset","buffer","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","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","equalByTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","equalObjects","baseIsEqual","baseIsEqualDeep","source","matchData","noCustomizer","srcValue","COMPARE_PARTIAL_FLAG","isStrictComparable","getMatchData","matchesStrictComparable","baseIsMatch","hasFunc","hasPath","baseHasIn","hasIn","baseProperty","basePropertyDeep","identity","baseMatchesProperty","baseMatches","property","arrayReduce","baseReduce","baseIteratee","baseEach","baseHas","nodeIsSet","isSet","baseIsSet","nodeIsRegExp","isRegExp","baseIsRegExp","nodeIsDate","isDate","baseIsDate","getPrototypeOf","objectCtorString","proto","getPrototype","hasElementType","Element","REACT_ELEMENT_TYPE","isReactElement","$$typeof","trackDiff","a","b","diffsAccumulator","calculateDeepEqualDiffs","initialPathString","diffs","accumulateDeepEqualDiffs","_isArray","arrayLength","arrayItemDiffs","numberOfDeepEqualsItems","diffEquals","_isSet","valA","_isDate","getTime","Date","_isRegExp","reactElementPropsAreDeepEqual","_isFunction","_isPlainObject","_keys","keysLength","_has","objectValuesDiffs","numberOfDeepEqualsObjectValues","deepEquals","error","console","warn","emptyObject","findObjectsDifferences","userPrevObj","userNextObj","shallow","prevObj","nextObj","keysOfBothObjects","_reduce","deepEqualDiffs","getOwnerDifferences","getUpdateReason","getUpdateInfo","isReactClassComponent","isReactComponent","isMemoComponent","isForwardRefComponent","shouldTrack","React","isHookChange","exclude","regex","shouldExclude","trackHooks","trackAllPureComponents","PureComponent","include","shouldInclude","thisArg","nativeMax","Math","max","start","otherArgs","defineProperty","configurable","enumerable","constant","writable","nativeNow","now","count","lastCalled","stamp","remaining","shortOut","baseSetToString","setToString","overRest","nativeKeysIn","isProto","baseKeysIn","baseRest","sources","guard","isIterateeCall","keysIn","propsIndex","propsLength","patchClassComponent","ClassComponent","WDYRPatchedClassComponent","context","_WDYR","renderNumber","origRender","super","_this","isStrictMode","reactComponentInstance","reactInternalFiber","_reactInternalFiber","mode","checkIfInsideAStrictModeTree","notifier","patchFunctionalOrStrComponent","FunctionalOrStringComponent","isPure","FunctionalComponent","componentTypeStr","createElement","getFunctionalComponentFromStringComponent","WDYRFunctionalComponent","ref","useRef","current","notifiedByHooks","ComponentForHooksTracking","initialHookValue","trackHookChanges","hookResult","hooksRef","hookPath","_get","ComponentHookDispatchedFromInstance","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","ReactCurrentOwner","prevHookResultRef","prevHookResult","notification","createPatchedComponent","componentsMap","patchMemoComponent","MemoComponent","InnerMemoComponent","isInnerMemoComponentAClassComponent","isInnerMemoComponentForwardRefs","isInnerMemoComponentAnotherMemoComponent","WrappedFunctionalComponent","PatchedInnerComponent","WDYRMemoizedFunctionalComponent","memo","forwardRef","compare","ForwardRefComponent","InnerForwardRefComponent","isInnerComponentMemoized","WDYRWrappedByReactForwardRefFunctionalComponent","WDYRForwardRefFunctionalComponent","patchForwardRefComponent","getPatchedComponent","WDYRPatchedComponent","getIsSupportedComponentType","Comp","hooksConfig","useState","useReducer","useContext","useMemo","userOptions","group","groupEnd","collapseGroups","groupCollapsed","onlyLogs","log","logOwnerReasons","trackExtraHooks","normalizeOptions","origCreateElement","origCreateFactory","createFactory","currentOwner","componentNameOrComponent","isShouldTrack","rest","customName","element","OwnerInstance","pendingProps","stateNode","errorInfo","assign","factory","bind","nativeHooks","hookTrackingConfig","hookParent","originalHook","newHookName","toUpperCase","slice","newHook","__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 05e263d..57d8fc3 100644 --- a/dist/umd/whyDidYouRender.js +++ b/dist/umd/whyDidYouRender.js @@ -1,8 +1,8 @@ /** - * @welldone-software/why-did-you-render 4.2.2 + * @welldone-software/why-did-you-render 4.2.3 * MIT Licensed * Generated by Vitali Zaidman (https://github.com/vzaidman) - * Generated at 2020-05-20 + * Generated at 2020-05-30 */ (function (global, factory) { @@ -145,7 +145,7 @@ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); - return function () { + return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; @@ -263,9 +263,12 @@ throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } - function _createForOfIteratorHelper(o) { + function _createForOfIteratorHelper(o, allowArrayLike) { + var it; + if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { - if (Array.isArray(o) || (o = _unsupportedIterableToArray(o))) { + if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { + if (it) o = it; var i = 0; var F = function () {}; @@ -291,8 +294,7 @@ throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } - var it, - normalCompletion = true, + var normalCompletion = true, didErr = false, err; return { @@ -4094,6 +4096,31 @@ }, []); } + function getOwnerDifferences(_ref) { + var prevOwnerData = _ref.prevOwnerData, + nextOwnerData = _ref.nextOwnerData; + + if (!prevOwnerData || !nextOwnerData) { + return false; + } + + var hookDifferences = prevOwnerData.hooks.map(function (_ref2, i) { + var hookName = _ref2.hookName, + result = _ref2.result; + return { + hookName: hookName, + differences: findObjectsDifferences(result, nextOwnerData.hooks[i].result, { + shallow: false + }) + }; + }); + return { + propsDifferences: findObjectsDifferences(prevOwnerData.props, nextOwnerData.props), + stateDifferences: findObjectsDifferences(prevOwnerData.state, nextOwnerData.state), + hookDifferences: hookDifferences.length > 0 ? hookDifferences : false + }; + } + function getUpdateReason(prevProps, prevState, prevHook, nextProps, nextState, nextHook, ownerDataMap) { var prevOwnerData = ownerDataMap.get(prevProps); var nextOwnerData = ownerDataMap.get(nextProps); @@ -4103,35 +4130,25 @@ hookDifferences: findObjectsDifferences(prevHook, nextHook, { shallow: false }), - ownerDifferences: prevOwnerData != null && nextOwnerData != null ? { - propsDifferences: findObjectsDifferences(prevOwnerData.props, nextOwnerData.props), - stateDifferences: findObjectsDifferences(prevOwnerData.state, nextOwnerData.state), - hookDifferences: prevOwnerData.hooks.map(function (_ref, i) { - var hookName = _ref.hookName, - result = _ref.result; - return { - hookName: hookName, - differences: findObjectsDifferences(result, nextOwnerData.hooks[i].result, { - shallow: false - }) - }; - }) - } : false + ownerDifferences: getOwnerDifferences({ + prevOwnerData: prevOwnerData, + nextOwnerData: nextOwnerData + }) }; } - function getUpdateInfo(_ref2) { - var Component = _ref2.Component, - displayName = _ref2.displayName, - hookName = _ref2.hookName, - prevProps = _ref2.prevProps, - prevState = _ref2.prevState, - prevHook = _ref2.prevHook, - nextProps = _ref2.nextProps, - nextState = _ref2.nextState, - nextHook = _ref2.nextHook, - options = _ref2.options, - ownerDataMap = _ref2.ownerDataMap; + function getUpdateInfo(_ref3) { + var Component = _ref3.Component, + displayName = _ref3.displayName, + hookName = _ref3.hookName, + prevProps = _ref3.prevProps, + prevState = _ref3.prevState, + prevHook = _ref3.prevHook, + nextProps = _ref3.nextProps, + nextState = _ref3.nextState, + nextHook = _ref3.nextHook, + options = _ref3.options, + ownerDataMap = _ref3.ownerDataMap; return { Component: Component, displayName: displayName, @@ -4559,7 +4576,7 @@ var _super = _createSuper(WDYRPatchedClassComponent); function WDYRPatchedClassComponent(props, context) { - var _this; + var _thisSuper, _this; _classCallCheck(this, WDYRPatchedClassComponent); @@ -4568,7 +4585,7 @@ renderNumber: 0 }; - var origRender = _get(_getPrototypeOf(WDYRPatchedClassComponent.prototype), "render", _assertThisInitialized(_this)) || _this.render; // this probably means render is an arrow function or this.render.bind(this) was called on the original class + var origRender = _get((_thisSuper = _assertThisInitialized(_this), _getPrototypeOf(WDYRPatchedClassComponent.prototype)), "render", _thisSuper) || _this.render; // this probably means render is an arrow function or this.render.bind(this) was called on the original class var renderIsABindedFunction = origRender !== ClassComponent.prototype.render; @@ -4804,6 +4821,24 @@ return WDYRPatchedComponent; } + function getIsSupportedComponentType(Comp) { + if (!Comp) { + return false; + } + + if (typeof Comp === 'function') { + return true; + } + + if (isMemoComponent(Comp)) { + return getIsSupportedComponentType(Comp.type); + } + + if (isForwardRefComponent(Comp)) { + return getIsSupportedComponentType(Comp.render); + } + } + var hooksConfig = { useState: { path: '0' @@ -4848,7 +4883,7 @@ } try { - isShouldTrack = (typeof componentNameOrComponent === 'function' || isMemoComponent(componentNameOrComponent) || isForwardRefComponent(componentNameOrComponent)) && shouldTrack({ + isShouldTrack = getIsSupportedComponentType(componentNameOrComponent) && shouldTrack({ Component: componentNameOrComponent, displayName: getDisplayName(componentNameOrComponent), React: React, @@ -4863,7 +4898,7 @@ if (options.logOwnerReasons) { var OwnerInstance = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner.current; - if (OwnerInstance != null) { + if (OwnerInstance) { var Component = OwnerInstance.type.ComponentForHooksTracking || OwnerInstance.type; var _displayName = getDisplayName(Component); diff --git a/dist/umd/whyDidYouRender.min.js b/dist/umd/whyDidYouRender.min.js index 78ba265..8f16972 100644 --- a/dist/umd/whyDidYouRender.min.js +++ b/dist/umd/whyDidYouRender.min.js @@ -1,9 +1,9 @@ /** - * @welldone-software/why-did-you-render 4.2.2 + * @welldone-software/why-did-you-render 4.2.3 * MIT Licensed * Generated by Vitali Zaidman (https://github.com/vzaidman) - * Generated at 2020-05-20 + * Generated at 2020-05-30 */ -!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;re.length)&&(t=e.length);for(var r=0,n=new Array(t);r=e.length?{done:!0}:{done:!1,value:e[t++]}},e:function(e){throw e},f:r}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var n,o,a=!0,i=!1;return{s:function(){n=e[Symbol.iterator]()},n:function(){var e=n.next();return a=e.done,e},e:function(e){i=!0,o=e},f:function(){try{a||null==n.return||n.return()}finally{if(i)throw o}}}}var h=Array.isArray,d="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function b(e,t){return e(t={exports:{}},t.exports),t.exports}var m="object"==typeof d&&d&&d.Object===Object&&d,_="object"==typeof self&&self&&self.Object===Object&&self,g=m||_||Function("return this")(),j=g.Symbol,O=Object.prototype,w=O.hasOwnProperty,D=O.toString,S=j?j.toStringTag:void 0;var k=function(e){var t=w.call(e,S),r=e[S];try{e[S]=void 0;var n=!0}catch(e){}var o=D.call(e);return n&&(t?e[S]=r:delete e[S]),o},R=Object.prototype.toString;var E=function(e){return R.call(e)},N=j?j.toStringTag:void 0;var x=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":N&&N in Object(e)?k(e):E(e)};var P=function(e){return null!=e&&"object"==typeof e};var C=function(e){return"symbol"==typeof e||P(e)&&"[object Symbol]"==x(e)},T=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,A=/^\w*$/;var M=function(e,t){if(h(e))return!1;var r=typeof e;return!("number"!=r&&"symbol"!=r&&"boolean"!=r&&null!=e&&!C(e))||(A.test(e)||!T.test(e)||null!=t&&e in Object(t))};var I=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)};var Y,L=function(e){if(!I(e))return!1;var t=x(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t},H=g["__core-js_shared__"],z=(Y=/[^.]+$/.exec(H&&H.keys&&H.keys.IE_PROTO||""))?"Symbol(src)_1."+Y:"";var W=function(e){return!!z&&z in e},F=Function.prototype.toString;var U=function(e){if(null!=e){try{return F.call(e)}catch(e){}try{return e+""}catch(e){}}return""},$=/^\[object .+?Constructor\]$/,B=Function.prototype,V=Object.prototype,G=B.toString,q=V.hasOwnProperty,J=RegExp("^"+G.call(q).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");var K=function(e){return!(!I(e)||W(e))&&(L(e)?J:$).test(U(e))};var Q=function(e,t){return null==e?void 0:e[t]};var X=function(e,t){var r=Q(e,t);return K(r)?r:void 0},Z=X(Object,"create");var ee=function(){this.__data__=Z?Z(null):{},this.size=0};var te=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t},re=Object.prototype.hasOwnProperty;var ne=function(e){var t=this.__data__;if(Z){var r=t[e];return"__lodash_hash_undefined__"===r?void 0:r}return re.call(t,e)?t[e]:void 0},oe=Object.prototype.hasOwnProperty;var ae=function(e){var t=this.__data__;return Z?void 0!==t[e]:oe.call(t,e)};var ie=function(e,t){var r=this.__data__;return this.size+=this.has(e)?0:1,r[e]=Z&&void 0===t?"__lodash_hash_undefined__":t,this};function ce(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t-1};var de=function(e,t){var r=this.__data__,n=le(r,e);return n<0?(++this.size,r.push([e,t])):r[n][1]=t,this};function be(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t syntax always produces a *NEW* immutable React element so a component that receives as props always re-renders.)."),t(Fe,Je,"different functions with the same name."),Fe),et=!1;function tt(e){var r=e.Component,n=e.displayName,o=e.hookName,a=e.prefixMessage,i=e.diffObjType,c=e.differences,u=e.values,f=e.options;c&&c.length>0?(f.consoleLog(t({},n,r),"".concat(a," of ").concat(i," changes:")),c.forEach((function(e){var r=e.pathString,n=e.diffType,a=e.prevValue,c=e.nextValue;f.consoleGroup("%c".concat("hook"===i?"[hook ".concat(o," result]"):"".concat(i,"."),"%c").concat(r,"%c"),"color:".concat(f.diffNameColor,";"),"color:".concat(f.diffPathColor,";"),"color:default;"),f.consoleLog("".concat(Ze[n]," (more info at ").concat(o?"http://bit.ly/wdyr3":"http://bit.ly/wdyr02",")")),f.consoleLog(t({},"prev ".concat(r),a),"!==",t({},"next ".concat(r),c)),f.consoleGroupEnd()}))):c&&(f.consoleLog(t({},n,r),"".concat(a," the ").concat(i," object itself changed but its values are all equal."),"props"===i?"This could have been avoided by making the component pure, or by preventing its father from re-rendering.":"This usually means this component called setState when no changes in its state actually occurred.","More info at ".concat("http://bit.ly/wdyr02")),f.consoleLog("prev ".concat(i,":"),u.prev," !== ",u.next,":next ".concat(i)))}function rt(e){var r=e.Component,n=e.displayName,o=e.hookName,a=e.prevProps,i=e.prevState,c=e.prevHook,u=e.nextProps,f=e.nextState,s=e.nextHook,l=e.reason,p=e.options,v=e.ownerDataMap;if(function(e,t,r){return!et&&(!!r.logOnDifferentValues||(!(!t.whyDidYouRender||!t.whyDidYouRender.logOnDifferentValues)||!(e.propsDifferences&&e.propsDifferences.some((function(e){return e.diffType===$e}))||e.stateDifferences&&e.stateDifferences.some((function(e){return e.diffType===$e}))||e.hookDifferences&&e.hookDifferences.some((function(e){return e.diffType===$e})))))}(l,r,p)){p.consoleGroup("%c".concat(n),"color: ".concat(p.titleColor,";"));var y="Re-rendered because";if(l.propsDifferences&&(tt({Component:r,displayName:n,prefixMessage:y,diffObjType:"props",differences:l.propsDifferences,values:{prev:a,next:u},options:p}),y="And because"),l.stateDifferences&&tt({Component:r,displayName:n,prefixMessage:y,diffObjType:"state",differences:l.stateDifferences,values:{prev:i,next:f},options:p}),l.hookDifferences&&tt({Component:r,displayName:n,prefixMessage:y,diffObjType:"hook",differences:l.hookDifferences,values:{prev:c,next:s},hookName:o,options:p}),l.propsDifferences&&l.ownerDifferences){var h=v.get(a),d=v.get(u);p.consoleGroup("Rendered by ".concat(d.displayName));var b="Re-rendered because";l.ownerDifferences.propsDifferences&&(tt({Component:d.Component,displayName:d.displayName,prefixMessage:b,diffObjType:"props",differences:l.ownerDifferences.propsDifferences,values:{prev:h.props,next:d.props},options:p}),b="And because"),l.ownerDifferences.stateDifferences&&tt({Component:d.Component,displayName:d.displayName,prefixMessage:b,diffObjType:"state",differences:l.ownerDifferences.stateDifferences,values:{prev:h.state,next:d.state},options:p}),l.ownerDifferences.hookDifferences&&l.ownerDifferences.hookDifferences.forEach((function(e,t){var r=e.hookName,n=e.differences;return tt({Component:d.Component,displayName:d.displayName,prefixMessage:b,diffObjType:"hook",differences:n,values:{prev:h.hooks[t].result,next:d.hooks[t].result},hookName:r,options:p})})),p.consoleGroupEnd()}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("http://bit.ly/wdyr02")),p.consoleGroupEnd()}}function nt(e){return e&&"undefined"!=typeof module&&module.hot&&module.hot.addStatusHandler&&module.hot.addStatusHandler((function(t){"idle"===t&&(et=!0,setTimeout((function(){et=!1}),e))})),rt}var ot=function(){};var at=function(e){return"string"==typeof e||!h(e)&&P(e)&&"[object String]"==x(e)};function it(e){return e.displayName||e.name||e.type&&it(e.type)||e.render&&it(e.render)||(at(e)?e:void 0)}var ct=function(e,t,r,n){var o=-1,a=null==e?0:e.length;for(n&&a&&(r=e[++o]);++o-1&&e%1==0&&e-1&&e%1==0&&e<=9007199254740991},gt={};gt["[object Float32Array]"]=gt["[object Float64Array]"]=gt["[object Int8Array]"]=gt["[object Int16Array]"]=gt["[object Int32Array]"]=gt["[object Uint8Array]"]=gt["[object Uint8ClampedArray]"]=gt["[object Uint16Array]"]=gt["[object Uint32Array]"]=!0,gt["[object Arguments]"]=gt["[object Array]"]=gt["[object ArrayBuffer]"]=gt["[object Boolean]"]=gt["[object DataView]"]=gt["[object Date]"]=gt["[object Error]"]=gt["[object Function]"]=gt["[object Map]"]=gt["[object Number]"]=gt["[object Object]"]=gt["[object RegExp]"]=gt["[object Set]"]=gt["[object String]"]=gt["[object WeakMap]"]=!1;var jt=function(e){return P(e)&&_t(e.length)&&!!gt[x(e)]};var Ot=function(e){return function(t){return e(t)}},wt=b((function(e,t){var r=t&&!t.nodeType&&t,n=r&&e&&!e.nodeType&&e,o=n&&n.exports===r&&m.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})),Dt=wt&&wt.isTypedArray,St=Dt?Ot(Dt):jt,kt=Object.prototype.hasOwnProperty;var Rt=function(e,t){var r=h(e),n=!r&&yt(e),o=!r&&!n&&dt(e),a=!r&&!n&&!o&&St(e),i=r||n||o||a,c=i?ft(e.length,String):[],u=c.length;for(var f in e)!t&&!kt.call(e,f)||i&&("length"==f||o&&("offset"==f||"parent"==f)||a&&("buffer"==f||"byteLength"==f||"byteOffset"==f)||mt(f,u))||c.push(f);return c},Et=Object.prototype;var Nt=function(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||Et)};var xt=function(e,t){return function(r){return e(t(r))}},Pt=xt(Object.keys,Object),Ct=Object.prototype.hasOwnProperty;var Tt=function(e){if(!Nt(e))return Pt(e);var t=[];for(var r in Object(e))Ct.call(e,r)&&"constructor"!=r&&t.push(r);return t};var At=function(e){return null!=e&&_t(e.length)&&!L(e)};var Mt=function(e){return At(e)?Rt(e):Tt(e)};var It=function(e,t){return function(r,n){if(null==r)return r;if(!At(r))return e(r,n);for(var o=r.length,a=t?o:-1,i=Object(r);(t?a--:++ac))return!1;var f=a.get(e);if(f&&a.get(t))return f==t;var s=-1,l=!0,p=2&r?new Gt:void 0;for(a.set(e,t),a.set(t,e);++s3&&void 0!==arguments[3]?arguments[3]:"";if(t===r)return!0;if(!t||!r)return pn(t,r,o,a,$e);if(h(t)&&h(r)){var i=t.length;if(i!==r.length)return pn(l(t),l(r),o,a,$e);for(var c=[],u=0,f=i;f--;f>0){var s=e(t[f],r[f],c,"".concat(a,"[").concat(f,"]"));s&&u++}return u===i?pn(l(t),l(r),o,a,Be):(o.push.apply(o,c),pn(l(t),l(r),o,a,$e))}if(qr(t)&&qr(r)){if(t.size!==r.size)return pn(new Set(t),new Set(r),o,a,$e);var p,v=y(t);try{for(v.s();!(p=v.n()).done;){var d=p.value;if(!r.has(d))return pn(new Set(t),new Set(r),o,a,$e)}}catch(e){v.e(e)}finally{v.f()}return pn(new Set(t),new Set(r),o,a,Be)}if(en(t)&&en(r))return t.getTime()===r.getTime()?pn(new Date(t),new Date(r),o,a,Ve):pn(new Date(t),new Date(r),o,a,$e);if(Qr(t)&&Qr(r))return t.toString()===r.toString()?pn(t,r,o,a,Ge):pn(t,r,o,a,$e);if(fn&&t instanceof Element&&r instanceof Element)return pn(t,r,o,a,$e);if(ln(t)&&ln(r)){if(t.type!==r.type)return pn(t,r,o,a,$e);var b=e(t.props,r.props,[],"".concat(a,".props"));return pn(t,r,o,a,b?qe:$e)}if(L(t)&&L(r))return t.name===r.name?pn(t,r,o,a,Je):pn(t,r,o,a,$e);if(un(t)&&un(r)){var m=Mt(t),_=m.length;if(_!==Mt(r).length)return pn(n({},t),n({},r),o,a,$e);for(var g=_;g--;g>0)if(!Br(r,m[g]))return pn(n({},t),n({},r),o,a,$e);for(var j=[],O=0,w=_;w--;w>0){var D=m[w],S=e(t[D],r[D],j,"".concat(a,".").concat(D));S&&O++}return O===_?pn(n({},t),n({},r),o,a,Be):(o.push.apply(o,j),pn(n({},t),n({},r),o,a,$e))}return pn(t,r,o,a,$e)}(e,t,o,r),o}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 yn={};function hn(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=r.shallow,a=void 0===o||o;if(e===t)return!1;if(!a)return vn(e,t);var i=e||yn,c=t||yn,u=Object.keys(n(n({},i),c));return Fr(u,(function(e,t){var r=vn(i[t],c[t],t);return r&&(e=[].concat(l(e),l(r))),e}),[])}function dn(e,t,r,n,o,a,i){var c=i.get(e),u=i.get(n);return{propsDifferences:hn(e,n),stateDifferences:hn(t,o),hookDifferences:hn(r,a,{shallow:!1}),ownerDifferences:null!=c&&null!=u&&{propsDifferences:hn(c.props,u.props),stateDifferences:hn(c.state,u.state),hookDifferences:c.hooks.map((function(e,t){return{hookName:e.hookName,differences:hn(e.result,u.hooks[t].result,{shallow:!1})}}))}}}function bn(e){var t=e.Component,r=e.displayName,n=e.hookName,o=e.prevProps,a=e.prevState,i=e.prevHook,c=e.nextProps,u=e.nextState,f=e.nextHook,s=e.options,l=e.ownerDataMap;return{Component:t,displayName:r,hookName:n,prevProps:o,prevState:a,prevHook:i,nextProps:c,nextState:u,nextHook:f,options:s,ownerDataMap:l,reason:dn(o,a,i,c,u,f,l)}}function mn(e){return e.prototype&&!!e.prototype.isReactComponent}function _n(e){return e.$$typeof===Qe}function gn(e){return e.$$typeof===Xe}function jn(e){var t=e.Component,r=e.displayName,n=e.options,o=e.React,a=e.isHookChange;return!function(e,t){return t.exclude&&t.exclude.length>0&&t.exclude.some((function(t){return t.test(e)}))}(r,n)&&(!1!==t.whyDidYouRender&&((!a||!t.whyDidYouRender||!1!==t.whyDidYouRender.trackHooks)&&!!(t.whyDidYouRender||n.trackAllPureComponents&&(t&&t.prototype instanceof o.PureComponent||_n(t))||function(e,t){return t.include&&t.include.length>0&&t.include.some((function(t){return t.test(e)}))}(r,n))))}var On=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)},wn=Math.max;var Dn=function(e,t,r){return t=wn(void 0===t?e.length-1:t,0),function(){for(var n=arguments,o=-1,a=wn(n.length-t,0),i=Array(a);++o0){if(++t>=800)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}(Rn);var xn=function(e,t){return Nn(Dn(e,t,Ir),e+"")};var Pn=function(e,t,r){if(!I(r))return!1;var n=typeof t;return!!("number"==n?At(r)&&mt(t,r.length):"string"==n&&t in r)&&se(r[t],e)};var Cn=function(e){var t=[];if(null!=e)for(var r in Object(e))t.push(r);return t},Tn=Object.prototype.hasOwnProperty;var An=function(e){if(!I(e))return Cn(e);var t=Nt(e),r=[];for(var n in e)("constructor"!=n||!t&&Tn.call(e,n))&&r.push(n);return r};var Mn=function(e){return At(e)?Rt(e,!0):An(e)},In=Object.prototype,Yn=In.hasOwnProperty,Ln=xn((function(e,t){e=Object(e);var r=-1,n=t.length,o=n>2?t[2]:void 0;for(o&&Pn(t[0],t[1],o)&&(n=1);++r0&&void 0!==arguments[0]?arguments[0]:{},t=console.group,r=console.groupEnd;e.collapseGroups?t=console.groupCollapsed:e.onlyLogs&&(t=console.log,r=ot);var o=e.notifier||nt("hotReloadBufferMs"in e?e.hotReloadBufferMs:500);return n({include:null,exclude:null,notifier:o,onlyLogs:!1,consoleLog:console.log,consoleGroup:t,consoleGroupEnd:r,logOnDifferentValues:!1,logOwnerReasons:!1,trackHooks:!0,titleColor:"#058",diffNameColor:"blue",diffPathColor:"red",trackExtraHooks:[],trackAllPureComponents:!1},e)}(t),o=e.createElement,a=e.createFactory,i=new WeakMap,c=new WeakMap,u={current:[]},f=null;if(e.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED&&Object.defineProperty(e.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,"current",{get:function(){return f},set:function(e){f=e,u.current=[]}}),e.createElement=function(t){for(var n=null,a=null,f=null,s=arguments.length,l=new Array(s>1?s-1:0),p=1;pe.length)&&(t=e.length);for(var r=0,n=new Array(t);r=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,i=!0,c=!1;return{s:function(){r=e[Symbol.iterator]()},n:function(){var e=r.next();return i=e.done,e},e:function(e){c=!0,a=e},f:function(){try{i||null==r.return||r.return()}finally{if(c)throw a}}}}var h=Array.isArray,d="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function b(e,t){return e(t={exports:{}},t.exports),t.exports}var m="object"==typeof d&&d&&d.Object===Object&&d,_="object"==typeof self&&self&&self.Object===Object&&self,g=m||_||Function("return this")(),j=g.Symbol,O=Object.prototype,w=O.hasOwnProperty,D=O.toString,S=j?j.toStringTag:void 0;var k=function(e){var t=w.call(e,S),r=e[S];try{e[S]=void 0;var n=!0}catch(e){}var o=D.call(e);return n&&(t?e[S]=r:delete e[S]),o},R=Object.prototype.toString;var E=function(e){return R.call(e)},N=j?j.toStringTag:void 0;var x=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":N&&N in Object(e)?k(e):E(e)};var P=function(e){return null!=e&&"object"==typeof e};var C=function(e){return"symbol"==typeof e||P(e)&&"[object Symbol]"==x(e)},T=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,A=/^\w*$/;var M=function(e,t){if(h(e))return!1;var r=typeof e;return!("number"!=r&&"symbol"!=r&&"boolean"!=r&&null!=e&&!C(e))||(A.test(e)||!T.test(e)||null!=t&&e in Object(t))};var I=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)};var Y,L=function(e){if(!I(e))return!1;var t=x(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t},H=g["__core-js_shared__"],z=(Y=/[^.]+$/.exec(H&&H.keys&&H.keys.IE_PROTO||""))?"Symbol(src)_1."+Y:"";var W=function(e){return!!z&&z in e},F=Function.prototype.toString;var U=function(e){if(null!=e){try{return F.call(e)}catch(e){}try{return e+""}catch(e){}}return""},$=/^\[object .+?Constructor\]$/,B=Function.prototype,V=Object.prototype,G=B.toString,q=V.hasOwnProperty,J=RegExp("^"+G.call(q).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");var K=function(e){return!(!I(e)||W(e))&&(L(e)?J:$).test(U(e))};var Q=function(e,t){return null==e?void 0:e[t]};var X=function(e,t){var r=Q(e,t);return K(r)?r:void 0},Z=X(Object,"create");var ee=function(){this.__data__=Z?Z(null):{},this.size=0};var te=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t},re=Object.prototype.hasOwnProperty;var ne=function(e){var t=this.__data__;if(Z){var r=t[e];return"__lodash_hash_undefined__"===r?void 0:r}return re.call(t,e)?t[e]:void 0},oe=Object.prototype.hasOwnProperty;var ae=function(e){var t=this.__data__;return Z?void 0!==t[e]:oe.call(t,e)};var ie=function(e,t){var r=this.__data__;return this.size+=this.has(e)?0:1,r[e]=Z&&void 0===t?"__lodash_hash_undefined__":t,this};function ce(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t-1};var de=function(e,t){var r=this.__data__,n=le(r,e);return n<0?(++this.size,r.push([e,t])):r[n][1]=t,this};function be(e){var t=-1,r=null==e?0:e.length;for(this.clear();++t syntax always produces a *NEW* immutable React element so a component that receives as props always re-renders.)."),t(Fe,Je,"different functions with the same name."),Fe),et=!1;function tt(e){var r=e.Component,n=e.displayName,o=e.hookName,a=e.prefixMessage,i=e.diffObjType,c=e.differences,u=e.values,f=e.options;c&&c.length>0?(f.consoleLog(t({},n,r),"".concat(a," of ").concat(i," changes:")),c.forEach((function(e){var r=e.pathString,n=e.diffType,a=e.prevValue,c=e.nextValue;f.consoleGroup("%c".concat("hook"===i?"[hook ".concat(o," result]"):"".concat(i,"."),"%c").concat(r,"%c"),"color:".concat(f.diffNameColor,";"),"color:".concat(f.diffPathColor,";"),"color:default;"),f.consoleLog("".concat(Ze[n]," (more info at ").concat(o?"http://bit.ly/wdyr3":"http://bit.ly/wdyr02",")")),f.consoleLog(t({},"prev ".concat(r),a),"!==",t({},"next ".concat(r),c)),f.consoleGroupEnd()}))):c&&(f.consoleLog(t({},n,r),"".concat(a," the ").concat(i," object itself changed but its values are all equal."),"props"===i?"This could have been avoided by making the component pure, or by preventing its father from re-rendering.":"This usually means this component called setState when no changes in its state actually occurred.","More info at ".concat("http://bit.ly/wdyr02")),f.consoleLog("prev ".concat(i,":"),u.prev," !== ",u.next,":next ".concat(i)))}function rt(e){var r=e.Component,n=e.displayName,o=e.hookName,a=e.prevProps,i=e.prevState,c=e.prevHook,u=e.nextProps,f=e.nextState,s=e.nextHook,l=e.reason,p=e.options,v=e.ownerDataMap;if(function(e,t,r){return!et&&(!!r.logOnDifferentValues||(!(!t.whyDidYouRender||!t.whyDidYouRender.logOnDifferentValues)||!(e.propsDifferences&&e.propsDifferences.some((function(e){return e.diffType===$e}))||e.stateDifferences&&e.stateDifferences.some((function(e){return e.diffType===$e}))||e.hookDifferences&&e.hookDifferences.some((function(e){return e.diffType===$e})))))}(l,r,p)){p.consoleGroup("%c".concat(n),"color: ".concat(p.titleColor,";"));var y="Re-rendered because";if(l.propsDifferences&&(tt({Component:r,displayName:n,prefixMessage:y,diffObjType:"props",differences:l.propsDifferences,values:{prev:a,next:u},options:p}),y="And because"),l.stateDifferences&&tt({Component:r,displayName:n,prefixMessage:y,diffObjType:"state",differences:l.stateDifferences,values:{prev:i,next:f},options:p}),l.hookDifferences&&tt({Component:r,displayName:n,prefixMessage:y,diffObjType:"hook",differences:l.hookDifferences,values:{prev:c,next:s},hookName:o,options:p}),l.propsDifferences&&l.ownerDifferences){var h=v.get(a),d=v.get(u);p.consoleGroup("Rendered by ".concat(d.displayName));var b="Re-rendered because";l.ownerDifferences.propsDifferences&&(tt({Component:d.Component,displayName:d.displayName,prefixMessage:b,diffObjType:"props",differences:l.ownerDifferences.propsDifferences,values:{prev:h.props,next:d.props},options:p}),b="And because"),l.ownerDifferences.stateDifferences&&tt({Component:d.Component,displayName:d.displayName,prefixMessage:b,diffObjType:"state",differences:l.ownerDifferences.stateDifferences,values:{prev:h.state,next:d.state},options:p}),l.ownerDifferences.hookDifferences&&l.ownerDifferences.hookDifferences.forEach((function(e,t){var r=e.hookName,n=e.differences;return tt({Component:d.Component,displayName:d.displayName,prefixMessage:b,diffObjType:"hook",differences:n,values:{prev:h.hooks[t].result,next:d.hooks[t].result},hookName:r,options:p})})),p.consoleGroupEnd()}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("http://bit.ly/wdyr02")),p.consoleGroupEnd()}}function nt(e){return e&&"undefined"!=typeof module&&module.hot&&module.hot.addStatusHandler&&module.hot.addStatusHandler((function(t){"idle"===t&&(et=!0,setTimeout((function(){et=!1}),e))})),rt}var ot=function(){};var at=function(e){return"string"==typeof e||!h(e)&&P(e)&&"[object String]"==x(e)};function it(e){return e.displayName||e.name||e.type&&it(e.type)||e.render&&it(e.render)||(at(e)?e:void 0)}var ct=function(e,t,r,n){var o=-1,a=null==e?0:e.length;for(n&&a&&(r=e[++o]);++o-1&&e%1==0&&e-1&&e%1==0&&e<=9007199254740991},gt={};gt["[object Float32Array]"]=gt["[object Float64Array]"]=gt["[object Int8Array]"]=gt["[object Int16Array]"]=gt["[object Int32Array]"]=gt["[object Uint8Array]"]=gt["[object Uint8ClampedArray]"]=gt["[object Uint16Array]"]=gt["[object Uint32Array]"]=!0,gt["[object Arguments]"]=gt["[object Array]"]=gt["[object ArrayBuffer]"]=gt["[object Boolean]"]=gt["[object DataView]"]=gt["[object Date]"]=gt["[object Error]"]=gt["[object Function]"]=gt["[object Map]"]=gt["[object Number]"]=gt["[object Object]"]=gt["[object RegExp]"]=gt["[object Set]"]=gt["[object String]"]=gt["[object WeakMap]"]=!1;var jt=function(e){return P(e)&&_t(e.length)&&!!gt[x(e)]};var Ot=function(e){return function(t){return e(t)}},wt=b((function(e,t){var r=t&&!t.nodeType&&t,n=r&&e&&!e.nodeType&&e,o=n&&n.exports===r&&m.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})),Dt=wt&&wt.isTypedArray,St=Dt?Ot(Dt):jt,kt=Object.prototype.hasOwnProperty;var Rt=function(e,t){var r=h(e),n=!r&&yt(e),o=!r&&!n&&dt(e),a=!r&&!n&&!o&&St(e),i=r||n||o||a,c=i?ft(e.length,String):[],u=c.length;for(var f in e)!t&&!kt.call(e,f)||i&&("length"==f||o&&("offset"==f||"parent"==f)||a&&("buffer"==f||"byteLength"==f||"byteOffset"==f)||mt(f,u))||c.push(f);return c},Et=Object.prototype;var Nt=function(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||Et)};var xt=function(e,t){return function(r){return e(t(r))}},Pt=xt(Object.keys,Object),Ct=Object.prototype.hasOwnProperty;var Tt=function(e){if(!Nt(e))return Pt(e);var t=[];for(var r in Object(e))Ct.call(e,r)&&"constructor"!=r&&t.push(r);return t};var At=function(e){return null!=e&&_t(e.length)&&!L(e)};var Mt=function(e){return At(e)?Rt(e):Tt(e)};var It=function(e,t){return function(r,n){if(null==r)return r;if(!At(r))return e(r,n);for(var o=r.length,a=t?o:-1,i=Object(r);(t?a--:++ac))return!1;var f=a.get(e);if(f&&a.get(t))return f==t;var s=-1,l=!0,p=2&r?new Gt:void 0;for(a.set(e,t),a.set(t,e);++s3&&void 0!==arguments[3]?arguments[3]:"";if(t===r)return!0;if(!t||!r)return pn(t,r,o,a,$e);if(h(t)&&h(r)){var i=t.length;if(i!==r.length)return pn(l(t),l(r),o,a,$e);for(var c=[],u=0,f=i;f--;f>0){var s=e(t[f],r[f],c,"".concat(a,"[").concat(f,"]"));s&&u++}return u===i?pn(l(t),l(r),o,a,Be):(o.push.apply(o,c),pn(l(t),l(r),o,a,$e))}if(qr(t)&&qr(r)){if(t.size!==r.size)return pn(new Set(t),new Set(r),o,a,$e);var p,v=y(t);try{for(v.s();!(p=v.n()).done;){var d=p.value;if(!r.has(d))return pn(new Set(t),new Set(r),o,a,$e)}}catch(e){v.e(e)}finally{v.f()}return pn(new Set(t),new Set(r),o,a,Be)}if(en(t)&&en(r))return t.getTime()===r.getTime()?pn(new Date(t),new Date(r),o,a,Ve):pn(new Date(t),new Date(r),o,a,$e);if(Qr(t)&&Qr(r))return t.toString()===r.toString()?pn(t,r,o,a,Ge):pn(t,r,o,a,$e);if(fn&&t instanceof Element&&r instanceof Element)return pn(t,r,o,a,$e);if(ln(t)&&ln(r)){if(t.type!==r.type)return pn(t,r,o,a,$e);var b=e(t.props,r.props,[],"".concat(a,".props"));return pn(t,r,o,a,b?qe:$e)}if(L(t)&&L(r))return t.name===r.name?pn(t,r,o,a,Je):pn(t,r,o,a,$e);if(un(t)&&un(r)){var m=Mt(t),_=m.length;if(_!==Mt(r).length)return pn(n({},t),n({},r),o,a,$e);for(var g=_;g--;g>0)if(!Br(r,m[g]))return pn(n({},t),n({},r),o,a,$e);for(var j=[],O=0,w=_;w--;w>0){var D=m[w],S=e(t[D],r[D],j,"".concat(a,".").concat(D));S&&O++}return O===_?pn(n({},t),n({},r),o,a,Be):(o.push.apply(o,j),pn(n({},t),n({},r),o,a,$e))}return pn(t,r,o,a,$e)}(e,t,o,r),o}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 yn={};function hn(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=r.shallow,a=void 0===o||o;if(e===t)return!1;if(!a)return vn(e,t);var i=e||yn,c=t||yn,u=Object.keys(n(n({},i),c));return Fr(u,(function(e,t){var r=vn(i[t],c[t],t);return r&&(e=[].concat(l(e),l(r))),e}),[])}function dn(e){var t=e.prevOwnerData,r=e.nextOwnerData;if(!t||!r)return!1;var n=t.hooks.map((function(e,t){return{hookName:e.hookName,differences:hn(e.result,r.hooks[t].result,{shallow:!1})}}));return{propsDifferences:hn(t.props,r.props),stateDifferences:hn(t.state,r.state),hookDifferences:n.length>0&&n}}function bn(e,t,r,n,o,a,i){var c=i.get(e),u=i.get(n);return{propsDifferences:hn(e,n),stateDifferences:hn(t,o),hookDifferences:hn(r,a,{shallow:!1}),ownerDifferences:dn({prevOwnerData:c,nextOwnerData:u})}}function mn(e){var t=e.Component,r=e.displayName,n=e.hookName,o=e.prevProps,a=e.prevState,i=e.prevHook,c=e.nextProps,u=e.nextState,f=e.nextHook,s=e.options,l=e.ownerDataMap;return{Component:t,displayName:r,hookName:n,prevProps:o,prevState:a,prevHook:i,nextProps:c,nextState:u,nextHook:f,options:s,ownerDataMap:l,reason:bn(o,a,i,c,u,f,l)}}function _n(e){return e.prototype&&!!e.prototype.isReactComponent}function gn(e){return e.$$typeof===Qe}function jn(e){return e.$$typeof===Xe}function On(e){var t=e.Component,r=e.displayName,n=e.options,o=e.React,a=e.isHookChange;return!function(e,t){return t.exclude&&t.exclude.length>0&&t.exclude.some((function(t){return t.test(e)}))}(r,n)&&(!1!==t.whyDidYouRender&&((!a||!t.whyDidYouRender||!1!==t.whyDidYouRender.trackHooks)&&!!(t.whyDidYouRender||n.trackAllPureComponents&&(t&&t.prototype instanceof o.PureComponent||gn(t))||function(e,t){return t.include&&t.include.length>0&&t.include.some((function(t){return t.test(e)}))}(r,n))))}var wn=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)},Dn=Math.max;var Sn=function(e,t,r){return t=Dn(void 0===t?e.length-1:t,0),function(){for(var n=arguments,o=-1,a=Dn(n.length-t,0),i=Array(a);++o0){if(++t>=800)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}(En);var Pn=function(e,t){return xn(Sn(e,t,Ir),e+"")};var Cn=function(e,t,r){if(!I(r))return!1;var n=typeof t;return!!("number"==n?At(r)&&mt(t,r.length):"string"==n&&t in r)&&se(r[t],e)};var Tn=function(e){var t=[];if(null!=e)for(var r in Object(e))t.push(r);return t},An=Object.prototype.hasOwnProperty;var Mn=function(e){if(!I(e))return Tn(e);var t=Nt(e),r=[];for(var n in e)("constructor"!=n||!t&&An.call(e,n))&&r.push(n);return r};var In=function(e){return At(e)?Rt(e,!0):Mn(e)},Yn=Object.prototype,Ln=Yn.hasOwnProperty,Hn=Pn((function(e,t){e=Object(e);var r=-1,n=t.length,o=n>2?t[2]:void 0;for(o&&Cn(t[0],t[1],o)&&(n=1);++r0&&void 0!==arguments[0]?arguments[0]:{},t=console.group,r=console.groupEnd;e.collapseGroups?t=console.groupCollapsed:e.onlyLogs&&(t=console.log,r=ot);var o=e.notifier||nt("hotReloadBufferMs"in e?e.hotReloadBufferMs:500);return n({include:null,exclude:null,notifier:o,onlyLogs:!1,consoleLog:console.log,consoleGroup:t,consoleGroupEnd:r,logOnDifferentValues:!1,logOwnerReasons:!1,trackHooks:!0,titleColor:"#058",diffNameColor:"blue",diffPathColor:"red",trackExtraHooks:[],trackAllPureComponents:!1},e)}(t),o=e.createElement,a=e.createFactory,i=new WeakMap,c=new WeakMap,u={current:[]},f=null;if(e.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED&&Object.defineProperty(e.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,"current",{get:function(){return f},set:function(e){f=e,u.current=[]}}),e.createElement=function(t){for(var n=null,a=null,f=null,s=arguments.length,l=new Array(s>1?s-1:0),p=1;p 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","/** 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 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 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","/**\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\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","/**\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 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 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 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","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\r\n// copied from packages/shared/ReactSymbols.js in https://github.com/facebook/react\r\nconst hasSymbol = typeof Symbol === 'function' && Symbol.for\r\nexport const REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3\r\nexport const REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0\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 (remember that the syntax always produces a *NEW* immutable React element so a component that receives as props always re-renders.).',\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} result]` : `${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 its values are all equal.`,\r\n diffObjType === 'props' ?\r\n 'This could have been avoided by making the component pure, or by preventing its father from re-rendering.' :\r\n 'This usually means this component called setState when no changes in its 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, ownerDataMap} = 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\r\n if(reason.propsDifferences && reason.ownerDifferences){\r\n const prevOwnerData = ownerDataMap.get(prevProps)\r\n const nextOwnerData = ownerDataMap.get(nextProps)\r\n\r\n options.consoleGroup(`Rendered by ${nextOwnerData.displayName}`)\r\n let prefixMessage = 'Re-rendered because'\r\n\r\n if(reason.ownerDifferences.propsDifferences){\r\n logDifference({\r\n Component: nextOwnerData.Component,\r\n displayName: nextOwnerData.displayName,\r\n prefixMessage,\r\n diffObjType: 'props',\r\n differences: reason.ownerDifferences.propsDifferences,\r\n values: {prev: prevOwnerData.props, next: nextOwnerData.props},\r\n options\r\n })\r\n prefixMessage = 'And because'\r\n }\r\n\r\n if(reason.ownerDifferences.stateDifferences){\r\n logDifference({\r\n Component: nextOwnerData.Component,\r\n displayName: nextOwnerData.displayName,\r\n prefixMessage,\r\n diffObjType: 'state',\r\n differences: reason.ownerDifferences.stateDifferences,\r\n values: {prev: prevOwnerData.state, next: nextOwnerData.state},\r\n options\r\n })\r\n }\r\n\r\n if(reason.ownerDifferences.hookDifferences){\r\n reason.ownerDifferences.hookDifferences.forEach(({hookName, differences}, i) =>\r\n logDifference({\r\n Component: nextOwnerData.Component,\r\n displayName: nextOwnerData.displayName,\r\n prefixMessage,\r\n diffObjType: 'hook',\r\n differences,\r\n values: {prev: prevOwnerData.hooks[i].result, next: nextOwnerData.hooks[i].result},\r\n hookName,\r\n options\r\n })\r\n )\r\n }\r\n options.consoleGroupEnd()\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(typeof(module) !== 'undefined' && 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 ('hotReloadBufferMs' in userOptions) ? 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 logOwnerReasons: false,\r\n trackHooks: true,\r\n titleColor: '#058',\r\n diffNameColor: 'blue',\r\n diffPathColor: 'red',\r\n trackExtraHooks: [],\r\n trackAllPureComponents: false,\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 (type.render && getDisplayName(type.render)) ||\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","/**\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","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 * 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 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","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","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 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","/**\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","/**\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 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 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","var overArg = require('./_overArg');\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nmodule.exports = getPrototype;\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","import {isArray, isPlainObject, isDate, isRegExp, isFunction, isSet, 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 arrayLength = a.length\r\n if(arrayLength !== b.length){\r\n return trackDiff([...a], [...b], diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n const arrayItemDiffs = []\r\n let numberOfDeepEqualsItems = 0\r\n for(let i = arrayLength; i--; i > 0){\r\n const diffEquals = accumulateDeepEqualDiffs(a[i], b[i], arrayItemDiffs, `${pathString}[${i}]`)\r\n if(diffEquals){\r\n numberOfDeepEqualsItems++\r\n }\r\n }\r\n\r\n if(numberOfDeepEqualsItems === arrayLength){\r\n return trackDiff([...a], [...b], diffsAccumulator, pathString, diffTypes.deepEquals)\r\n }\r\n\r\n diffsAccumulator.push(...arrayItemDiffs)\r\n\r\n return trackDiff([...a], [...b], diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isSet(a) && isSet(b)){\r\n if(a.size !== b.size){\r\n return trackDiff(new Set(a), new Set(b), diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n for(const valA of a){\r\n if(!b.has(valA)){\r\n return trackDiff(new Set(a), new Set(b), diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n }\r\n\r\n return trackDiff(new Set(a), new Set(b), diffsAccumulator, pathString, diffTypes.deepEquals)\r\n }\r\n\r\n if(isDate(a) && isDate(b)){\r\n return a.getTime() === b.getTime() ?\r\n trackDiff(new Date(a), new Date(b), diffsAccumulator, pathString, diffTypes.date) :\r\n trackDiff(new Date(a), new Date(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 if(a.type !== b.type){\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n const reactElementPropsAreDeepEqual =\r\n accumulateDeepEqualDiffs(a.props, b.props, [], `${pathString}.props`)\r\n\r\n return reactElementPropsAreDeepEqual ?\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 keysLength = keys.length\r\n if(keysLength !== getKeys(b).length){\r\n return trackDiff({...a}, {...b}, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n for(let i = keysLength; i--; 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 const objectValuesDiffs = []\r\n let numberOfDeepEqualsObjectValues = 0\r\n for(let i = keysLength; i--; i > 0){\r\n const key = keys[i]\r\n const deepEquals = accumulateDeepEqualDiffs(a[key], b[key], objectValuesDiffs, `${pathString}.${key}`)\r\n if(deepEquals){\r\n numberOfDeepEqualsObjectValues++\r\n }\r\n }\r\n\r\n if(numberOfDeepEqualsObjectValues === keysLength){\r\n return trackDiff({...a}, {...b}, diffsAccumulator, pathString, diffTypes.deepEquals)\r\n }\r\n\r\n diffsAccumulator.push(...objectValuesDiffs)\r\n\r\n return 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, ownerDataMap){\r\n const prevOwnerData = ownerDataMap.get(prevProps)\r\n const nextOwnerData = ownerDataMap.get(nextProps)\r\n\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 ownerDifferences: prevOwnerData != null && nextOwnerData != null ? {\r\n propsDifferences: findObjectsDifferences(prevOwnerData.props, nextOwnerData.props),\r\n stateDifferences: findObjectsDifferences(prevOwnerData.state, nextOwnerData.state),\r\n hookDifferences: prevOwnerData.hooks.map(({hookName, result}, i) => ({\r\n hookName,\r\n differences: findObjectsDifferences(result, nextOwnerData.hooks[i].result, {shallow: false})\r\n }))\r\n } : false\r\n }\r\n}\r\n\r\nexport default function getUpdateInfo({Component, displayName, hookName, prevProps, prevState, prevHook, nextProps, nextState, nextHook, options, ownerDataMap}){\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 ownerDataMap,\r\n reason: getUpdateReason(prevProps, prevState, prevHook, nextProps, nextState, nextHook, ownerDataMap)\r\n }\r\n}\r\n","// copied from https://github.com/facebook/react/blob/master/packages/react-reconciler/src/ReactTypeOfMode.js\r\nimport {REACT_FORWARD_REF_TYPE, REACT_MEMO_TYPE} from './consts'\r\n\r\nconst StrictMode = 0b0001\r\n\r\n// based on \"findStrictRoot\" from https://github.com/facebook/react/blob/master/packages/react-reconciler/src/ReactStrictModeWarnings.js\r\n// notice: this is only used for class components. functional components doesn't re-rendered inside strict mode\r\nexport function checkIfInsideAStrictModeTree(reactComponentInstance){\r\n let reactInternalFiber = reactComponentInstance && reactComponentInstance._reactInternalFiber\r\n while(reactInternalFiber){\r\n if(reactInternalFiber.mode & StrictMode){\r\n return true\r\n }\r\n reactInternalFiber = reactInternalFiber.return\r\n }\r\n return false\r\n}\r\n\r\nexport function isReactClassComponent(Component){\r\n return Component.prototype && !!Component.prototype.isReactComponent\r\n}\r\n\r\nexport function isMemoComponent(Component){\r\n return Component.$$typeof === REACT_MEMO_TYPE\r\n}\r\n\r\nexport function isForwardRefComponent(Component){\r\n return Component.$$typeof === REACT_FORWARD_REF_TYPE\r\n}\r\n","import {isMemoComponent} from './utils'\r\n\r\nfunction 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, React, isHookChange}){\r\n if(shouldExclude(displayName, options)){\r\n return false\r\n }\r\n\r\n if(Component.whyDidYouRender === false){\r\n return false\r\n }\r\n\r\n if(isHookChange && (\r\n Component.whyDidYouRender && Component.whyDidYouRender.trackHooks === false\r\n )){\r\n return false\r\n }\r\n\r\n return !!(\r\n Component.whyDidYouRender || (\r\n options.trackAllPureComponents && (\r\n (Component && Component.prototype instanceof React.PureComponent) ||\r\n isMemoComponent(Component)\r\n )\r\n ) ||\r\n shouldInclude(displayName, options)\r\n )\r\n}\r\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 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 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 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","/**\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 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","import {defaults} from 'lodash'\r\n\r\nimport {checkIfInsideAStrictModeTree} from '../utils'\r\nimport getUpdateInfo from '../getUpdateInfo'\r\n\r\nexport default function patchClassComponent(ClassComponent, displayName, React, options, ownerDataMap){\r\n class WDYRPatchedClassComponent extends ClassComponent{\r\n constructor(props, context){\r\n super(props, context)\r\n\r\n this._WDYR = {\r\n renderNumber: 0\r\n }\r\n\r\n const origRender = super.render || this.render\r\n // this probably means render is an arrow function or this.render.bind(this) was called on the original class\r\n const renderIsABindedFunction = origRender !== ClassComponent.prototype.render\r\n if(renderIsABindedFunction){\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 this._WDYR.renderNumber++\r\n\r\n if(!('isStrictMode' in this._WDYR)){\r\n this._WDYR.isStrictMode = checkIfInsideAStrictModeTree(this)\r\n }\r\n\r\n // in strict mode- ignore every other render\r\n if(!(this._WDYR.isStrictMode && this._WDYR.renderNumber % 2 === 1)){\r\n if(this._WDYR.prevProps){\r\n const updateInfo = getUpdateInfo({\r\n Component: ClassComponent,\r\n displayName,\r\n prevProps: this._WDYR.prevProps,\r\n prevState: this._WDYR.prevState,\r\n nextProps: this.props,\r\n nextState: this.state,\r\n options,\r\n ownerDataMap\r\n })\r\n\r\n options.notifier(updateInfo)\r\n }\r\n\r\n this._WDYR.prevProps = this.props\r\n this._WDYR.prevState = this.state\r\n }\r\n\r\n return super.render ? super.render() : null\r\n }\r\n }\r\n\r\n try{\r\n WDYRPatchedClassComponent.displayName = displayName\r\n }catch(e){\r\n // not crucial if displayName couldn't be set\r\n }\r\n\r\n defaults(WDYRPatchedClassComponent, ClassComponent)\r\n\r\n return WDYRPatchedClassComponent\r\n}\r\n","import {defaults} from 'lodash'\r\n\r\nimport getUpdateInfo from '../getUpdateInfo'\r\n\r\nconst getFunctionalComponentFromStringComponent = (componentTypeStr, React) => props => (\r\n React.createElement(componentTypeStr, props)\r\n)\r\n\r\nexport default function patchFunctionalOrStrComponent(FunctionalOrStringComponent, isPure, displayName, React, options, ownerDataMap){\r\n const FunctionalComponent = typeof(FunctionalOrStringComponent) === 'string' ?\r\n getFunctionalComponentFromStringComponent(FunctionalOrStringComponent, React) :\r\n FunctionalOrStringComponent\r\n\r\n function WDYRFunctionalComponent(){\r\n const nextProps = arguments[0]\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 updateInfo = getUpdateInfo({\r\n Component: FunctionalComponent,\r\n displayName,\r\n prevProps,\r\n nextProps,\r\n options,\r\n ownerDataMap\r\n })\r\n\r\n const notifiedByHooks = (\r\n !updateInfo.reason.propsDifferences || (\r\n (isPure && updateInfo.reason.propsDifferences.length === 0)\r\n )\r\n )\r\n\r\n if(!notifiedByHooks){\r\n options.notifier(updateInfo)\r\n }\r\n }\r\n\r\n return FunctionalComponent(...arguments)\r\n }\r\n\r\n try{\r\n WDYRFunctionalComponent.displayName = displayName\r\n }catch(e){\r\n // not crucial if displayName couldn't be set\r\n }\r\n\r\n WDYRFunctionalComponent.ComponentForHooksTracking = FunctionalComponent\r\n defaults(WDYRFunctionalComponent, FunctionalComponent)\r\n\r\n return WDYRFunctionalComponent\r\n}\r\n","import {get} 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\nimport patchClassComponent from './patches/patchClassComponent'\r\nimport patchFunctionalOrStrComponent from './patches/patchFunctionalOrStrComponent'\r\nimport patchMemoComponent from './patches/patchMemoComponent'\r\nimport patchForwardRefComponent from './patches/patchForwardRefComponent'\r\n\r\nimport {isForwardRefComponent, isMemoComponent, isReactClassComponent} from './utils'\r\n\r\nconst initialHookValue = Symbol('initial-hook-value')\r\nfunction trackHookChanges(hookName, {path: hookPath}, hookResult, React, options, ownerDataMap, hooksRef){\r\n const nextHook = hookPath ? get(hookResult, hookPath) : hookResult\r\n hooksRef.current.push({hookName, result: nextHook})\r\n const ComponentHookDispatchedFromInstance = (\r\n React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED &&\r\n React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner.current\r\n )\r\n\r\n const prevHookResultRef = React.useRef(initialHookValue)\r\n\r\n if(!ComponentHookDispatchedFromInstance){\r\n return hookResult\r\n }\r\n\r\n const Component = ComponentHookDispatchedFromInstance.type.ComponentForHooksTracking || ComponentHookDispatchedFromInstance.type\r\n const displayName = getDisplayName(Component)\r\n\r\n const isShouldTrack = shouldTrack({Component, displayName, options, React, isHookChange: true})\r\n if(!isShouldTrack){\r\n return hookResult\r\n }\r\n\r\n const prevHookResult = prevHookResultRef.current\r\n prevHookResultRef.current = hookResult\r\n\r\n if(prevHookResult !== initialHookValue){\r\n const notification = getUpdateInfo({\r\n Component: Component,\r\n displayName,\r\n hookName,\r\n prevHook: hookPath ? get(prevHookResult, hookPath) : prevHookResult,\r\n nextHook,\r\n options,\r\n ownerDataMap\r\n })\r\n\r\n if(notification.reason.hookDifferences){\r\n options.notifier(notification)\r\n }\r\n }\r\n\r\n return hookResult\r\n}\r\n\r\nfunction createPatchedComponent(componentsMap, Component, displayName, React, options, ownerDataMap){\r\n if(isMemoComponent(Component)){\r\n return patchMemoComponent(Component, displayName, React, options, ownerDataMap)\r\n }\r\n\r\n if(isForwardRefComponent(Component)){\r\n return patchForwardRefComponent(Component, displayName, React, options, ownerDataMap)\r\n }\r\n\r\n if(isReactClassComponent(Component)){\r\n return patchClassComponent(Component, displayName, React, options, ownerDataMap)\r\n }\r\n\r\n return patchFunctionalOrStrComponent(Component, false, displayName, React, options, ownerDataMap)\r\n}\r\n\r\nfunction getPatchedComponent(componentsMap, Component, displayName, React, options, ownerDataMap){\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, ownerDataMap)\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 const ownerDataMap = new WeakMap()\r\n const hooksRef = {current: []}\r\n\r\n // Intercept assignments to ReactCurrentOwner.current and reset hooksRef\r\n let currentOwner = null\r\n if(React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED){\r\n Object.defineProperty(React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner, 'current', {\r\n get(){\r\n return currentOwner\r\n },\r\n set(value){\r\n currentOwner = value\r\n hooksRef.current = []\r\n }\r\n })\r\n }\r\n\r\n React.createElement = function(componentNameOrComponent, ...rest){\r\n let isShouldTrack = null\r\n let displayName = null\r\n let WDYRPatchedComponent = null\r\n\r\n try{\r\n isShouldTrack = (\r\n (\r\n typeof componentNameOrComponent === 'function' ||\r\n isMemoComponent(componentNameOrComponent) ||\r\n isForwardRefComponent(componentNameOrComponent)\r\n ) &&\r\n shouldTrack({Component: componentNameOrComponent, displayName: getDisplayName(componentNameOrComponent), React, options})\r\n )\r\n\r\n if(isShouldTrack){\r\n displayName = (\r\n componentNameOrComponent &&\r\n componentNameOrComponent.whyDidYouRender &&\r\n componentNameOrComponent.whyDidYouRender.customName ||\r\n getDisplayName(componentNameOrComponent)\r\n )\r\n\r\n WDYRPatchedComponent = getPatchedComponent(componentsMap, componentNameOrComponent, displayName, React, options, ownerDataMap)\r\n\r\n const element = origCreateElement.apply(React, [WDYRPatchedComponent, ...rest])\r\n if(options.logOwnerReasons){\r\n const OwnerInstance = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner.current\r\n if(OwnerInstance != null){\r\n const Component = OwnerInstance.type.ComponentForHooksTracking || OwnerInstance.type\r\n const displayName = getDisplayName(Component)\r\n ownerDataMap.set(element.props, {\r\n Component,\r\n displayName,\r\n props: OwnerInstance.pendingProps,\r\n state: OwnerInstance.stateNode != null ? OwnerInstance.stateNode.state : null,\r\n hooks: hooksRef.current\r\n })\r\n }\r\n }\r\n\r\n return element\r\n }\r\n }\r\n catch(e){\r\n options.consoleLog('whyDidYouRender error. Please file a bug at https://github.com/welldone-software/why-did-you-render/issues.', {\r\n errorInfo: {\r\n error: e,\r\n componentNameOrComponent,\r\n rest,\r\n options,\r\n isShouldTrack,\r\n displayName,\r\n WDYRPatchedComponent\r\n }\r\n })\r\n }\r\n\r\n return origCreateElement.apply(React, [componentNameOrComponent, ...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 if(options.trackHooks){\r\n const nativeHooks = Object.entries(hooksConfig).map(([hookName, hookTrackingConfig]) => {\r\n return [React, hookName, hookTrackingConfig]\r\n })\r\n\r\n const hooksToTrack = [\r\n ...nativeHooks,\r\n ...options.trackExtraHooks\r\n ]\r\n\r\n hooksToTrack.forEach(([hookParent, hookName, hookTrackingConfig = {}]) => {\r\n const originalHook = hookParent[hookName]\r\n const newHookName = hookName[0].toUpperCase() + hookName.slice(1)\r\n const newHook = function(...args){\r\n const hookResult = originalHook.call(this, ...args)\r\n trackHookChanges(hookName, hookTrackingConfig, hookResult, React, options, ownerDataMap, hooksRef)\r\n return hookResult\r\n }\r\n Object.defineProperty(newHook, 'name', {value: newHookName, writable: false})\r\n Object.assign(newHook, {originalHook})\r\n hookParent[hookName] = newHook\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\r\n componentsMap = null\r\n\r\n const hooksToRevert = [\r\n ...Object.keys(hooksConfig).map(hookName => [React, hookName]),\r\n ...options.trackExtraHooks\r\n ]\r\n hooksToRevert.forEach(([hookParent, hookName]) => {\r\n if(hookParent[hookName].originalHook){\r\n hookParent[hookName] = hookParent[hookName].originalHook\r\n }\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","import {defaults} from 'lodash'\r\n\r\nimport getDisplayName from '../getDisplayName'\r\n\r\nimport {isForwardRefComponent, isMemoComponent, isReactClassComponent} from '../utils'\r\nimport patchClassComponent from './patchClassComponent'\r\nimport patchFunctionalOrStrComponent from './patchFunctionalOrStrComponent'\r\n\r\nexport default function patchMemoComponent(MemoComponent, displayName, React, options, ownerDataMap){\r\n const {type: InnerMemoComponent} = MemoComponent\r\n\r\n const isInnerMemoComponentAClassComponent = isReactClassComponent(InnerMemoComponent)\r\n const isInnerMemoComponentForwardRefs = isForwardRefComponent(InnerMemoComponent)\r\n const isInnerMemoComponentAnotherMemoComponent = isMemoComponent(InnerMemoComponent)\r\n\r\n const WrappedFunctionalComponent = isInnerMemoComponentForwardRefs ?\r\n InnerMemoComponent.render :\r\n InnerMemoComponent\r\n\r\n const PatchedInnerComponent = isInnerMemoComponentAClassComponent ?\r\n patchClassComponent(WrappedFunctionalComponent, displayName, React, options, ownerDataMap) :\r\n (isInnerMemoComponentAnotherMemoComponent ?\r\n patchMemoComponent(WrappedFunctionalComponent, displayName, React, options, ownerDataMap) :\r\n patchFunctionalOrStrComponent(WrappedFunctionalComponent, true, displayName, React, options, ownerDataMap)\r\n )\r\n\r\n try{\r\n PatchedInnerComponent.displayName = getDisplayName(WrappedFunctionalComponent)\r\n }catch(e){\r\n // not crucial if displayName couldn't be set\r\n }\r\n\r\n PatchedInnerComponent.ComponentForHooksTracking = MemoComponent\r\n defaults(PatchedInnerComponent, WrappedFunctionalComponent)\r\n\r\n const WDYRMemoizedFunctionalComponent = React.memo(\r\n isInnerMemoComponentForwardRefs ? React.forwardRef(PatchedInnerComponent) : PatchedInnerComponent,\r\n MemoComponent.compare\r\n )\r\n\r\n try{\r\n WDYRMemoizedFunctionalComponent.displayName = displayName\r\n }catch(e){\r\n // not crucial if displayName couldn't be set\r\n }\r\n\r\n defaults(WDYRMemoizedFunctionalComponent, MemoComponent)\r\n\r\n return WDYRMemoizedFunctionalComponent\r\n}\r\n","import {defaults} from 'lodash'\r\n\r\nimport getDisplayName from '../getDisplayName'\r\nimport {isMemoComponent} from '../utils'\r\nimport patchFunctionalOrStrComponent from './patchFunctionalOrStrComponent'\r\n\r\nexport default function patchForwardRefComponent(ForwardRefComponent, displayName, React, options, ownerDataMap){\r\n const {render: InnerForwardRefComponent} = ForwardRefComponent\r\n\r\n const isInnerComponentMemoized = isMemoComponent(InnerForwardRefComponent)\r\n const WrappedFunctionalComponent = isInnerComponentMemoized ?\r\n InnerForwardRefComponent.type : InnerForwardRefComponent\r\n\r\n const WDYRWrappedByReactForwardRefFunctionalComponent = (\r\n patchFunctionalOrStrComponent(WrappedFunctionalComponent, isInnerComponentMemoized, displayName, React, options, ownerDataMap)\r\n )\r\n\r\n WDYRWrappedByReactForwardRefFunctionalComponent.displayName = getDisplayName(WrappedFunctionalComponent)\r\n WDYRWrappedByReactForwardRefFunctionalComponent.ComponentForHooksTracking = WrappedFunctionalComponent\r\n defaults(WDYRWrappedByReactForwardRefFunctionalComponent, WrappedFunctionalComponent)\r\n\r\n const WDYRForwardRefFunctionalComponent = React.forwardRef(\r\n isInnerComponentMemoized ?\r\n React.memo(WDYRWrappedByReactForwardRefFunctionalComponent, InnerForwardRefComponent.compare) :\r\n WDYRWrappedByReactForwardRefFunctionalComponent\r\n )\r\n\r\n try{\r\n WDYRForwardRefFunctionalComponent.displayName = displayName\r\n }catch(e){\r\n // not crucial if displayName couldn't be set\r\n }\r\n\r\n defaults(WDYRForwardRefFunctionalComponent, ForwardRefComponent)\r\n\r\n return WDYRForwardRefFunctionalComponent\r\n}\r\n","import whyDidYouRender from './whyDidYouRender'\r\nimport defaultNotifier from './defaultNotifier'\r\n\r\nwhyDidYouRender.defaultNotifier = defaultNotifier\r\nexport default whyDidYouRender\r\n"],"names":["Array","isArray","global","Object","freeSelf","self","freeGlobal","Function","root","Symbol","objectProto","prototype","hasOwnProperty","nativeObjectToString","toString","symToStringTag","toStringTag","undefined","value","isOwn","call","tag","unmasked","e","result","getRawTag","objectToString","isObjectLike","baseGetTag","reIsDeepProp","reIsPlainProp","object","type","isSymbol","test","uid","isObject","maskSrcKey","exec","coreJsData","keys","IE_PROTO","func","funcToString","reIsHostCtor","funcProto","reIsNative","RegExp","replace","isMasked","isFunction","toSource","key","getValue","baseIsNative","getNative","this","__data__","nativeCreate","size","has","data","Hash","entries","index","length","clear","entry","set","hashClear","hashDelete","get","hashGet","hashHas","hashSet","other","array","eq","splice","assocIndexOf","pop","push","ListCache","listCacheClear","listCacheDelete","listCacheGet","listCacheHas","listCacheSet","hash","map","Map","string","isKeyable","getMapData","MapCache","mapCacheClear","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","memoize","resolver","TypeError","memoized","args","arguments","apply","cache","Cache","rePropName","reEscapeChar","memoizeCapped","charCodeAt","match","number","quote","subString","iteratee","symbolProto","symbolToString","baseToString","arrayMap","isKey","stringToPath","path","castPath","toKey","defaultValue","baseGet","diffTypes","hasSymbol","REACT_MEMO_TYPE","REACT_FORWARD_REF_TYPE","diffTypesDescriptions","inHotReload","logDifference","Component","displayName","hookName","prefixMessage","diffObjType","differences","values","options","consoleLog","forEach","pathString","diffType","prevValue","nextValue","consoleGroup","diffNameColor","diffPathColor","consoleGroupEnd","prev","next","defaultNotifier","updateInfo","prevProps","prevState","prevHook","nextProps","nextState","nextHook","reason","ownerDataMap","logOnDifferentValues","whyDidYouRender","propsDifferences","some","diff","stateDifferences","hookDifferences","shouldLog","titleColor","ownerDifferences","prevOwnerData","nextOwnerData","props","state","i","hooks","createDefaultNotifier","hotReloadBufferMs","module","hot","addStatusHandler","status","setTimeout","emptyFn","getDisplayName","name","render","_isString","accumulator","initAccum","fromRight","keysFunc","iterable","createBaseFor","n","propertyIsEnumerable","baseIsArguments","freeExports","exports","nodeType","freeModule","Buffer","isBuffer","stubFalse","reIsUint","typedArrayTags","isLength","freeProcess","process","nodeUtil","types","require","binding","nodeIsTypedArray","isTypedArray","baseUnary","baseIsTypedArray","inherited","isArr","isArg","isArguments","isBuff","isType","skipIndexes","baseTimes","String","isIndex","Ctor","constructor","transform","arg","overArg","isPrototype","nativeKeys","isArrayLike","arrayLikeKeys","baseKeys","eachFunc","collection","createBaseEach","baseFor","pairs","LARGE_ARRAY_SIZE","Stack","stackClear","stackDelete","stackGet","stackHas","stackSet","SetCache","add","setCacheAdd","setCacheHas","predicate","bitmask","customizer","equalFunc","stack","isPartial","arrLength","othLength","stacked","seen","arrValue","othValue","compared","arraySome","othIndex","cacheHas","Uint8Array","symbolValueOf","valueOf","byteLength","byteOffset","buffer","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","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","equalByTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","equalObjects","baseIsEqual","baseIsEqualDeep","source","matchData","noCustomizer","srcValue","COMPARE_PARTIAL_FLAG","isStrictComparable","getMatchData","matchesStrictComparable","baseIsMatch","hasFunc","hasPath","baseHasIn","hasIn","baseProperty","basePropertyDeep","identity","baseMatchesProperty","baseMatches","property","arrayReduce","baseReduce","baseIteratee","baseEach","baseHas","nodeIsSet","isSet","baseIsSet","nodeIsRegExp","isRegExp","baseIsRegExp","nodeIsDate","isDate","baseIsDate","getPrototypeOf","objectCtorString","proto","getPrototype","hasElementType","Element","REACT_ELEMENT_TYPE","isReactElement","$$typeof","trackDiff","a","b","diffsAccumulator","calculateDeepEqualDiffs","initialPathString","diffs","accumulateDeepEqualDiffs","_isArray","arrayLength","arrayItemDiffs","numberOfDeepEqualsItems","diffEquals","_isSet","valA","_isDate","getTime","Date","_isRegExp","reactElementPropsAreDeepEqual","_isFunction","_isPlainObject","_keys","keysLength","_has","objectValuesDiffs","numberOfDeepEqualsObjectValues","deepEquals","error","console","warn","emptyObject","findObjectsDifferences","userPrevObj","userNextObj","shallow","prevObj","nextObj","keysOfBothObjects","_reduce","deepEqualDiffs","getUpdateReason","getUpdateInfo","isReactClassComponent","isReactComponent","isMemoComponent","isForwardRefComponent","shouldTrack","React","isHookChange","exclude","regex","shouldExclude","trackHooks","trackAllPureComponents","PureComponent","include","shouldInclude","thisArg","nativeMax","Math","max","start","otherArgs","defineProperty","configurable","enumerable","constant","writable","nativeNow","now","count","lastCalled","stamp","remaining","shortOut","baseSetToString","setToString","overRest","nativeKeysIn","isProto","baseKeysIn","baseRest","sources","guard","isIterateeCall","keysIn","propsIndex","propsLength","patchClassComponent","ClassComponent","WDYRPatchedClassComponent","context","_WDYR","renderNumber","origRender","_get","_this","isStrictMode","reactComponentInstance","reactInternalFiber","_reactInternalFiber","mode","checkIfInsideAStrictModeTree","notifier","patchFunctionalOrStrComponent","FunctionalOrStringComponent","isPure","FunctionalComponent","componentTypeStr","createElement","getFunctionalComponentFromStringComponent","WDYRFunctionalComponent","ref","useRef","current","notifiedByHooks","ComponentForHooksTracking","initialHookValue","trackHookChanges","hookResult","hooksRef","hookPath","ComponentHookDispatchedFromInstance","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","ReactCurrentOwner","prevHookResultRef","prevHookResult","notification","createPatchedComponent","componentsMap","patchMemoComponent","MemoComponent","InnerMemoComponent","isInnerMemoComponentAClassComponent","isInnerMemoComponentForwardRefs","isInnerMemoComponentAnotherMemoComponent","WrappedFunctionalComponent","PatchedInnerComponent","WDYRMemoizedFunctionalComponent","memo","forwardRef","compare","ForwardRefComponent","InnerForwardRefComponent","isInnerComponentMemoized","WDYRWrappedByReactForwardRefFunctionalComponent","WDYRForwardRefFunctionalComponent","patchForwardRefComponent","getPatchedComponent","WDYRPatchedComponent","hooksConfig","useState","useReducer","useContext","useMemo","userOptions","group","groupEnd","collapseGroups","groupCollapsed","onlyLogs","log","logOwnerReasons","trackExtraHooks","normalizeOptions","origCreateElement","origCreateFactory","createFactory","currentOwner","componentNameOrComponent","isShouldTrack","rest","customName","element","OwnerInstance","pendingProps","stateNode","errorInfo","assign","factory","bind","nativeHooks","hookTrackingConfig","hookParent","originalHook","newHookName","toUpperCase","slice","newHook","__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/isArray.js","../../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/isObjectLike.js","../../node_modules/lodash/isSymbol.js","../../node_modules/lodash/_isKey.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/_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/_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/_Map.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/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","../../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/_createBaseFor.js","../../node_modules/lodash/_baseFor.js","../../node_modules/lodash/_baseTimes.js","../../node_modules/lodash/_baseIsArguments.js","../../node_modules/lodash/isArguments.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/_createBaseEach.js","../../node_modules/lodash/_baseEach.js","../../node_modules/lodash/_baseForOwn.js","../../node_modules/lodash/_stackClear.js","../../node_modules/lodash/_stackDelete.js","../../node_modules/lodash/_stackGet.js","../../node_modules/lodash/_stackHas.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/_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/_baseReduce.js","../../node_modules/lodash/reduce.js","../../node_modules/lodash/_baseHas.js","../../node_modules/lodash/has.js","../../node_modules/lodash/_baseIsSet.js","../../node_modules/lodash/isSet.js","../../node_modules/lodash/_baseIsRegExp.js","../../node_modules/lodash/isRegExp.js","../../node_modules/lodash/_baseIsDate.js","../../node_modules/lodash/isDate.js","../../node_modules/lodash/_getPrototype.js","../../node_modules/lodash/isPlainObject.js","../../src/calculateDeepEqualDiffs.js","../../src/findObjectsDifferences.js","../../src/getUpdateInfo.js","../../src/utils.js","../../src/shouldTrack.js","../../node_modules/lodash/_apply.js","../../node_modules/lodash/_overRest.js","../../node_modules/lodash/constant.js","../../node_modules/lodash/_defineProperty.js","../../node_modules/lodash/_baseSetToString.js","../../node_modules/lodash/_shortOut.js","../../node_modules/lodash/_setToString.js","../../node_modules/lodash/_baseRest.js","../../node_modules/lodash/_isIterateeCall.js","../../node_modules/lodash/_nativeKeysIn.js","../../node_modules/lodash/_baseKeysIn.js","../../node_modules/lodash/keysIn.js","../../node_modules/lodash/defaults.js","../../src/patches/patchClassComponent.js","../../src/patches/patchFunctionalOrStrComponent.js","../../src/whyDidYouRender.js","../../src/patches/patchMemoComponent.js","../../src/patches/patchForwardRefComponent.js","../../src/index.js"],"sourcesContent":["/**\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","/** 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 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 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","/**\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\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","/**\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 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 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 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","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\r\n// copied from packages/shared/ReactSymbols.js in https://github.com/facebook/react\r\nconst hasSymbol = typeof Symbol === 'function' && Symbol.for\r\nexport const REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3\r\nexport const REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0\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 (remember that the syntax always produces a *NEW* immutable React element so a component that receives as props always re-renders.).',\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} result]` : `${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 its values are all equal.`,\r\n diffObjType === 'props' ?\r\n 'This could have been avoided by making the component pure, or by preventing its father from re-rendering.' :\r\n 'This usually means this component called setState when no changes in its 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, ownerDataMap} = 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\r\n if(reason.propsDifferences && reason.ownerDifferences){\r\n const prevOwnerData = ownerDataMap.get(prevProps)\r\n const nextOwnerData = ownerDataMap.get(nextProps)\r\n\r\n options.consoleGroup(`Rendered by ${nextOwnerData.displayName}`)\r\n let prefixMessage = 'Re-rendered because'\r\n\r\n if(reason.ownerDifferences.propsDifferences){\r\n logDifference({\r\n Component: nextOwnerData.Component,\r\n displayName: nextOwnerData.displayName,\r\n prefixMessage,\r\n diffObjType: 'props',\r\n differences: reason.ownerDifferences.propsDifferences,\r\n values: {prev: prevOwnerData.props, next: nextOwnerData.props},\r\n options\r\n })\r\n prefixMessage = 'And because'\r\n }\r\n\r\n if(reason.ownerDifferences.stateDifferences){\r\n logDifference({\r\n Component: nextOwnerData.Component,\r\n displayName: nextOwnerData.displayName,\r\n prefixMessage,\r\n diffObjType: 'state',\r\n differences: reason.ownerDifferences.stateDifferences,\r\n values: {prev: prevOwnerData.state, next: nextOwnerData.state},\r\n options\r\n })\r\n }\r\n\r\n if(reason.ownerDifferences.hookDifferences){\r\n reason.ownerDifferences.hookDifferences.forEach(({hookName, differences}, i) =>\r\n logDifference({\r\n Component: nextOwnerData.Component,\r\n displayName: nextOwnerData.displayName,\r\n prefixMessage,\r\n diffObjType: 'hook',\r\n differences,\r\n values: {prev: prevOwnerData.hooks[i].result, next: nextOwnerData.hooks[i].result},\r\n hookName,\r\n options\r\n })\r\n )\r\n }\r\n options.consoleGroupEnd()\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(typeof(module) !== 'undefined' && 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 ('hotReloadBufferMs' in userOptions) ? 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 logOwnerReasons: false,\r\n trackHooks: true,\r\n titleColor: '#058',\r\n diffNameColor: 'blue',\r\n diffPathColor: 'red',\r\n trackExtraHooks: [],\r\n trackAllPureComponents: false,\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 (type.render && getDisplayName(type.render)) ||\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","/**\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","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 * 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 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","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","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 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","/**\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","/**\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 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 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","var overArg = require('./_overArg');\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nmodule.exports = getPrototype;\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","import {isArray, isPlainObject, isDate, isRegExp, isFunction, isSet, 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 arrayLength = a.length\r\n if(arrayLength !== b.length){\r\n return trackDiff([...a], [...b], diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n const arrayItemDiffs = []\r\n let numberOfDeepEqualsItems = 0\r\n for(let i = arrayLength; i--; i > 0){\r\n const diffEquals = accumulateDeepEqualDiffs(a[i], b[i], arrayItemDiffs, `${pathString}[${i}]`)\r\n if(diffEquals){\r\n numberOfDeepEqualsItems++\r\n }\r\n }\r\n\r\n if(numberOfDeepEqualsItems === arrayLength){\r\n return trackDiff([...a], [...b], diffsAccumulator, pathString, diffTypes.deepEquals)\r\n }\r\n\r\n diffsAccumulator.push(...arrayItemDiffs)\r\n\r\n return trackDiff([...a], [...b], diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n if(isSet(a) && isSet(b)){\r\n if(a.size !== b.size){\r\n return trackDiff(new Set(a), new Set(b), diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n for(const valA of a){\r\n if(!b.has(valA)){\r\n return trackDiff(new Set(a), new Set(b), diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n }\r\n\r\n return trackDiff(new Set(a), new Set(b), diffsAccumulator, pathString, diffTypes.deepEquals)\r\n }\r\n\r\n if(isDate(a) && isDate(b)){\r\n return a.getTime() === b.getTime() ?\r\n trackDiff(new Date(a), new Date(b), diffsAccumulator, pathString, diffTypes.date) :\r\n trackDiff(new Date(a), new Date(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 if(a.type !== b.type){\r\n return trackDiff(a, b, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n const reactElementPropsAreDeepEqual =\r\n accumulateDeepEqualDiffs(a.props, b.props, [], `${pathString}.props`)\r\n\r\n return reactElementPropsAreDeepEqual ?\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 keysLength = keys.length\r\n if(keysLength !== getKeys(b).length){\r\n return trackDiff({...a}, {...b}, diffsAccumulator, pathString, diffTypes.different)\r\n }\r\n\r\n for(let i = keysLength; i--; 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 const objectValuesDiffs = []\r\n let numberOfDeepEqualsObjectValues = 0\r\n for(let i = keysLength; i--; i > 0){\r\n const key = keys[i]\r\n const deepEquals = accumulateDeepEqualDiffs(a[key], b[key], objectValuesDiffs, `${pathString}.${key}`)\r\n if(deepEquals){\r\n numberOfDeepEqualsObjectValues++\r\n }\r\n }\r\n\r\n if(numberOfDeepEqualsObjectValues === keysLength){\r\n return trackDiff({...a}, {...b}, diffsAccumulator, pathString, diffTypes.deepEquals)\r\n }\r\n\r\n diffsAccumulator.push(...objectValuesDiffs)\r\n\r\n return 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 getOwnerDifferences({prevOwnerData, nextOwnerData}){\r\n if(!prevOwnerData || !nextOwnerData){\r\n return false\r\n }\r\n\r\n const hookDifferences = prevOwnerData.hooks.map(({hookName, result}, i) => ({\r\n hookName,\r\n differences: findObjectsDifferences(result, nextOwnerData.hooks[i].result, {shallow: false})\r\n }))\r\n\r\n return {\r\n propsDifferences: findObjectsDifferences(prevOwnerData.props, nextOwnerData.props),\r\n stateDifferences: findObjectsDifferences(prevOwnerData.state, nextOwnerData.state),\r\n hookDifferences: hookDifferences.length > 0 ? hookDifferences : false\r\n }\r\n}\r\n\r\nfunction getUpdateReason(prevProps, prevState, prevHook, nextProps, nextState, nextHook, ownerDataMap){\r\n const prevOwnerData = ownerDataMap.get(prevProps)\r\n const nextOwnerData = ownerDataMap.get(nextProps)\r\n\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 ownerDifferences: getOwnerDifferences({prevOwnerData, nextOwnerData})\r\n }\r\n}\r\n\r\nexport default function getUpdateInfo({Component, displayName, hookName, prevProps, prevState, prevHook, nextProps, nextState, nextHook, options, ownerDataMap}){\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 ownerDataMap,\r\n reason: getUpdateReason(prevProps, prevState, prevHook, nextProps, nextState, nextHook, ownerDataMap)\r\n }\r\n}\r\n","// copied from https://github.com/facebook/react/blob/master/packages/react-reconciler/src/ReactTypeOfMode.js\r\nimport {REACT_FORWARD_REF_TYPE, REACT_MEMO_TYPE} from './consts'\r\n\r\nconst StrictMode = 0b0001\r\n\r\n// based on \"findStrictRoot\" from https://github.com/facebook/react/blob/master/packages/react-reconciler/src/ReactStrictModeWarnings.js\r\n// notice: this is only used for class components. functional components doesn't re-rendered inside strict mode\r\nexport function checkIfInsideAStrictModeTree(reactComponentInstance){\r\n let reactInternalFiber = reactComponentInstance && reactComponentInstance._reactInternalFiber\r\n while(reactInternalFiber){\r\n if(reactInternalFiber.mode & StrictMode){\r\n return true\r\n }\r\n reactInternalFiber = reactInternalFiber.return\r\n }\r\n return false\r\n}\r\n\r\nexport function isReactClassComponent(Component){\r\n return Component.prototype && !!Component.prototype.isReactComponent\r\n}\r\n\r\nexport function isMemoComponent(Component){\r\n return Component.$$typeof === REACT_MEMO_TYPE\r\n}\r\n\r\nexport function isForwardRefComponent(Component){\r\n return Component.$$typeof === REACT_FORWARD_REF_TYPE\r\n}\r\n","import {isMemoComponent} from './utils'\r\n\r\nfunction 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, React, isHookChange}){\r\n if(shouldExclude(displayName, options)){\r\n return false\r\n }\r\n\r\n if(Component.whyDidYouRender === false){\r\n return false\r\n }\r\n\r\n if(isHookChange && (\r\n Component.whyDidYouRender && Component.whyDidYouRender.trackHooks === false\r\n )){\r\n return false\r\n }\r\n\r\n return !!(\r\n Component.whyDidYouRender || (\r\n options.trackAllPureComponents && (\r\n (Component && Component.prototype instanceof React.PureComponent) ||\r\n isMemoComponent(Component)\r\n )\r\n ) ||\r\n shouldInclude(displayName, options)\r\n )\r\n}\r\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 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 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 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","/**\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 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","import {defaults} from 'lodash'\r\n\r\nimport {checkIfInsideAStrictModeTree} from '../utils'\r\nimport getUpdateInfo from '../getUpdateInfo'\r\n\r\nexport default function patchClassComponent(ClassComponent, displayName, React, options, ownerDataMap){\r\n class WDYRPatchedClassComponent extends ClassComponent{\r\n constructor(props, context){\r\n super(props, context)\r\n\r\n this._WDYR = {\r\n renderNumber: 0\r\n }\r\n\r\n const origRender = super.render || this.render\r\n // this probably means render is an arrow function or this.render.bind(this) was called on the original class\r\n const renderIsABindedFunction = origRender !== ClassComponent.prototype.render\r\n if(renderIsABindedFunction){\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 this._WDYR.renderNumber++\r\n\r\n if(!('isStrictMode' in this._WDYR)){\r\n this._WDYR.isStrictMode = checkIfInsideAStrictModeTree(this)\r\n }\r\n\r\n // in strict mode- ignore every other render\r\n if(!(this._WDYR.isStrictMode && this._WDYR.renderNumber % 2 === 1)){\r\n if(this._WDYR.prevProps){\r\n const updateInfo = getUpdateInfo({\r\n Component: ClassComponent,\r\n displayName,\r\n prevProps: this._WDYR.prevProps,\r\n prevState: this._WDYR.prevState,\r\n nextProps: this.props,\r\n nextState: this.state,\r\n options,\r\n ownerDataMap\r\n })\r\n\r\n options.notifier(updateInfo)\r\n }\r\n\r\n this._WDYR.prevProps = this.props\r\n this._WDYR.prevState = this.state\r\n }\r\n\r\n return super.render ? super.render() : null\r\n }\r\n }\r\n\r\n try{\r\n WDYRPatchedClassComponent.displayName = displayName\r\n }catch(e){\r\n // not crucial if displayName couldn't be set\r\n }\r\n\r\n defaults(WDYRPatchedClassComponent, ClassComponent)\r\n\r\n return WDYRPatchedClassComponent\r\n}\r\n","import {defaults} from 'lodash'\r\n\r\nimport getUpdateInfo from '../getUpdateInfo'\r\n\r\nconst getFunctionalComponentFromStringComponent = (componentTypeStr, React) => props => (\r\n React.createElement(componentTypeStr, props)\r\n)\r\n\r\nexport default function patchFunctionalOrStrComponent(FunctionalOrStringComponent, isPure, displayName, React, options, ownerDataMap){\r\n const FunctionalComponent = typeof(FunctionalOrStringComponent) === 'string' ?\r\n getFunctionalComponentFromStringComponent(FunctionalOrStringComponent, React) :\r\n FunctionalOrStringComponent\r\n\r\n function WDYRFunctionalComponent(){\r\n const nextProps = arguments[0]\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 updateInfo = getUpdateInfo({\r\n Component: FunctionalComponent,\r\n displayName,\r\n prevProps,\r\n nextProps,\r\n options,\r\n ownerDataMap\r\n })\r\n\r\n const notifiedByHooks = (\r\n !updateInfo.reason.propsDifferences || (\r\n (isPure && updateInfo.reason.propsDifferences.length === 0)\r\n )\r\n )\r\n\r\n if(!notifiedByHooks){\r\n options.notifier(updateInfo)\r\n }\r\n }\r\n\r\n return FunctionalComponent(...arguments)\r\n }\r\n\r\n try{\r\n WDYRFunctionalComponent.displayName = displayName\r\n }catch(e){\r\n // not crucial if displayName couldn't be set\r\n }\r\n\r\n WDYRFunctionalComponent.ComponentForHooksTracking = FunctionalComponent\r\n defaults(WDYRFunctionalComponent, FunctionalComponent)\r\n\r\n return WDYRFunctionalComponent\r\n}\r\n","import {get} 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\nimport patchClassComponent from './patches/patchClassComponent'\r\nimport patchFunctionalOrStrComponent from './patches/patchFunctionalOrStrComponent'\r\nimport patchMemoComponent from './patches/patchMemoComponent'\r\nimport patchForwardRefComponent from './patches/patchForwardRefComponent'\r\n\r\nimport {isForwardRefComponent, isMemoComponent, isReactClassComponent} from './utils'\r\n\r\nconst initialHookValue = Symbol('initial-hook-value')\r\nfunction trackHookChanges(hookName, {path: hookPath}, hookResult, React, options, ownerDataMap, hooksRef){\r\n const nextHook = hookPath ? get(hookResult, hookPath) : hookResult\r\n hooksRef.current.push({hookName, result: nextHook})\r\n const ComponentHookDispatchedFromInstance = (\r\n React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED &&\r\n React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner.current\r\n )\r\n\r\n const prevHookResultRef = React.useRef(initialHookValue)\r\n\r\n if(!ComponentHookDispatchedFromInstance){\r\n return hookResult\r\n }\r\n\r\n const Component = ComponentHookDispatchedFromInstance.type.ComponentForHooksTracking || ComponentHookDispatchedFromInstance.type\r\n const displayName = getDisplayName(Component)\r\n\r\n const isShouldTrack = shouldTrack({Component, displayName, options, React, isHookChange: true})\r\n if(!isShouldTrack){\r\n return hookResult\r\n }\r\n\r\n const prevHookResult = prevHookResultRef.current\r\n prevHookResultRef.current = hookResult\r\n\r\n if(prevHookResult !== initialHookValue){\r\n const notification = getUpdateInfo({\r\n Component: Component,\r\n displayName,\r\n hookName,\r\n prevHook: hookPath ? get(prevHookResult, hookPath) : prevHookResult,\r\n nextHook,\r\n options,\r\n ownerDataMap\r\n })\r\n\r\n if(notification.reason.hookDifferences){\r\n options.notifier(notification)\r\n }\r\n }\r\n\r\n return hookResult\r\n}\r\n\r\nfunction createPatchedComponent(componentsMap, Component, displayName, React, options, ownerDataMap){\r\n if(isMemoComponent(Component)){\r\n return patchMemoComponent(Component, displayName, React, options, ownerDataMap)\r\n }\r\n\r\n if(isForwardRefComponent(Component)){\r\n return patchForwardRefComponent(Component, displayName, React, options, ownerDataMap)\r\n }\r\n\r\n if(isReactClassComponent(Component)){\r\n return patchClassComponent(Component, displayName, React, options, ownerDataMap)\r\n }\r\n\r\n return patchFunctionalOrStrComponent(Component, false, displayName, React, options, ownerDataMap)\r\n}\r\n\r\nfunction getPatchedComponent(componentsMap, Component, displayName, React, options, ownerDataMap){\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, ownerDataMap)\r\n\r\n componentsMap.set(Component, WDYRPatchedComponent)\r\n return WDYRPatchedComponent\r\n}\r\n\r\nfunction getIsSupportedComponentType(Comp){\r\n if(!Comp){\r\n return false\r\n }\r\n\r\n if(typeof Comp === 'function'){\r\n return true\r\n }\r\n\r\n if(isMemoComponent(Comp)){\r\n return getIsSupportedComponentType(Comp.type)\r\n }\r\n\r\n if(isForwardRefComponent(Comp)){\r\n return getIsSupportedComponentType(Comp.render)\r\n }\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 const ownerDataMap = new WeakMap()\r\n const hooksRef = {current: []}\r\n\r\n // Intercept assignments to ReactCurrentOwner.current and reset hooksRef\r\n let currentOwner = null\r\n if(React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED){\r\n Object.defineProperty(React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner, 'current', {\r\n get(){\r\n return currentOwner\r\n },\r\n set(value){\r\n currentOwner = value\r\n hooksRef.current = []\r\n }\r\n })\r\n }\r\n\r\n React.createElement = function(componentNameOrComponent, ...rest){\r\n let isShouldTrack = null\r\n let displayName = null\r\n let WDYRPatchedComponent = null\r\n\r\n try{\r\n isShouldTrack = (\r\n getIsSupportedComponentType(componentNameOrComponent) &&\r\n shouldTrack({Component: componentNameOrComponent, displayName: getDisplayName(componentNameOrComponent), React, options})\r\n )\r\n\r\n if(isShouldTrack){\r\n displayName = (\r\n componentNameOrComponent &&\r\n componentNameOrComponent.whyDidYouRender &&\r\n componentNameOrComponent.whyDidYouRender.customName ||\r\n getDisplayName(componentNameOrComponent)\r\n )\r\n\r\n WDYRPatchedComponent = getPatchedComponent(componentsMap, componentNameOrComponent, displayName, React, options, ownerDataMap)\r\n\r\n const element = origCreateElement.apply(React, [WDYRPatchedComponent, ...rest])\r\n if(options.logOwnerReasons){\r\n const OwnerInstance = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner.current\r\n if(OwnerInstance){\r\n const Component = OwnerInstance.type.ComponentForHooksTracking || OwnerInstance.type\r\n const displayName = getDisplayName(Component)\r\n ownerDataMap.set(element.props, {\r\n Component,\r\n displayName,\r\n props: OwnerInstance.pendingProps,\r\n state: OwnerInstance.stateNode != null ? OwnerInstance.stateNode.state : null,\r\n hooks: hooksRef.current\r\n })\r\n }\r\n }\r\n\r\n return element\r\n }\r\n }\r\n catch(e){\r\n options.consoleLog('whyDidYouRender error. Please file a bug at https://github.com/welldone-software/why-did-you-render/issues.', {\r\n errorInfo: {\r\n error: e,\r\n componentNameOrComponent,\r\n rest,\r\n options,\r\n isShouldTrack,\r\n displayName,\r\n WDYRPatchedComponent\r\n }\r\n })\r\n }\r\n\r\n return origCreateElement.apply(React, [componentNameOrComponent, ...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 if(options.trackHooks){\r\n const nativeHooks = Object.entries(hooksConfig).map(([hookName, hookTrackingConfig]) => {\r\n return [React, hookName, hookTrackingConfig]\r\n })\r\n\r\n const hooksToTrack = [\r\n ...nativeHooks,\r\n ...options.trackExtraHooks\r\n ]\r\n\r\n hooksToTrack.forEach(([hookParent, hookName, hookTrackingConfig = {}]) => {\r\n const originalHook = hookParent[hookName]\r\n const newHookName = hookName[0].toUpperCase() + hookName.slice(1)\r\n const newHook = function(...args){\r\n const hookResult = originalHook.call(this, ...args)\r\n trackHookChanges(hookName, hookTrackingConfig, hookResult, React, options, ownerDataMap, hooksRef)\r\n return hookResult\r\n }\r\n Object.defineProperty(newHook, 'name', {value: newHookName, writable: false})\r\n Object.assign(newHook, {originalHook})\r\n hookParent[hookName] = newHook\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\r\n componentsMap = null\r\n\r\n const hooksToRevert = [\r\n ...Object.keys(hooksConfig).map(hookName => [React, hookName]),\r\n ...options.trackExtraHooks\r\n ]\r\n hooksToRevert.forEach(([hookParent, hookName]) => {\r\n if(hookParent[hookName].originalHook){\r\n hookParent[hookName] = hookParent[hookName].originalHook\r\n }\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","import {defaults} from 'lodash'\r\n\r\nimport getDisplayName from '../getDisplayName'\r\n\r\nimport {isForwardRefComponent, isMemoComponent, isReactClassComponent} from '../utils'\r\nimport patchClassComponent from './patchClassComponent'\r\nimport patchFunctionalOrStrComponent from './patchFunctionalOrStrComponent'\r\n\r\nexport default function patchMemoComponent(MemoComponent, displayName, React, options, ownerDataMap){\r\n const {type: InnerMemoComponent} = MemoComponent\r\n\r\n const isInnerMemoComponentAClassComponent = isReactClassComponent(InnerMemoComponent)\r\n const isInnerMemoComponentForwardRefs = isForwardRefComponent(InnerMemoComponent)\r\n const isInnerMemoComponentAnotherMemoComponent = isMemoComponent(InnerMemoComponent)\r\n\r\n const WrappedFunctionalComponent = isInnerMemoComponentForwardRefs ?\r\n InnerMemoComponent.render :\r\n InnerMemoComponent\r\n\r\n const PatchedInnerComponent = isInnerMemoComponentAClassComponent ?\r\n patchClassComponent(WrappedFunctionalComponent, displayName, React, options, ownerDataMap) :\r\n (isInnerMemoComponentAnotherMemoComponent ?\r\n patchMemoComponent(WrappedFunctionalComponent, displayName, React, options, ownerDataMap) :\r\n patchFunctionalOrStrComponent(WrappedFunctionalComponent, true, displayName, React, options, ownerDataMap)\r\n )\r\n\r\n try{\r\n PatchedInnerComponent.displayName = getDisplayName(WrappedFunctionalComponent)\r\n }catch(e){\r\n // not crucial if displayName couldn't be set\r\n }\r\n\r\n PatchedInnerComponent.ComponentForHooksTracking = MemoComponent\r\n defaults(PatchedInnerComponent, WrappedFunctionalComponent)\r\n\r\n const WDYRMemoizedFunctionalComponent = React.memo(\r\n isInnerMemoComponentForwardRefs ? React.forwardRef(PatchedInnerComponent) : PatchedInnerComponent,\r\n MemoComponent.compare\r\n )\r\n\r\n try{\r\n WDYRMemoizedFunctionalComponent.displayName = displayName\r\n }catch(e){\r\n // not crucial if displayName couldn't be set\r\n }\r\n\r\n defaults(WDYRMemoizedFunctionalComponent, MemoComponent)\r\n\r\n return WDYRMemoizedFunctionalComponent\r\n}\r\n","import {defaults} from 'lodash'\r\n\r\nimport getDisplayName from '../getDisplayName'\r\nimport {isMemoComponent} from '../utils'\r\nimport patchFunctionalOrStrComponent from './patchFunctionalOrStrComponent'\r\n\r\nexport default function patchForwardRefComponent(ForwardRefComponent, displayName, React, options, ownerDataMap){\r\n const {render: InnerForwardRefComponent} = ForwardRefComponent\r\n\r\n const isInnerComponentMemoized = isMemoComponent(InnerForwardRefComponent)\r\n const WrappedFunctionalComponent = isInnerComponentMemoized ?\r\n InnerForwardRefComponent.type : InnerForwardRefComponent\r\n\r\n const WDYRWrappedByReactForwardRefFunctionalComponent = (\r\n patchFunctionalOrStrComponent(WrappedFunctionalComponent, isInnerComponentMemoized, displayName, React, options, ownerDataMap)\r\n )\r\n\r\n WDYRWrappedByReactForwardRefFunctionalComponent.displayName = getDisplayName(WrappedFunctionalComponent)\r\n WDYRWrappedByReactForwardRefFunctionalComponent.ComponentForHooksTracking = WrappedFunctionalComponent\r\n defaults(WDYRWrappedByReactForwardRefFunctionalComponent, WrappedFunctionalComponent)\r\n\r\n const WDYRForwardRefFunctionalComponent = React.forwardRef(\r\n isInnerComponentMemoized ?\r\n React.memo(WDYRWrappedByReactForwardRefFunctionalComponent, InnerForwardRefComponent.compare) :\r\n WDYRWrappedByReactForwardRefFunctionalComponent\r\n )\r\n\r\n try{\r\n WDYRForwardRefFunctionalComponent.displayName = displayName\r\n }catch(e){\r\n // not crucial if displayName couldn't be set\r\n }\r\n\r\n defaults(WDYRForwardRefFunctionalComponent, ForwardRefComponent)\r\n\r\n return WDYRForwardRefFunctionalComponent\r\n}\r\n","import whyDidYouRender from './whyDidYouRender'\r\nimport defaultNotifier from './defaultNotifier'\r\n\r\nwhyDidYouRender.defaultNotifier = defaultNotifier\r\nexport default whyDidYouRender\r\n"],"names":["Array","isArray","global","Object","freeSelf","self","freeGlobal","Function","root","Symbol","objectProto","prototype","hasOwnProperty","nativeObjectToString","toString","symToStringTag","toStringTag","undefined","value","isOwn","call","tag","unmasked","e","result","getRawTag","objectToString","isObjectLike","baseGetTag","reIsDeepProp","reIsPlainProp","object","type","isSymbol","test","uid","isObject","maskSrcKey","exec","coreJsData","keys","IE_PROTO","func","funcToString","reIsHostCtor","funcProto","reIsNative","RegExp","replace","isMasked","isFunction","toSource","key","getValue","baseIsNative","getNative","this","__data__","nativeCreate","size","has","data","Hash","entries","index","length","clear","entry","set","hashClear","hashDelete","get","hashGet","hashHas","hashSet","other","array","eq","splice","assocIndexOf","pop","push","ListCache","listCacheClear","listCacheDelete","listCacheGet","listCacheHas","listCacheSet","hash","map","Map","string","isKeyable","getMapData","MapCache","mapCacheClear","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","memoize","resolver","TypeError","memoized","args","arguments","apply","cache","Cache","rePropName","reEscapeChar","memoizeCapped","charCodeAt","match","number","quote","subString","iteratee","symbolProto","symbolToString","baseToString","arrayMap","isKey","stringToPath","path","castPath","toKey","defaultValue","baseGet","diffTypes","hasSymbol","REACT_MEMO_TYPE","REACT_FORWARD_REF_TYPE","diffTypesDescriptions","inHotReload","logDifference","Component","displayName","hookName","prefixMessage","diffObjType","differences","values","options","consoleLog","forEach","pathString","diffType","prevValue","nextValue","consoleGroup","diffNameColor","diffPathColor","consoleGroupEnd","prev","next","defaultNotifier","updateInfo","prevProps","prevState","prevHook","nextProps","nextState","nextHook","reason","ownerDataMap","logOnDifferentValues","whyDidYouRender","propsDifferences","some","diff","stateDifferences","hookDifferences","shouldLog","titleColor","ownerDifferences","prevOwnerData","nextOwnerData","props","state","i","hooks","createDefaultNotifier","hotReloadBufferMs","module","hot","addStatusHandler","status","setTimeout","emptyFn","getDisplayName","name","render","_isString","accumulator","initAccum","fromRight","keysFunc","iterable","createBaseFor","n","propertyIsEnumerable","baseIsArguments","freeExports","exports","nodeType","freeModule","Buffer","isBuffer","stubFalse","reIsUint","typedArrayTags","isLength","freeProcess","process","nodeUtil","types","require","binding","nodeIsTypedArray","isTypedArray","baseUnary","baseIsTypedArray","inherited","isArr","isArg","isArguments","isBuff","isType","skipIndexes","baseTimes","String","isIndex","Ctor","constructor","transform","arg","overArg","isPrototype","nativeKeys","isArrayLike","arrayLikeKeys","baseKeys","eachFunc","collection","createBaseEach","baseFor","pairs","LARGE_ARRAY_SIZE","Stack","stackClear","stackDelete","stackGet","stackHas","stackSet","SetCache","add","setCacheAdd","setCacheHas","predicate","bitmask","customizer","equalFunc","stack","isPartial","arrLength","othLength","stacked","seen","arrValue","othValue","compared","arraySome","othIndex","cacheHas","Uint8Array","symbolValueOf","valueOf","byteLength","byteOffset","buffer","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","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","equalByTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","equalObjects","baseIsEqual","baseIsEqualDeep","source","matchData","noCustomizer","srcValue","COMPARE_PARTIAL_FLAG","isStrictComparable","getMatchData","matchesStrictComparable","baseIsMatch","hasFunc","hasPath","baseHasIn","hasIn","baseProperty","basePropertyDeep","identity","baseMatchesProperty","baseMatches","property","arrayReduce","baseReduce","baseIteratee","baseEach","baseHas","nodeIsSet","isSet","baseIsSet","nodeIsRegExp","isRegExp","baseIsRegExp","nodeIsDate","isDate","baseIsDate","getPrototypeOf","objectCtorString","proto","getPrototype","hasElementType","Element","REACT_ELEMENT_TYPE","isReactElement","$$typeof","trackDiff","a","b","diffsAccumulator","calculateDeepEqualDiffs","initialPathString","diffs","accumulateDeepEqualDiffs","_isArray","arrayLength","arrayItemDiffs","numberOfDeepEqualsItems","diffEquals","_isSet","valA","_isDate","getTime","Date","_isRegExp","reactElementPropsAreDeepEqual","_isFunction","_isPlainObject","_keys","keysLength","_has","objectValuesDiffs","numberOfDeepEqualsObjectValues","deepEquals","error","console","warn","emptyObject","findObjectsDifferences","userPrevObj","userNextObj","shallow","prevObj","nextObj","keysOfBothObjects","_reduce","deepEqualDiffs","getOwnerDifferences","getUpdateReason","getUpdateInfo","isReactClassComponent","isReactComponent","isMemoComponent","isForwardRefComponent","shouldTrack","React","isHookChange","exclude","regex","shouldExclude","trackHooks","trackAllPureComponents","PureComponent","include","shouldInclude","thisArg","nativeMax","Math","max","start","otherArgs","defineProperty","configurable","enumerable","constant","writable","nativeNow","now","count","lastCalled","stamp","remaining","shortOut","baseSetToString","setToString","overRest","nativeKeysIn","isProto","baseKeysIn","baseRest","sources","guard","isIterateeCall","keysIn","propsIndex","propsLength","patchClassComponent","ClassComponent","WDYRPatchedClassComponent","context","_WDYR","renderNumber","origRender","_get","_this","isStrictMode","reactComponentInstance","reactInternalFiber","_reactInternalFiber","mode","checkIfInsideAStrictModeTree","notifier","patchFunctionalOrStrComponent","FunctionalOrStringComponent","isPure","FunctionalComponent","componentTypeStr","createElement","getFunctionalComponentFromStringComponent","WDYRFunctionalComponent","ref","useRef","current","notifiedByHooks","ComponentForHooksTracking","initialHookValue","trackHookChanges","hookResult","hooksRef","hookPath","ComponentHookDispatchedFromInstance","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","ReactCurrentOwner","prevHookResultRef","prevHookResult","notification","createPatchedComponent","componentsMap","patchMemoComponent","MemoComponent","InnerMemoComponent","isInnerMemoComponentAClassComponent","isInnerMemoComponentForwardRefs","isInnerMemoComponentAnotherMemoComponent","WrappedFunctionalComponent","PatchedInnerComponent","WDYRMemoizedFunctionalComponent","memo","forwardRef","compare","ForwardRefComponent","InnerForwardRefComponent","isInnerComponentMemoized","WDYRWrappedByReactForwardRefFunctionalComponent","WDYRForwardRefFunctionalComponent","patchForwardRefComponent","getPatchedComponent","WDYRPatchedComponent","getIsSupportedComponentType","Comp","hooksConfig","useState","useReducer","useContext","useMemo","userOptions","group","groupEnd","collapseGroups","groupCollapsed","onlyLogs","log","logOwnerReasons","trackExtraHooks","normalizeOptions","origCreateElement","origCreateFactory","createFactory","currentOwner","componentNameOrComponent","isShouldTrack","rest","customName","element","OwnerInstance","pendingProps","stateNode","errorInfo","assign","factory","bind","nativeHooks","hookTrackingConfig","hookParent","originalHook","newHookName","toUpperCase","slice","newHook","__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 326e838..3a4b313 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@welldone-software/why-did-you-render", - "version": "4.2.2", + "version": "4.2.3", "description": "Monkey patches React to notify you about avoidable re-renders.", "types": "types.d.ts", "main": "dist/cjs/whyDidYouRender.min.js",