From ad09c4039a305b93edb27a37f33a2c39627513c4 Mon Sep 17 00:00:00 2001 From: Fredrik Strand Oseberg Date: Fri, 7 May 2021 08:31:25 +0200 Subject: [PATCH] Fix/strategy constraints (#289) * fix: only update editable strategies if index is less than 0 * fix: add wdyr * fix: set tracking to false as default * chore: update readme --- frontend/README.md | 25 ++- frontend/craco.config.js | 37 ++++ frontend/package.json | 2 + frontend/src/app.css | 2 +- frontend/src/component/App.tsx | 1 - frontend/src/component/common/util.js | 3 +- .../EditStrategyModal/EditStrategyModal.jsx | 29 ++- .../strategy/strategies-list-component.jsx | 4 +- frontend/src/constants/statusCodes.ts | 1 + frontend/src/index.tsx | 1 + frontend/src/store/feature-metrics/actions.js | 10 +- frontend/src/store/feature-metrics/index.js | 5 +- frontend/src/wdyr.ts | 10 + frontend/yarn.lock | 181 +++++++++++++++++- 14 files changed, 290 insertions(+), 21 deletions(-) create mode 100644 frontend/craco.config.js create mode 100644 frontend/src/wdyr.ts diff --git a/frontend/README.md b/frontend/README.md index ba0bb7a760..9819ee560b 100644 --- a/frontend/README.md +++ b/frontend/README.md @@ -2,16 +2,34 @@ # Developing +### Why did you render + +This application is set up with [WDYR](https://github.com/welldone-software/why-did-you-render) and [craco](https://github.com/gsoft-inc/craco) in order to find, debug and remove uneccesary re-renders. This configuration can be found in /src/wdyr.ts. + +In order to turn it on, change the configuration accordingly: + +``` +if (process.env.NODE_ENV === 'development') { + const whyDidYouRender = require('@welldone-software/why-did-you-render'); + whyDidYouRender(React, { + trackAllPureComponents: true, + }); +} +``` + +Now you should be able to review rendering information in the console. If you do utilise this functionality, please remember to set the configuration back to spare other developers the noise in the console. + ### Run with together with local unleash-api: -You need to first start the unleash-api on port 4242 -before you can start working on unleash-frontend. +You need to first start the unleash-api on port 4242 +before you can start working on unleash-frontend. Start webpack-dev-server with hot-reload: + ```bash cd ~/unleash-frontend npm install -npm run start +npm run start ``` ### Run with heroku hosted unleash-api: @@ -23,6 +41,7 @@ npm run start:heroku ``` ## UI Framework + We are using [material-ui](http://material-ui.com/). Happy coding! diff --git a/frontend/craco.config.js b/frontend/craco.config.js new file mode 100644 index 0000000000..b4b841ff29 --- /dev/null +++ b/frontend/craco.config.js @@ -0,0 +1,37 @@ +const presetReact = require('@babel/preset-react').default; +const presetCRA = require('babel-preset-react-app'); + +module.exports = { + babel: { + loaderOptions: (babelLoaderOptions, { env, paths }) => { + const origBabelPresetReactAppIndex = babelLoaderOptions.presets.findIndex( + preset => { + return preset[0].includes('babel-preset-react-app'); + } + ); + + if (origBabelPresetReactAppIndex === -1) { + return babelLoaderOptions; + } + + const overridenBabelPresetReactApp = (...args) => { + const babelPresetReactAppResult = presetCRA(...args); + const origPresetReact = babelPresetReactAppResult.presets.find( + preset => { + return preset[0] === presetReact; + } + ); + Object.assign(origPresetReact[1], { + importSource: '@welldone-software/why-did-you-render', + }); + return babelPresetReactAppResult; + }; + + babelLoaderOptions.presets[ + origBabelPresetReactAppIndex + ] = overridenBabelPresetReactApp; + + return babelLoaderOptions; + }, + }, +}; diff --git a/frontend/package.json b/frontend/package.json index 7defe79af6..1abdf7e002 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -45,8 +45,10 @@ "@types/react": "^17.0.0", "@types/react-dom": "^17.0.0", "@types/react-router-dom": "^5.1.7", + "@welldone-software/why-did-you-render": "^6.1.1", "array-move": "^3.0.1", "classnames": "^2.3.1", + "craco": "^0.0.3", "css-loader": "^5.2.0", "date-fns": "^2.19.0", "debounce": "^1.2.1", diff --git a/frontend/src/app.css b/frontend/src/app.css index faba1003b8..fb97157b8e 100644 --- a/frontend/src/app.css +++ b/frontend/src/app.css @@ -5,9 +5,9 @@ html { height: 100%; overflow: auto; - overflow-y: scroll; } + body { height: 100%; } diff --git a/frontend/src/component/App.tsx b/frontend/src/component/App.tsx index f18f9163bf..65433c2a25 100644 --- a/frontend/src/component/App.tsx +++ b/frontend/src/component/App.tsx @@ -88,7 +88,6 @@ const App = ({ location, user, fetchUiBootstrap }: IAppProps) => { ); }; - // Set state to any for now, to avoid typing up entire state object while converting to tsx. const mapStateToProps = (state: any) => ({ user: state.user.toJS(), diff --git a/frontend/src/component/common/util.js b/frontend/src/component/common/util.js index a9b699c494..bf4c5bbc4e 100644 --- a/frontend/src/component/common/util.js +++ b/frontend/src/component/common/util.js @@ -109,4 +109,5 @@ export const modalStyles = { }, }; -export const updateIndexInArray = (array, index, newValue) => array.map((v, i) => (i === index ? newValue : v)); +export const updateIndexInArray = (array, index, newValue) => + array.map((v, i) => (i === index ? newValue : v)); diff --git a/frontend/src/component/feature/strategy/EditStrategyModal/EditStrategyModal.jsx b/frontend/src/component/feature/strategy/EditStrategyModal/EditStrategyModal.jsx index 139b2e9c13..ab3dd1e7b2 100644 --- a/frontend/src/component/feature/strategy/EditStrategyModal/EditStrategyModal.jsx +++ b/frontend/src/component/feature/strategy/EditStrategyModal/EditStrategyModal.jsx @@ -1,6 +1,12 @@ import React from 'react'; import PropTypes from 'prop-types'; -import { Button, Dialog, DialogContent, DialogTitle, DialogActions } from '@material-ui/core'; +import { + Button, + Dialog, + DialogContent, + DialogTitle, + DialogActions, +} from '@material-ui/core'; import FlexibleStrategy from './FlexibleStrategy'; import DefaultStrategy from './default-strategy'; @@ -10,7 +16,13 @@ import StrategyConstraints from '../StrategyConstraint/StrategyConstraintInput'; import { getHumanReadbleStrategyName } from '../../../../utils/strategy-names'; -const EditStrategyModal = ({ onCancel, strategy, saveStrategy, updateStrategy, strategyDefinition }) => { +const EditStrategyModal = ({ + onCancel, + strategy, + saveStrategy, + updateStrategy, + strategyDefinition, +}) => { const updateParameters = parameters => { const updatedStrategy = { ...strategy, parameters }; updateStrategy(updatedStrategy); @@ -45,7 +57,12 @@ const EditStrategyModal = ({ onCancel, strategy, saveStrategy, updateStrategy, s const { parameters } = strategy; return ( - + Configure {getHumanReadbleStrategyName(strategy.name)} strategy @@ -70,7 +87,11 @@ const EditStrategyModal = ({ onCancel, strategy, saveStrategy, updateStrategy, s - diff --git a/frontend/src/component/feature/strategy/strategies-list-component.jsx b/frontend/src/component/feature/strategy/strategies-list-component.jsx index 87888a8dae..4b76340cbd 100644 --- a/frontend/src/component/feature/strategy/strategies-list-component.jsx +++ b/frontend/src/component/feature/strategy/strategies-list-component.jsx @@ -32,7 +32,8 @@ const StrategiesList = props => { const [editStrategyIndex, setEditStrategyIndex] = useState(); useEffect(() => { - if (!editStrategyIndex) { + const notEditing = editStrategyIndex < 0; + if (notEditing) { updateEditableStrategies(cloneDeep(props.configuredStrategies)); } /* eslint-disable-next-line */ @@ -147,7 +148,6 @@ const StrategiesList = props => { featureToggleName={featureToggleName} addStrategy={addStrategy} /> - {editingStrategy ? ( { - dispatch({ type: START_FETCH_SEEN_APP }); + dispatch({ type: START_FETCH_FEATURE_METRICS }); return api .fetchFeatureMetrics() .then(json => dispatch(receiveFeatureMetrics(json))) - .catch(dispatchAndThrow(dispatch, ERROR_FETCH_SEEN_APP)); + .catch(dispatchAndThrow(dispatch, ERROR_FETCH_FEATURE_METRICS)); }; } export function fetchSeenApps() { return dispatch => { - dispatch({ type: START_FETCH_FEATURE_METRICS }); + dispatch({ type: START_FETCH_SEEN_APP }); return api .fetchSeenApps() .then(json => dispatch(receiveSeenApps(json))) - .catch(dispatchAndThrow(dispatch, ERROR_FETCH_FEATURE_TOGGLES)); + .catch(dispatchAndThrow(dispatch, ERROR_FETCH_SEEN_APP)); }; } diff --git a/frontend/src/store/feature-metrics/index.js b/frontend/src/store/feature-metrics/index.js index 980ac33a7c..5a51c56d04 100644 --- a/frontend/src/store/feature-metrics/index.js +++ b/frontend/src/store/feature-metrics/index.js @@ -2,7 +2,10 @@ import { Map as $Map, fromJS } from 'immutable'; import { RECEIVE_FEATURE_METRICS, RECEIVE_SEEN_APPS } from './actions'; -const metrics = (state = fromJS({ lastHour: {}, lastMinute: {}, seenApps: {} }), action) => { +const metrics = ( + state = fromJS({ lastHour: {}, lastMinute: {}, seenApps: {} }), + action +) => { switch (action.type) { case RECEIVE_SEEN_APPS: return state.set('seenApps', new $Map(action.value)); diff --git a/frontend/src/wdyr.ts b/frontend/src/wdyr.ts new file mode 100644 index 0000000000..6d7fa887d0 --- /dev/null +++ b/frontend/src/wdyr.ts @@ -0,0 +1,10 @@ +/// + +import React from 'react'; + +if (process.env.NODE_ENV === 'development') { + const whyDidYouRender = require('@welldone-software/why-did-you-render'); + whyDidYouRender(React, { + trackAllPureComponents: false, + }); +} diff --git a/frontend/yarn.lock b/frontend/yarn.lock index 76da60c8a1..6301de221a 100644 --- a/frontend/yarn.lock +++ b/frontend/yarn.lock @@ -28,6 +28,11 @@ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.13.12.tgz#a8a5ccac19c200f9dd49624cac6e19d7be1236a1" integrity sha512-3eJJ841uKxeV8dcN/2yGEUy+RfgQspPEgQat85umsE1rotuquQ2AbIub4S6j7c50a2d+4myc+zSlnXeIHrOnhQ== +"@babel/compat-data@^7.13.15": + version "7.14.0" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.14.0.tgz#a901128bce2ad02565df95e6ecbf195cf9465919" + integrity sha512-vu9V3uMM/1o5Hl5OekMUowo3FqXLJSw+s+66nt0fSWVWTtmosdzn45JHOB3cPtZoe6CTBDzvSw0RdOY85Q37+Q== + "@babel/core@7.12.3": version "7.12.3" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.3.tgz#1b436884e1e3bff6fb1328dc02b208759de92ad8" @@ -71,6 +76,27 @@ semver "^6.3.0" source-map "^0.5.0" +"@babel/core@^7.6.0": + version "7.14.0" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.14.0.tgz#47299ff3ec8d111b493f1a9d04bf88c04e728d88" + integrity sha512-8YqpRig5NmIHlMLw09zMlPTvUVMILjqCOtVgu+TVNWEBvy9b5I3RRyhqnrV4hjgEK7n8P9OqvkWJAFmEL6Wwfw== + dependencies: + "@babel/code-frame" "^7.12.13" + "@babel/generator" "^7.14.0" + "@babel/helper-compilation-targets" "^7.13.16" + "@babel/helper-module-transforms" "^7.14.0" + "@babel/helpers" "^7.14.0" + "@babel/parser" "^7.14.0" + "@babel/template" "^7.12.13" + "@babel/traverse" "^7.14.0" + "@babel/types" "^7.14.0" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.1.2" + semver "^6.3.0" + source-map "^0.5.0" + "@babel/generator@^7.12.1", "@babel/generator@^7.13.9": version "7.13.9" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.13.9.tgz#3a7aa96f9efb8e2be42d38d80e2ceb4c64d8de39" @@ -80,6 +106,15 @@ jsesc "^2.5.1" source-map "^0.5.0" +"@babel/generator@^7.14.0": + version "7.14.1" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.14.1.tgz#1f99331babd65700183628da186f36f63d615c93" + integrity sha512-TMGhsXMXCP/O1WtQmZjpEYDhCYC9vFhayWZPJSZCGkPJgUqX0rF0wwtrYvnzVxIjcF80tkUertXVk5cwqi5cAQ== + dependencies: + "@babel/types" "^7.14.1" + jsesc "^2.5.1" + source-map "^0.5.0" + "@babel/helper-annotate-as-pure@^7.10.4", "@babel/helper-annotate-as-pure@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz#0f58e86dfc4bb3b1fcd7db806570e177d439b6ab" @@ -105,6 +140,16 @@ browserslist "^4.14.5" semver "^6.3.0" +"@babel/helper-compilation-targets@^7.13.16": + version "7.13.16" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz#6e91dccf15e3f43e5556dffe32d860109887563c" + integrity sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA== + dependencies: + "@babel/compat-data" "^7.13.15" + "@babel/helper-validator-option" "^7.12.17" + browserslist "^4.14.5" + semver "^6.3.0" + "@babel/helper-create-class-features-plugin@^7.12.1", "@babel/helper-create-class-features-plugin@^7.13.0": version "7.13.11" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.13.11.tgz#30d30a005bca2c953f5653fc25091a492177f4f6" @@ -197,6 +242,20 @@ "@babel/traverse" "^7.13.13" "@babel/types" "^7.13.14" +"@babel/helper-module-transforms@^7.14.0": + version "7.14.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.14.0.tgz#8fcf78be220156f22633ee204ea81f73f826a8ad" + integrity sha512-L40t9bxIuGOfpIGA3HNkJhU9qYrf4y5A5LUSw7rGMSn+pcG8dfJ0g6Zval6YJGd2nEjI7oP00fRdnhLKndx6bw== + dependencies: + "@babel/helper-module-imports" "^7.13.12" + "@babel/helper-replace-supers" "^7.13.12" + "@babel/helper-simple-access" "^7.13.12" + "@babel/helper-split-export-declaration" "^7.12.13" + "@babel/helper-validator-identifier" "^7.14.0" + "@babel/template" "^7.12.13" + "@babel/traverse" "^7.14.0" + "@babel/types" "^7.14.0" + "@babel/helper-optimise-call-expression@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz#5c02d171b4c8615b1e7163f888c1c81c30a2aaea" @@ -254,6 +313,11 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw== +"@babel/helper-validator-identifier@^7.14.0": + version "7.14.0" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz#d26cad8a47c65286b15df1547319a5d0bcf27288" + integrity sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A== + "@babel/helper-validator-option@^7.12.1", "@babel/helper-validator-option@^7.12.17": version "7.12.17" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz#d1fbf012e1a79b7eebbfdc6d270baaf8d9eb9831" @@ -278,6 +342,15 @@ "@babel/traverse" "^7.13.0" "@babel/types" "^7.13.0" +"@babel/helpers@^7.14.0": + version "7.14.0" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.14.0.tgz#ea9b6be9478a13d6f961dbb5f36bf75e2f3b8f62" + integrity sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg== + dependencies: + "@babel/template" "^7.12.13" + "@babel/traverse" "^7.14.0" + "@babel/types" "^7.14.0" + "@babel/highlight@^7.10.4", "@babel/highlight@^7.12.13": version "7.13.10" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.13.10.tgz#a8b2a66148f5b27d666b15d81774347a731d52d1" @@ -292,6 +365,11 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.13.13.tgz#42f03862f4aed50461e543270916b47dd501f0df" integrity sha512-OhsyMrqygfk5v8HmWwOzlYjJrtLaFhF34MrfG/Z73DgYCI6ojNUTUp2TYbtnjo8PegeJp12eamsNettCQjKjVw== +"@babel/parser@^7.14.0": + version "7.14.1" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.14.1.tgz#1bd644b5db3f5797c4479d89ec1817fe02b84c47" + integrity sha512-muUGEKu8E/ftMTPlNp+mc6zL3E9zKWmF5sDHZ5MSsoTP9Wyz64AhEf9kD08xYJ7w6Hdcu8H550ircnPyWSIF0Q== + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.13.12": version "7.13.12" resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.13.12.tgz#a3484d84d0b549f3fc916b99ee4783f26fabad2a" @@ -1150,6 +1228,20 @@ debug "^4.1.0" globals "^11.1.0" +"@babel/traverse@^7.14.0": + version "7.14.0" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.14.0.tgz#cea0dc8ae7e2b1dec65f512f39f3483e8cc95aef" + integrity sha512-dZ/a371EE5XNhTHomvtuLTUyx6UEoJmYX+DT5zBCQN3McHemsuIaKKYqsc/fs26BEkHs/lBZy0J571LP5z9kQA== + dependencies: + "@babel/code-frame" "^7.12.13" + "@babel/generator" "^7.14.0" + "@babel/helper-function-name" "^7.12.13" + "@babel/helper-split-export-declaration" "^7.12.13" + "@babel/parser" "^7.14.0" + "@babel/types" "^7.14.0" + debug "^4.1.0" + globals "^11.1.0" + "@babel/types@^7.0.0", "@babel/types@^7.12.1", "@babel/types@^7.12.13", "@babel/types@^7.12.6", "@babel/types@^7.13.0", "@babel/types@^7.13.12", "@babel/types@^7.13.13", "@babel/types@^7.13.14", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.7.0": version "7.13.14" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.13.14.tgz#c35a4abb15c7cd45a2746d78ab328e362cbace0d" @@ -1159,6 +1251,14 @@ lodash "^4.17.19" to-fast-properties "^2.0.0" +"@babel/types@^7.14.0", "@babel/types@^7.14.1": + version "7.14.1" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.14.1.tgz#095bd12f1c08ab63eff6e8f7745fa7c9cc15a9db" + integrity sha512-S13Qe85fzLs3gYRUnrpyeIrBJIMYv33qSTg1qoBwiG6nPKwUWAD9odSzWhEedpwOIzSEI6gbdQIWEMiCI42iBA== + dependencies: + "@babel/helper-validator-identifier" "^7.14.0" + to-fast-properties "^2.0.0" + "@bcoe/v8-coverage@^0.2.3": version "0.2.3" resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" @@ -1172,6 +1272,15 @@ exec-sh "^0.3.2" minimist "^1.2.0" +"@craco/craco@^5.5.0": + version "5.9.0" + resolved "https://registry.yarnpkg.com/@craco/craco/-/craco-5.9.0.tgz#dcd34330b558596a4841374743071b7fa041dce9" + integrity sha512-2Q8gIB4W0/nPiUxr9iAKUhGsFlXYN0/wngUdK1VWtfV2NtBv+yllNn2AjieaLbttgpQinuOYmDU65vocC0NMDg== + dependencies: + cross-spawn "^7.0.0" + lodash "^4.17.15" + webpack-merge "^4.2.2" + "@csstools/convert-colors@^1.4.0": version "1.4.0" resolved "https://registry.yarnpkg.com/@csstools/convert-colors/-/convert-colors-1.4.0.tgz#ad495dc41b12e75d588c6db8b9834f08fa131eb7" @@ -1765,7 +1874,7 @@ resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-4.2.1.tgz#78b5433344e2f92e8b306c06a5622c50c245bf6b" integrity sha512-S6oPal772qJZHoRZLFc/XoZW2gFvwXusYUmXPXkgxJLuEk2vOt7jc4Yo6z/vtI0EBkbPBVrJJ0B+prLIKiWqHg== -"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.7": +"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.3", "@types/babel__core@^7.1.7": version "7.1.14" resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.14.tgz#faaeefc4185ec71c389f4501ee5ec84b170cc402" integrity sha512-zGZJzzBUVDo/eV6KgbE0f0ZI7dInEYvo12Rb70uNQDshC3SkRMb67ja0GgRHZgAX3Za6rhaWlvbDO8rrGyAb1g== @@ -2053,6 +2162,18 @@ "@types/source-list-map" "*" source-map "^0.7.3" +"@types/webpack@^4.39.2": + version "4.41.28" + resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.28.tgz#0069a2159b7ad4d83d0b5801942c17d54133897b" + integrity sha512-Nn84RAiJjKRfPFFCVR8LC4ueTtTdfWAMZ03THIzZWRJB+rX24BD3LqPSFnbMscWauEsT4segAsylPDIaZyZyLQ== + dependencies: + "@types/anymatch" "*" + "@types/node" "*" + "@types/tapable" "^1" + "@types/uglify-js" "*" + "@types/webpack-sources" "*" + source-map "^0.6.0" + "@types/webpack@^4.41.8": version "4.41.27" resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.27.tgz#f47da488c8037e7f1b2dbf2714fbbacb61ec0ffc" @@ -2329,6 +2450,13 @@ "@webassemblyjs/wast-parser" "1.9.0" "@xtuc/long" "4.2.2" +"@welldone-software/why-did-you-render@^6.1.1": + version "6.1.1" + resolved "https://registry.yarnpkg.com/@welldone-software/why-did-you-render/-/why-did-you-render-6.1.1.tgz#3dcf66620fcafbf79e5260bd6ace5e51254055ac" + integrity sha512-BMFp33T4MC27qvCWsI1SqwZCxIlxoQXsPQFdGLDsPSg7sgoWX4Gzj0+hlKVrWrCBiIxi7gP2JcS9IK6CZzk8mg== + dependencies: + lodash "^4" + "@xtuc/ieee754@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" @@ -3846,6 +3974,17 @@ cosmiconfig@^7.0.0: path-type "^4.0.0" yaml "^1.10.0" +craco@^0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/craco/-/craco-0.0.3.tgz#1e464b0ae5d9176570382d3a3fcdbf3599577012" + integrity sha512-eeibbwJm1CTf/j3xvNgNmsRS7abegp4Cfm5qtn5nE9/0JjZRas+FHj8IlT8FMFWR0XOyZFGcWZgzaTU19DNGoQ== + dependencies: + "@babel/core" "^7.6.0" + "@craco/craco" "^5.5.0" + "@types/babel__core" "^7.1.3" + "@types/webpack" "^4.39.2" + webpack "^4.41.0" + create-ecdh@^4.0.0: version "4.0.4" resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" @@ -4686,7 +4825,7 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0: dependencies: once "^1.4.0" -enhanced-resolve@^4.3.0: +enhanced-resolve@^4.3.0, enhanced-resolve@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz#2f3cfd84dbe3b487f18f2db2ef1e064a571ca5ec" integrity sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg== @@ -7669,7 +7808,7 @@ lodash.uniq@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= -"lodash@>=3.5 <5", lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.5, lodash@^4.7.0: +"lodash@>=3.5 <5", lodash@^4, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.5, lodash@^4.7.0: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -12114,6 +12253,13 @@ webpack-manifest-plugin@2.2.0: object.entries "^1.1.0" tapable "^1.0.0" +webpack-merge@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.2.2.tgz#a27c52ea783d1398afd2087f547d7b9d2f43634d" + integrity sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g== + dependencies: + lodash "^4.17.15" + webpack-sources@^1.1.0, webpack-sources@^1.3.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1, webpack-sources@^1.4.3: version "1.4.3" resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" @@ -12151,6 +12297,35 @@ webpack@4.44.2: watchpack "^1.7.4" webpack-sources "^1.4.1" +webpack@^4.41.0: + version "4.46.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.46.0.tgz#bf9b4404ea20a073605e0a011d188d77cb6ad542" + integrity sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-module-context" "1.9.0" + "@webassemblyjs/wasm-edit" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + acorn "^6.4.1" + ajv "^6.10.2" + ajv-keywords "^3.4.1" + chrome-trace-event "^1.0.2" + enhanced-resolve "^4.5.0" + eslint-scope "^4.0.3" + json-parse-better-errors "^1.0.2" + loader-runner "^2.4.0" + loader-utils "^1.2.3" + memory-fs "^0.4.1" + micromatch "^3.1.10" + mkdirp "^0.5.3" + neo-async "^2.6.1" + node-libs-browser "^2.2.1" + schema-utils "^1.0.0" + tapable "^1.1.3" + terser-webpack-plugin "^1.4.3" + watchpack "^1.7.4" + webpack-sources "^1.4.1" + websocket-driver@>=0.5.1, websocket-driver@^0.7.4: version "0.7.4" resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760"