diff --git a/.eslintrc b/.eslintrc
index 4d12ca9..0cf3c37 100644
--- a/.eslintrc
+++ b/.eslintrc
@@ -50,6 +50,6 @@
"as": {"before": true, "after": true}
}}],
"space-before-blocks": ["error", "never"],
- "comma-dangle": ["error", "never"],
+ "comma-dangle": ["error", "never"]
}
}
diff --git a/README.md b/README.md
index 0105572..44969fc 100644
--- a/README.md
+++ b/README.md
@@ -6,27 +6,25 @@
![Snyk Vulnerabilities for npm package](https://img.shields.io/snyk/vulnerabilities/npm/@welldone-software/why-did-you-render)
[![Coverage Status](https://coveralls.io/repos/github/welldone-software/why-did-you-render/badge.svg?branch=add-e2e-tests-using-cypress)](https://coveralls.io/github/welldone-software/why-did-you-render?branch=add-e2e-tests-using-cypress)
-`why-did-you-render` by [Welldone Software](https://welldone.software) monkey patches **`React`** to notify you about avoidable re-renders. (Works with **`React Native`** as well.)
+`why-did-you-render` by [Welldone Software](https://welldone.software/) monkey patches **`React`** to notify you about avoidable re-renders. (Works with **`React Native`** as well.)
-For example, when you pass `style={{width: '100%'}}` to a big pure component and make it always re-render:
+For example, if you pass `style={{width: '100%'}}` to a big pure component it would always re-render on every element creation:
+```jsx
+
+```
![demo](images/demo.png)
It can also help you to simply track when and why a certain component re-renders.
## Setup
-The last version of the library has been tested with **`React@16.13.1`** but it is expected to work with all `React@16` versions.
-
-> For versions before 16.8 try turning off hooks support by using `trackHooks: false` in `whyDidYouRender`'s init options.*
+The last version of the library has been tested [(unit tests and E2E)]((https://travis-ci.com/welldone-software/why-did-you-render.svg?branch=master)) with **`React@16.13.1`** but it is expected to work with all `React@16` versions.
```
npm install @welldone-software/why-did-you-render --save
```
-## Installation
-Execute `whyDidYouRender` **as the first thing that happens in your application** (even before `react-hot-loader`).
-
-The best way of doing this would be to create a file (lets say `wdyr.js`) near the entrypoint of your application:
+Create a `wdyr.js` file and import it as **the first import** in your application.
`wdyr.js`:
```jsx
@@ -39,11 +37,14 @@ if (process.env.NODE_ENV === 'development') {
});
}
```
-And then import `wdyr.js` (even before `react-hot-loader`):
+
+> **Notice: The library should *NEVER* be used in production because it slows down React**
+
+Import `wdyr.js` as the first import (even before `react-hot-loader`):
`index.js`:
```jsx
-import './wdyr';
+import './wdyr'; // <--- first import
import 'react-hot-loader';
import {hot} from 'react-hot-loader/root';
@@ -52,15 +53,26 @@ import React from 'react';
import ReactDOM from 'react-dom';
// ...
import {App} from './app';
-
// ...
const HotApp = hot(App);
// ...
ReactDOM.render(, document.getElementById('root'));
```
-If you use the latest `react-redux` with hooks (or any other custom library), you can also patch it like this:
-```js
+If you use `trackAllPureComponents` like we suggest, all pure components ([React.PureComponent](https://reactjs.org/docs/react-api.html#reactpurecomponent) or [React.memo](https://reactjs.org/docs/react-api.html#reactmemo)) will be tracked.
+
+Otherwise, add `whyDidYouRender = true` to components you want to track.
+
+More information about what is tracked can be found in [Tracking Components](#tracking-components).
+
+Can't see any WDYR logs? Check out the troubleshoot or search the issues.
+
+## Custom Hooks
+
+Also, tracking custom hooks is possible by using `trackExtraHooks`. For example if you want to track `useSelector` from React Redux:
+
+`wdyr.js`:
+```jsx
import React from 'react';
if (process.env.NODE_ENV === 'development') {
@@ -74,7 +86,8 @@ if (process.env.NODE_ENV === 'development') {
});
}
```
-But there is currently a problem with rewriting exports of imported files in `webpack` and a small workaround should be applied to support this feature [#85 - trackExtraHooks cannot set property](https://github.com/welldone-software/why-did-you-render/issues/85)
+
+> Notice that there's currently a problem with rewriting exports of imported files in `webpack`. A quick workaround can help with it: [#85 - trackExtraHooks cannot set property](https://github.com/welldone-software/why-did-you-render/issues/85).
## Read More
* [Why Did You Render Mr. Big Pure React Component???](http://bit.ly/wdyr1)
@@ -92,7 +105,7 @@ You can test the library in [the official sandbox](http://bit.ly/wdyr-sb).
And another [official sandbox with hooks tracking](https://codesandbox.io/s/why-did-you-render-sandbox-with-hooks-pyi14)
## Tracking Components
-You can track all pure components (components that are extending [React.PureComponent](https://reactjs.org/docs/react-api.html#reactpurecomponent), or function components that are wrapped with [React.memo](https://reactjs.org/docs/react-api.html#reactmemo)) using the `trackAllPureComponents: true` option.
+You can track all pure components ([React.PureComponent](https://reactjs.org/docs/react-api.html#reactpurecomponent) or [React.memo](https://reactjs.org/docs/react-api.html#reactmemo)) using the `trackAllPureComponents: true` option.
You can also manually track any component you want by setting `whyDidYouRender` on them like this:
```js
@@ -106,7 +119,7 @@ class BigList extends React.Component {
}
```
-And for functional components:
+Or for functional components:
```js
const BigListPureComponent = props => (
@@ -141,20 +154,12 @@ EnhancedMenu.whyDidYouRender = {
- `customName`:
- Sometimes the name of the component can be very inconvenient. For example:
-
- ```js
- const EnhancedMenu = withPropsOnChange(withPropsOnChange(withStateHandlers(withPropsOnChange(withState(withPropsOnChange(lifecycle(withPropsOnChange(withPropsOnChange(onlyUpdateForKeys(LoadNamespace(Connect(withState(withState(withPropsOnChange(lifecycle(withPropsOnChange(withHandlers(withHandlers(withHandlers(withHandlers(Connect(lifecycle(Menu)))))))))))))))))))))))
- ```
-
- will have the display name:
+ Sometimes the name of the component can be missing or very inconvenient. For example:
```js
withPropsOnChange(withPropsOnChange(withStateHandlers(withPropsOnChange(withState(withPropsOnChange(lifecycle(withPropsOnChange(withPropsOnChange(onlyUpdateForKeys(LoadNamespace(Connect(withState(withState(withPropsOnChange(lifecycle(withPropsOnChange(withHandlers(withHandlers(withHandlers(withHandlers(Connect(lifecycle(Menu)))))))))))))))))))))))
```
-
- To prevent polluting the console, and any other reason, you can change it using `customName`.
-
+
## Options
Optionally you can pass in `options` as the second parameter. The following options are available:
- `include: [RegExp, ...]` (`null` by default)
@@ -162,8 +167,8 @@ Optionally you can pass in `options` as the second parameter. The following opti
- `trackAllPureComponents: false`
- `trackHooks: true`
- `trackExtraHooks: []`
+- `logOwnerReasons: true`
- `logOnDifferentValues: false`
-- `logOwnerReasons: false`
- `hotReloadBufferMs: 500`
- `onlyLogs: false`
- `collapseGroups: false`
@@ -173,28 +178,34 @@ Optionally you can pass in `options` as the second parameter. The following opti
- `notifier: ({Component, displayName, prevProps, prevState, nextProps, nextState, reason, options}) => void`
#### include / exclude
-You can include or exclude tracking for re-renders for components
-by their displayName with the `include` and `exclude` options.
+##### (default: `null`)
-*Notice: **exclude** takes priority over both `include` and `whyDidYouRender` statics on components.*
+You can include or exclude tracking of components by their displayName using the `include` and `exclude` options.
-For example, the following code is used to [track all redundant re-renders that are caused by React-Redux](http://bit.ly/wdyr04):
+For example, the following code is used to [track all redundant re-renders that are caused by older React-Redux](http://bit.ly/wdyr04):
```js
whyDidYouRender(React, { include: [/^ConnectFunction/] });
```
+> *Notice: **exclude** takes priority over both `include` and manually set `whyDidYouRender = `*
#### trackAllPureComponents
+##### (default: `false`)
+
You can track all pure components (both `React.memo` and `React.PureComponent` components)
-*Notice: You can exclude the tracking of any specific component with `whyDidYouRender = false`.*
+> *Notice: You can exclude the tracking of any specific component with `whyDidYouRender = false`*
#### trackHooks
+##### (default: `true`)
+
You can turn off tracking of hooks changes.
[Understand and fix hook issues](http://bit.ly/wdyr3).
#### trackExtraHooks
-Adding extra hooks to track for "redundant" results:
+##### (default: `[]`)
+
+Track custom hooks:
```js
whyDidYouRender(React, {
@@ -204,60 +215,80 @@ whyDidYouRender(React, {
});
```
-> There is currently a problem with rewriting exports of imported files in webpack.
+> There is currently a problem with rewriting exports of imported files in webpack. A workaround is available here: [#85 - trackExtraHooks cannot set property](https://github.com/welldone-software/why-did-you-render/issues/85)
-> To see available workarounds check out the discussion at bug [#85 - trackExtraHooks cannot set property](https://github.com/welldone-software/why-did-you-render/issues/85)
+#### logOwnerReasons
+##### (default: `true`)
+
+One way of fixing re-render issues is preventing the component's owner from re-rendering.
+
+This option is `true` by default and it lets you view the reasons why an owner component re-renders.
+
+![demo](images/logOwnerReasons.png)
#### logOnDifferentValues
-Normally, you only want notifications about component re-renders when their props and state
-are the same, because it means these re-renders could have been avoided. But you can also track
-all re-renders, even on different state/props.
+##### (default: `false`)
+
+Normally, you only want logs about component re-renders when they could have been avoided.
+With this option, it is possible to track all re-renders.
+
+For example:
```js
render()
render()
-// this will only cause whyDidYouRender notifications for {logOnDifferentValues: true}
+// will only log if you use {logOnDifferentValues: true}
```
-#### logOwnerReasons
-One way of fixing re-render issues is preventing the component's owner from re-rendering.
-To make that easier, you can use `logOwnerReasons: true` to view the reasons why owner component re-renders.
-![demo](images/logOwnerReasons.png)
-
#### hotReloadBufferMs
+##### (default: `500`)
+
Time in milliseconds to ignore updates after a hot reload is detected.
-We can't currently know exactly if a render was triggered by hot reload,
-so instead, we ignore all updates for `hotReloadBufferMs` (default: 500) after a hot reload.
+When a hot reload is detected, we ignore all updates for `hotReloadBufferMs` to not spam the console.
#### onlyLogs
-If you don't want to use `console.group` to group logs by component, you can print them as simple logs.
+##### (default: `false`)
+
+If you don't want to use `console.group` to group logs you can print them as simple logs.
#### collapseGroups
-Grouped logs can start collapsed:
+##### (default: `false`)
+
+Grouped logs can be collapsed.
#### titleColor / diffNameColor / diffPathColor
+##### (default titleColor: `'#058'`)
+##### (default diffNameColor: `'blue'`)
+##### (default diffPathColor: `'red'`)
+
Controls the colors used in the console notifications
#### notifier
+##### (default: defaultNotifier that is exposed from the library)
+
You can create a custom notifier if the default one does not suite your needs.
## Troubleshooting
-### `Class constructors must be invoked with 'new'`.
-If you are building for latest browsers (or using es6 classes without building) you don't transpile the "class" keyword.
-
-This causes an error because the library uses transpiled classes, and [transpiled classes currently can't extend native classes](https://github.com/welldone-software/why-did-you-render/issues/5).
-
-To fix this, use the "no-classes-transpile" dist:
-```js
-import React from 'react';
-
-if (process.env.NODE_ENV === 'development') {
- const whyDidYouRender = require('@welldone-software/why-did-you-render/dist/no-classes-transpile/umd/whyDidYouRender.min.js');
- whyDidYouRender(React);
-}
-```
+### No tracking
+* If you are in production, WDYR is probably disabled.
+* Maybe no component is tracked
+ * Check out [Tracking Components](#tracking-components) once again.
+ * If you track all pure components ([React.PureComponent](https://reactjs.org/docs/react-api.html#reactpurecomponent) or [React.memo](https://reactjs.org/docs/react-api.html#reactmemo)), maybe your none of your components are not pure.
+* Maybe you have no issues
+ * Try causing an issue by temporary rendering the whole app twice in it's entry point:
+
+ `index.js`:
+ ```jsx
+ const HotApp = hot(App);
+ HotApp.whyDidYouRender = true;
+ ReactDOM.render(, document.getElementById('root'));
+ ReactDOM.render(, document.getElementById('root'));
+ ```
+
+### Custom Hooks tracking (like useSelector)
+There's currently a problem with rewriting exports of imported files in `webpack`. A quick workaround can help with it: [#85 - trackExtraHooks cannot set property](https://github.com/welldone-software/why-did-you-render/issues/85).
### React-Redux `connect` HOC is spamming the console
Since `connect` hoists statics, if you add WDYR to the inner component, it is also added to the HOC component where complex hooks are running.
diff --git a/babel.config.js b/babel.config.js
index e6b4708..2724fbb 100644
--- a/babel.config.js
+++ b/babel.config.js
@@ -8,17 +8,13 @@ module.exports = function(api){
const presets = [
['@babel/preset-env', {
- modules: isTest ? 'commonjs' : false,
- exclude: compact([
- isProd && 'babel-plugin-transform-classes'
- ])
+ modules: isTest ? 'commonjs' : false
}],
'@babel/preset-react'
]
const plugins = compact([
(!isProd && !isTest) && 'react-hot-loader/babel',
- 'babel-plugin-lodash',
!isProd && '@babel/plugin-proposal-class-properties'
])
diff --git a/demo/src/logOwnerReasons/index.js b/demo/src/logOwnerReasons/index.js
index abf5931..c5f95ab 100644
--- a/demo/src/logOwnerReasons/index.js
+++ b/demo/src/logOwnerReasons/index.js
@@ -8,7 +8,7 @@ export default {
fn({domElement, whyDidYouRender}){
const stepLogger = createStepLogger()
- whyDidYouRender(React, {logOwnerReasons: true})
+ whyDidYouRender(React)
const Child = () => null
Child.whyDidYouRender = true
diff --git a/package.json b/package.json
index 1b4a5c8..3af7046 100644
--- a/package.json
+++ b/package.json
@@ -3,12 +3,7 @@
"version": "4.3.1",
"description": "Monkey patches React to notify you about avoidable re-renders.",
"types": "types.d.ts",
- "main": "dist/cjs/whyDidYouRender.min.js",
- "module": "dist/esm/whyDidYouRender.min.js",
- "browser": "dist/umd/whyDidYouRender.min.js",
- "main-no-classes-transpile": "dist/no-classes-transpile/cjs/whyDidYouRender.min.js",
- "module-no-classes-transpile": "dist/no-classes-transpile/esm/whyDidYouRender.min.js",
- "browser-no-classes-transpile": "dist/no-classes-transpile/umd/whyDidYouRender.min.js",
+ "main": "dist/whyDidYouRender.min.js",
"files": [
"src",
"dist",
@@ -83,7 +78,6 @@
"astring": "^1.4.3",
"babel-core": "^7.0.0-bridge.0",
"babel-jest": "^26.2.2",
- "babel-plugin-lodash": "^3.3.4",
"concurrently": "^5.3.0",
"coveralls": "^3.1.0",
"create-react-class": "^15.6.3",
diff --git a/rollup.config.js b/rollup.config.js
index 0b8fd47..f005a17 100644
--- a/rollup.config.js
+++ b/rollup.config.js
@@ -1,4 +1,3 @@
-import {flatMap, compact} from 'lodash'
import resolve from 'rollup-plugin-node-resolve'
import commonjs from '@rollup/plugin-commonjs'
import babel from '@rollup/plugin-babel'
@@ -14,66 +13,32 @@ Generated by <%= pkg.authors[0] %>
Generated at <%= moment().format('YYYY-MM-DD') %>
`
-export default flatMap(['none', 'shouldMinify', 'noClassesTranspile', 'both'], buildMode => {
- const shouldMinify = buildMode === 'shouldMinify' || buildMode === 'both'
- const shouldTranspileClasses = buildMode === 'none' || buildMode === 'both'
-
- const babelPlugins = compact([
- shouldTranspileClasses && '@babel/plugin-transform-classes'
- ])
-
- return [
+export default {
+ input: 'src/index.js',
+ external: ['lodash'],
+ output: [
{
- input: 'src/index.js',
- external: importName => [/lodash/].some(libRegexp => libRegexp.test(importName)),
- output: [
- {
- name: 'whyDidYouRender',
- file: (shouldTranspileClasses ? pkg.browser : pkg['browser-no-classes-transpile'])
- .replace('.min', shouldMinify ? '.min' : ''),
- format: 'umd',
- sourcemap: shouldMinify,
- sourcemapFile: pkg.browser.replace('.js', '.js.map'),
- exports: 'default',
- globals: importName => {
- if(importName === 'lodash'){
- return 'lodash'
- }
- if(/lodash/.test(importName)){
- return `lodash.${importName.slice('lodash'.length + 1)}`
- }
- }
- },
- {
- file: (shouldTranspileClasses ? pkg.main : pkg['main-no-classes-transpile'])
- .replace('.min', shouldMinify ? '.min' : ''),
- format: 'cjs',
- sourcemap: shouldMinify,
- sourcemapFile: pkg.main.replace('.js', '.js.map'),
- exports: 'default'
- },
- {
- file: (shouldTranspileClasses ? pkg.module : pkg['module-no-classes-transpile'])
- .replace('.min', shouldMinify ? '.min' : ''),
- format: 'esm',
- sourcemap: shouldMinify,
- sourcemapFile: pkg.module.replace('.js', '.js.map')
- }
- ],
- plugins: [
- babel({
- exclude: 'node_modules/**',
- plugins: babelPlugins,
- babelHelpers: 'bundled'
- }),
- resolve(),
- commonjs(),
- shouldMinify && terser(),
- license({
- sourcemap: true,
- banner
- })
- ]
+ name: 'whyDidYouRender',
+ file: pkg.main,
+ format: 'umd',
+ sourcemap: true,
+ exports: 'default',
+ globals: {
+ lodash: 'lodash'
+ }
}
+ ],
+ plugins: [
+ babel({
+ exclude: 'node_modules/**',
+ babelHelpers: 'bundled'
+ }),
+ resolve(),
+ commonjs(),
+ terser(),
+ license({
+ sourcemap: true,
+ banner
+ })
]
-})
+}
diff --git a/src/normalizeOptions.js b/src/normalizeOptions.js
index b7a7aa5..cc7f990 100644
--- a/src/normalizeOptions.js
+++ b/src/normalizeOptions.js
@@ -30,7 +30,7 @@ export default function normalizeOptions(userOptions = {}){
consoleGroup,
consoleGroupEnd,
logOnDifferentValues: false,
- logOwnerReasons: false,
+ logOwnerReasons: true,
trackHooks: true,
titleColor: '#058',
diffNameColor: 'blue',
diff --git a/src/whyDidYouRender.js b/src/whyDidYouRender.js
index 77d310e..ba724d2 100644
--- a/src/whyDidYouRender.js
+++ b/src/whyDidYouRender.js
@@ -221,7 +221,8 @@ export default function whyDidYouRender(React, userOptions){
Object.assign(React.cloneElement, origCloneElement)
- if(options.trackHooks){
+ const hooksSupported = !!React.useState
+ if(options.trackHooks && hooksSupported){
const nativeHooks = Object.entries(hooksConfig).map(([hookName, hookTrackingConfig]) => {
return [React, hookName, hookTrackingConfig]
})
diff --git a/tests/hooks/useContext.test.js b/tests/hooks/useContext.test.js
index 3f536f3..85a0e96 100644
--- a/tests/hooks/useContext.test.js
+++ b/tests/hooks/useContext.test.js
@@ -135,7 +135,19 @@ describe('hooks - useContext', () => {
hookDifferences: false,
propsDifferences: [],
stateDifferences: false,
- ownerDifferences: false
+ ownerDifferences: {
+ hookDifferences: [{
+ differences: [{
+ diffType: diffTypes.deepEquals,
+ pathString: '',
+ nextValue: {c: 'c'},
+ prevValue: {c: 'c'}
+ }],
+ hookName: 'useState'
+ }],
+ propsDifferences: false,
+ stateDifferences: false
+ }
})
expect(updateInfos[1].reason).toEqual({
hookDifferences: [{
diff --git a/tests/librariesTests/react-redux.test.js b/tests/librariesTests/react-redux.test.js
index 74b552d..89a33b8 100644
--- a/tests/librariesTests/react-redux.test.js
+++ b/tests/librariesTests/react-redux.test.js
@@ -103,7 +103,11 @@ describe('react-redux - simple', () => {
],
stateDifferences: false,
hookDifferences: false,
- ownerDifferences: false
+ ownerDifferences: {
+ hookDifferences: false,
+ propsDifferences: false,
+ stateDifferences: false
+ }
})
})
@@ -142,7 +146,11 @@ describe('react-redux - simple', () => {
],
stateDifferences: false,
hookDifferences: false,
- ownerDifferences: false
+ ownerDifferences: {
+ hookDifferences: false,
+ propsDifferences: false,
+ stateDifferences: false
+ }
})
})
})
diff --git a/tests/librariesTests/react-router-dom.test.js b/tests/librariesTests/react-router-dom.test.js
index d29ed57..bb185f0 100644
--- a/tests/librariesTests/react-router-dom.test.js
+++ b/tests/librariesTests/react-router-dom.test.js
@@ -13,8 +13,7 @@ beforeEach(() => {
updateInfos = []
whyDidYouRender(React, {
notifier: updateInfo => updateInfos.push(updateInfo),
- trackAllPureComponents: true,
- logOwnerReasons: true
+ trackAllPureComponents: true
})
})
diff --git a/tests/librariesTests/styled-components.test.js b/tests/librariesTests/styled-components.test.js
index 827b570..d2100fb 100644
--- a/tests/librariesTests/styled-components.test.js
+++ b/tests/librariesTests/styled-components.test.js
@@ -102,7 +102,16 @@ test('styled-components with forward ref', () => {
}],
stateDifferences: false,
hookDifferences: false,
- ownerDifferences: false
+ ownerDifferences: {
+ hookDifferences: false,
+ propsDifferences: [{
+ pathString: 'a',
+ diffType: diffTypes.deepEquals,
+ prevValue: [],
+ nextValue: []
+ }],
+ stateDifferences: false
+ }
})
})
@@ -139,6 +148,15 @@ test('styled-components with memoized forward ref', () => {
}],
stateDifferences: false,
hookDifferences: false,
- ownerDifferences: false
+ ownerDifferences: {
+ hookDifferences: false,
+ propsDifferences: [{
+ pathString: 'a',
+ diffType: diffTypes.deepEquals,
+ prevValue: [],
+ nextValue: []
+ }],
+ stateDifferences: false
+ }
})
})
diff --git a/tests/logOwnerReasons.test.js b/tests/logOwnerReasons.test.js
index 02e7bfd..ca5e1b7 100644
--- a/tests/logOwnerReasons.test.js
+++ b/tests/logOwnerReasons.test.js
@@ -8,8 +8,7 @@ let updateInfos = []
beforeEach(() => {
updateInfos = []
whyDidYouRender(React, {
- notifier: updateInfo => updateInfos.push(updateInfo),
- logOwnerReasons: true
+ notifier: updateInfo => updateInfos.push(updateInfo)
})
})
diff --git a/tests/strictMode.test.js b/tests/strictMode.test.js
index b4d262c..4f36f86 100644
--- a/tests/strictMode.test.js
+++ b/tests/strictMode.test.js
@@ -188,7 +188,11 @@ test('Strict mode- functional component no props change', () => {
propsDifferences: [],
stateDifferences: false,
hookDifferences: false,
- ownerDifferences: false
+ ownerDifferences: {
+ hookDifferences: false,
+ propsDifferences: [],
+ stateDifferences: false
+ }
})
})
@@ -220,7 +224,16 @@ test('Strict mode- functional component with props change', () => {
}],
stateDifferences: false,
hookDifferences: false,
- ownerDifferences: false
+ ownerDifferences: {
+ hookDifferences: false,
+ propsDifferences: [{
+ pathString: 'a',
+ diffType: diffTypes.deepEquals,
+ prevValue: [],
+ nextValue: []
+ }],
+ stateDifferences: false
+ }
})
})
diff --git a/yarn.lock b/yarn.lock
index 4ce0868..61fb9dc 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -185,7 +185,7 @@
dependencies:
"@babel/types" "^7.11.0"
-"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.0.0-beta.49", "@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.7.4":
+"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.7.4":
version "7.10.4"
resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz#4c5c54be04bd31670a7382797d75b9fa2e5b5620"
integrity sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==
@@ -955,7 +955,7 @@
globals "^11.1.0"
lodash "^4.17.19"
-"@babel/types@^7.0.0", "@babel/types@^7.0.0-beta.49", "@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.11.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4":
+"@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.11.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4":
version "7.11.0"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.11.0.tgz#2ae6bf1ba9ae8c3c43824e5861269871b206e90d"
integrity sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA==
@@ -1900,17 +1900,6 @@ babel-plugin-jest-hoist@^26.2.0:
"@types/babel__core" "^7.0.0"
"@types/babel__traverse" "^7.0.6"
-babel-plugin-lodash@^3.3.4:
- version "3.3.4"
- resolved "https://registry.yarnpkg.com/babel-plugin-lodash/-/babel-plugin-lodash-3.3.4.tgz#4f6844358a1340baed182adbeffa8df9967bc196"
- integrity sha512-yDZLjK7TCkWl1gpBeBGmuaDIFhZKmkoL+Cu2MUUjv5VxUZx/z7tBGBCBcQs5RI1Bkz5LLmNdjx7paOyQtMovyg==
- dependencies:
- "@babel/helper-module-imports" "^7.0.0-beta.49"
- "@babel/types" "^7.0.0-beta.49"
- glob "^7.1.1"
- lodash "^4.17.10"
- require-package-name "^2.0.1"
-
"babel-plugin-styled-components@>= 1":
version "1.11.1"
resolved "https://registry.yarnpkg.com/babel-plugin-styled-components/-/babel-plugin-styled-components-1.11.1.tgz#5296a9e557d736c3186be079fff27c6665d63d76"
@@ -4617,7 +4606,16 @@ jest-watcher@^26.2.0:
jest-util "^26.2.0"
string-length "^4.0.1"
-jest-worker@^26.0.0, jest-worker@^26.2.1:
+jest-worker@^26.0.0:
+ version "26.3.0"
+ resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.3.0.tgz#7c8a97e4f4364b4f05ed8bca8ca0c24de091871f"
+ integrity sha512-Vmpn2F6IASefL+DVBhPzI2J9/GJUsqzomdeN+P+dK8/jKxbh8R3BtFnx3FIta7wYlPU62cpJMJQo4kuOowcMnw==
+ dependencies:
+ "@types/node" "*"
+ merge-stream "^2.0.0"
+ supports-color "^7.0.0"
+
+jest-worker@^26.2.1:
version "26.2.1"
resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.2.1.tgz#5d630ab93f666b53f911615bc13e662b382bd513"
integrity sha512-+XcGMMJDTeEGncRb5M5Zq9P7K4sQ1sirhjdOxsN1462h6lFo9w59bl2LVQmdGEEeU3m+maZCkS2Tcc9SfCHO4A==
@@ -4909,7 +4907,7 @@ lodash.sortby@^4.7.0:
resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438"
integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=
-lodash@4.17.19, lodash@^4, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19:
+lodash@4.17.19, lodash@^4, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19:
version "4.17.19"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b"
integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==
@@ -6106,11 +6104,6 @@ require-main-filename@^2.0.0:
resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b"
integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==
-require-package-name@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/require-package-name/-/require-package-name-2.0.1.tgz#c11e97276b65b8e2923f75dabf5fb2ef0c3841b9"
- integrity sha1-wR6XJ2tluOKSP3Xav1+y7ww4Qbk=
-
resolve-cwd@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d"