Bump redux (4.2.0), reselect (4.1.6), @reduxjs/toolkit (1.7.2), redux-thunk (2.4.1) and immer (9.0.15) (#138818)

* Upgrade Redux to 4.2.0 and Reselect to 4.1.6

* Fix typing in timelines TypedUseSelectorHook

* Upgrade reduxjs-toolkit and fix types

* Upgrade more dependencies and fix types

* [CI] Auto-commit changed files from 'node scripts/eslint --no-cache --fix'

* Undo unnecessary type fixes

* Add renovate.json config for redux

* Add caret to @reduxjs/toolkit version

* Update package.json

Co-authored-by: Patryk Kopyciński <contact@patrykkopycinski.com>

* Update package.json

Co-authored-by: Patryk Kopyciński <contact@patrykkopycinski.com>

* Update package.json

Co-authored-by: Patryk Kopyciński <contact@patrykkopycinski.com>

* yarn bootstrap

* Ts-ignore failing types in presentation_util redux_embeddables

* Downgrade @reduxjs/toolkit to 1.7.2

* Undo ts-ignores in redux-embeddables

* Remove CombinedState comment

* Rebase onto main

Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
Co-authored-by: Patryk Kopyciński <contact@patrykkopycinski.com>
This commit is contained in:
Sander Philipse 2022-08-25 17:39:50 +02:00 committed by GitHub
parent 583c11bc47
commit 9307cacf7d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
16 changed files with 148 additions and 122 deletions

View file

@ -364,7 +364,7 @@
"@opentelemetry/resources": "^1.4.0",
"@opentelemetry/sdk-metrics-base": "^0.30.0",
"@opentelemetry/semantic-conventions": "^1.4.0",
"@reduxjs/toolkit": "^1.6.1",
"@reduxjs/toolkit": "1.7.2",
"@slack/webhook": "^5.0.4",
"@tanstack/react-query": "^4.2.1",
"@tanstack/react-query-devtools": "^4.2.1",
@ -443,7 +443,7 @@
"https-proxy-agent": "^5.0.0",
"i18n-iso-countries": "^4.3.1",
"icalendar": "0.7.1",
"immer": "^9.0.6",
"immer": "^9.0.15",
"inquirer": "^7.3.3",
"intl": "^1.2.5",
"intl-format-cache": "^2.1.0",
@ -544,18 +544,18 @@
"react-visibility-sensor": "^5.1.1",
"recompose": "^0.30.0",
"reduce-reducers": "^1.0.4",
"redux": "^4.1.0",
"redux": "^4.2.0",
"redux-actions": "^2.6.5",
"redux-devtools-extension": "^2.13.8",
"redux-logger": "^3.0.6",
"redux-observable": "2.0.0",
"redux-saga": "^1.1.3",
"redux-thunk": "^2.3.0",
"redux-thunk": "^2.4.1",
"redux-thunks": "^1.0.0",
"remark-parse": "^8.0.3",
"remark-stringify": "^8.0.3",
"require-in-the-middle": "^5.1.0",
"reselect": "^4.0.0",
"reselect": "^4.1.6",
"resize-observer-polyfill": "^1.5.1",
"rison-node": "1.0.2",
"rrule": "2.6.4",

View file

@ -108,7 +108,6 @@ TYPES_DEPS = [
"@npm//@types/prettier",
"@npm//@types/react",
"@npm//@types/react-dom",
"@npm//@types/react-redux",
"@npm//@types/react-router-dom",
"@npm//@types/semver",
"@npm//@types/xml2js",

View file

@ -121,7 +121,6 @@ TYPES_DEPS = [
"@npm//@types/node",
"@npm//@types/prettier",
"@npm//@types/react-dom",
"@npm//@types/react-redux",
"@npm//@types/react-router-dom",
"@npm//@types/semver",
"@npm//@types/supertest",

View file

@ -191,6 +191,22 @@
"matchBaseBranches": ["main"],
"labels": ["release_note:skip", "backport:skip", "ci:all-cypress-suites"],
"enabled": true
},
{
"groupName": "redux",
"packageNames": ["redux", "react-redux"],
"reviewers":[
"team:enterprise-search-frontend",
"team:kibana-presentation",
"team:kibana-data-discovery",
"team:platform-deployment-management",
"team:infra-monitoring-ui",
"team:kibana-gis",
"team:security-solution"
],
"matchBaseBranches": ["main"],
"labels": ["release_note:skip", "backport:skip", "ci:all-cypress-suites"],
"enabled": true
}
]
}

View file

@ -22,7 +22,7 @@ import type { ManagementPluginState } from '../../management';
import type { UsersPluginState } from '../../users/store';
import type { GlobalUrlParam } from './global_url_param';
export type StoreState = HostsPluginState &
export type State = HostsPluginState &
UsersPluginState &
NetworkPluginState &
UsersPluginState &
@ -34,13 +34,6 @@ export type StoreState = HostsPluginState &
sourcerer: SourcererState;
globalUrlParam: GlobalUrlParam;
};
/**
* The redux `State` type for the Security App.
* We use `CombinedState` to wrap our shape because we create our reducer using `combineReducers`.
* `combineReducers` returns a type wrapped in `CombinedState`.
* `CombinedState` is required for redux to know what keys to make optional when preloaded state into a store.
*/
export type State = CombinedState<StoreState>;
/**
* like redux's `MiddlewareAPI` but `getState` returns an `Immutable` version of

View file

@ -174,7 +174,7 @@ export const showView: (state: EndpointState) => EndpointIndexUIQueryParams['sho
* Returns the Host Status which is connected the fleet agent
*/
export const hostStatusInfo: (state: Immutable<EndpointState>) => HostStatus = createSelector(
(state) => state.hostStatus,
(state: Immutable<EndpointState>) => state.hostStatus,
(hostStatus) => {
return hostStatus ? hostStatus : HostStatus.UNHEALTHY;
}
@ -184,7 +184,7 @@ export const hostStatusInfo: (state: Immutable<EndpointState>) => HostStatus = c
* Returns the Policy Response overall status
*/
export const policyResponseStatus: (state: Immutable<EndpointState>) => string = createSelector(
(state) => state.policyResponse,
(state: Immutable<EndpointState>) => state.policyResponse,
(policyResponse) => {
return (policyResponse && policyResponse?.Endpoint?.policy?.applied?.status) || '';
}

View file

@ -105,7 +105,7 @@ export const license = (state: Immutable<PolicyDetailsState>) => {
/** Returns the policyId from the url */
export const policyIdFromParams: (state: Immutable<PolicyDetailsState>) => string = createSelector(
(state) => state.location,
(state: Immutable<PolicyDetailsState>) => state.location,
(location: PolicyDetailsState['location']) => {
return (
matchPath<ManagementRoutePolicyDetailsParams>(location?.pathname ?? '', {

View file

@ -62,9 +62,7 @@ export const useNetworkTls = ({
type,
}: UseNetworkTls): [boolean, NetworkTlsArgs] => {
const getTlsSelector = useMemo(() => networkSelectors.tlsSelector(), []);
const { activePage, limit, sort } = useDeepEqualSelector((state) =>
getTlsSelector(state, type, flowTarget)
);
const { activePage, limit, sort } = useDeepEqualSelector((state) => getTlsSelector(state, type));
const [networkTlsRequest, setNetworkTlsRequest] = useState<NetworkTlsRequestOptions | null>(null);

View file

@ -64,8 +64,8 @@ function animationIsActive(animation: CameraAnimationState, time: number): boole
*
*/
export const scale: (state: CameraState) => (time: number) => Vector2 = createSelector(
(state) => state.scalingFactor,
(state) => state.animation,
(state: CameraState) => state.scalingFactor,
(state: CameraState) => state.animation,
(scalingFactor, animation) => {
const scaleNotCountingAnimation = scaleFromScalingFactor(scalingFactor);
/**
@ -277,7 +277,7 @@ export const scale: (state: CameraState) => (time: number) => Vector2 = createSe
*/
export const clippingPlanes: (state: CameraState) => (time: number) => ClippingPlanes =
createSelector(
(state) => state.rasterSize,
(state: CameraState) => state.rasterSize,
scale,
(rasterSize, scaleAtTime) =>
/**
@ -305,7 +305,7 @@ export const clippingPlanes: (state: CameraState) => (time: number) => ClippingP
* Whether or not the camera is animating, at a given time.
*/
export const isAnimating: (state: CameraState) => (time: number) => boolean = createSelector(
(state) => state.animation,
(state: CameraState) => state.animation,
(animation) => (time) => {
return animation !== undefined && animationIsActive(animation, time);
}
@ -324,10 +324,10 @@ export const isAnimating: (state: CameraState) => (time: number) => boolean = cr
* We could update the translation as the user moved the mouse but floating point drift (round-off error) could occur.
*/
export const translation: (state: CameraState) => (time: number) => Vector2 = createSelector(
(state) => state.panning,
(state) => state.translationNotCountingCurrentPanning,
(state: CameraState) => state.panning,
(state: CameraState) => state.translationNotCountingCurrentPanning,
scale,
(state) => state.animation,
(state: CameraState) => state.animation,
(panning, translationNotCountingCurrentPanning, scaleAtTime, animation) => {
/**
* Memoizing this for object reference equality.

View file

@ -554,28 +554,9 @@ export const nodesAndEdgelines: (state: DataState) => (
processNodePositions: visibleProcessNodePositions,
connectingEdgeLineSegments,
};
}, aaBBEqualityCheck);
}, aabbModel.isEqual);
});
function isAABBType(value: unknown): value is AABB {
const castValue = value as AABB;
return castValue.maximum !== undefined && castValue.minimum !== undefined;
}
/**
* This is needed to avoid the TS error that is caused by using aabbModel.isEqual directly. Ideally we could
* just pass that function instead of having to check the type of the parameters. It might be worth doing a PR to
* the reselect library to correct the type.
*/
function aaBBEqualityCheck<T>(a: T, b: T, index: number): boolean {
if (isAABBType(a) && isAABBType(b)) {
return aabbModel.isEqual(a, b);
} else {
// this is equivalent to the default equality check for defaultMemoize
return a === b;
}
}
/**
* If there is a pending request that's for a entity ID that doesn't matche the `entityID`, then we should cancel it.
*/

View file

@ -9,7 +9,13 @@ import { createSelector, defaultMemoize } from 'reselect';
import * as cameraSelectors from './camera/selectors';
import * as dataSelectors from './data/selectors';
import * as uiSelectors from './ui/selectors';
import type { ResolverState, IsometricTaxiLayout, DataState } from '../types';
import type {
ResolverState,
IsometricTaxiLayout,
DataState,
VisibleEntites,
NodeData,
} from '../types';
import type { EventStats } from '../../../common/endpoint/types';
import * as nodeModel from '../../../common/endpoint/models/node';
@ -211,14 +217,9 @@ export const statsTotalForNode = composeSelectors(
export const visibleNodesAndEdgeLines = createSelector(
nodesAndEdgelines,
boundingBox,
function (
/* eslint-disable @typescript-eslint/no-shadow */
nodesAndEdgelines,
boundingBox
/* eslint-enable @typescript-eslint/no-shadow */
) {
function (nodesAndEdgelinesFn, boundingBoxFn) {
// `boundingBox` and `nodesAndEdgelines` are each memoized.
return (time: number) => nodesAndEdgelines(boundingBox(time));
return (time: number) => nodesAndEdgelinesFn(boundingBoxFn(time));
}
);
@ -240,12 +241,13 @@ export const originID: (state: ResolverState) => string | undefined = composeSel
* Takes a nodeID (aka entity_id) and returns the node ID of the node that aria should 'flowto' or null
* If the node has a flowto candidate that is currently visible, that will be returned, otherwise null.
*/
export const ariaFlowtoNodeID: (
state: ResolverState
) => (time: number) => (nodeID: string) => string | null = createSelector(
export const ariaFlowtoNodeID = createSelector(
visibleNodesAndEdgeLines,
composeSelectors(dataStateSelector, dataSelectors.ariaFlowtoCandidate),
(visibleNodesAndEdgeLinesAtTime, ariaFlowtoCandidate) => {
function (
visibleNodesAndEdgeLinesAtTime: (time: number) => VisibleEntites,
ariaFlowtoCandidate: (nodeId: string) => string | null
) {
return defaultMemoize((time: number) => {
// get the visible nodes at `time`
const { processNodePositions } = visibleNodesAndEdgeLinesAtTime(time);
@ -361,7 +363,10 @@ export const newIDsToRequest: (state: ResolverState) => (time: number) => Set<st
createSelector(
composeSelectors(dataStateSelector, (dataState: DataState) => dataState.nodeData),
visibleNodesAndEdgeLines,
function (nodeData, visibleNodesAndEdgeLinesAtTime) {
function (
nodeData: Map<string, NodeData> | undefined,
visibleNodesAndEdgeLinesAtTime: (time: number) => VisibleEntites
) {
return defaultMemoize((time: number) => {
const { processNodePositions: nodesInView } = visibleNodesAndEdgeLinesAtTime(time);

View file

@ -7,16 +7,30 @@
import { combineReducers } from '@reduxjs/toolkit';
import { syntheticsMonitorReducer } from './monitor_summary/synthetics_montior_reducer';
import { monitorStatusReducer } from './monitor_summary';
import { uiReducer } from './ui';
import { indexStatusReducer } from './index_status';
import { syntheticsEnablementReducer } from './synthetics_enablement';
import { monitorListReducer } from './monitor_list';
import { serviceLocationsReducer } from './service_locations';
import { monitorOverviewReducer } from './overview';
import {
syntheticsMonitorReducer,
SyntheticsMonitorState,
} from './monitor_summary/synthetics_montior_reducer';
import { monitorStatusReducer, MonitorSummaryState } from './monitor_summary';
import { uiReducer, UiState } from './ui';
import { indexStatusReducer, IndexStatusState } from './index_status';
import { syntheticsEnablementReducer, SyntheticsEnablementState } from './synthetics_enablement';
import { monitorListReducer, MonitorListState } from './monitor_list';
import { serviceLocationsReducer, ServiceLocationsState } from './service_locations';
import { monitorOverviewReducer, MonitorOverviewState } from './overview';
export const rootReducer = combineReducers({
export interface SyntheticsAppState {
ui: UiState;
indexStatus: IndexStatusState;
syntheticsEnablement: SyntheticsEnablementState;
monitorList: MonitorListState;
serviceLocations: ServiceLocationsState;
monitorStatus: MonitorSummaryState;
syntheticsMonitor: SyntheticsMonitorState;
overview: MonitorOverviewState;
}
export const rootReducer = combineReducers<SyntheticsAppState>({
ui: uiReducer,
indexStatus: indexStatusReducer,
syntheticsEnablement: syntheticsEnablementReducer,
@ -26,5 +40,3 @@ export const rootReducer = combineReducers({
syntheticsMonitor: syntheticsMonitorReducer,
overview: monitorOverviewReducer,
});
export type SyntheticsAppState = ReturnType<typeof rootReducer>;

View file

@ -11,9 +11,9 @@ import { composeWithDevTools } from 'redux-devtools-extension';
import createSagaMiddleware from 'redux-saga';
import { Storage } from '@kbn/kibana-utils-plugin/public';
import { rootEffect } from './effects';
import { rootReducer } from './reducers';
import { rootReducer, RootState } from './reducers';
export type AppState = ReturnType<typeof rootReducer>;
export type AppState = RootState;
const sagaMW = createSagaMiddleware();

View file

@ -6,27 +6,50 @@
*/
import { combineReducers } from 'redux';
import { agentPoliciesReducer } from '../private_locations';
import { monitorReducer } from './monitor';
import { uiReducer } from './ui';
import { monitorStatusReducer } from './monitor_status';
import { monitorListReducer } from './monitor_list';
import { dynamicSettingsReducer } from './dynamic_settings';
import { pingReducer } from './ping';
import { pingListReducer } from './ping_list';
import { monitorDurationReducer } from './monitor_duration';
import { indexStatusReducer } from './index_status';
import { mlJobsReducer } from './ml_anomaly';
import { certificatesReducer } from '../certificates/certificates';
import { agentPoliciesReducer, AgentPoliciesState } from '../private_locations';
import { monitorReducer, MonitorState } from './monitor';
import { uiReducer, UiState } from './ui';
import { monitorStatusReducer, MonitorStatusState } from './monitor_status';
import { monitorListReducer, MonitorList } from './monitor_list';
import { dynamicSettingsReducer, DynamicSettingsState } from './dynamic_settings';
import { pingReducer, PingState } from './ping';
import { pingListReducer, PingListState } from './ping_list';
import { monitorDurationReducer, MonitorDuration } from './monitor_duration';
import { indexStatusReducer, IndexStatusState } from './index_status';
import { mlJobsReducer, MLJobState } from './ml_anomaly';
import { certificatesReducer, CertificatesState } from '../certificates/certificates';
import { selectedFiltersReducer } from './selected_filters';
import { alertsReducer } from '../alerts/alerts';
import { journeyReducer } from './journey';
import { networkEventsReducer } from './network_events';
import { syntheticsReducer } from './synthetics';
import { monitorManagementListReducer } from './monitor_management';
import { testNowRunsReducer } from './test_now_runs';
import { SelectedFilters } from '../actions/selected_filters';
import { alertsReducer, AlertState } from '../alerts/alerts';
import { JourneyKVP, journeyReducer } from './journey';
import { networkEventsReducer, NetworkEventsState } from './network_events';
import { syntheticsReducer, SyntheticsReducerState } from './synthetics';
import { monitorManagementListReducer, MonitorManagementList } from './monitor_management';
import { testNowRunsReducer, TestNowRunsState } from './test_now_runs';
export const rootReducer = combineReducers({
export interface RootState {
monitor: MonitorState;
ui: UiState;
monitorList: MonitorList;
monitorManagementList: MonitorManagementList;
monitorStatus: MonitorStatusState;
dynamicSettings: DynamicSettingsState;
ping: PingState;
pingList: PingListState;
ml: MLJobState;
monitorDuration: MonitorDuration;
indexStatus: IndexStatusState;
certificates: CertificatesState;
selectedFilters: SelectedFilters | null;
alerts: AlertState;
journeys: JourneyKVP;
networkEvents: NetworkEventsState;
synthetics: SyntheticsReducerState;
testNowRuns: TestNowRunsState;
agentPolicies: AgentPoliciesState;
}
export const rootReducer = combineReducers<RootState>({
monitor: monitorReducer,
ui: uiReducer,
monitorList: monitorListReducer,

View file

@ -8,7 +8,7 @@
import { shallowEqual, useSelector } from 'react-redux';
import deepEqual from 'fast-deep-equal';
export type TypedUseSelectorHook = <TSelected, TState = unknown>(
export type TypedUseSelectorHook = <TSelected, TState extends Record<string, unknown>>(
selector: (state: TState) => TSelected,
equalityFn?: (left: TSelected, right: TSelected) => boolean
) => TSelected;

View file

@ -4636,15 +4636,15 @@
resolved "https://registry.yarnpkg.com/@redux-saga/types/-/types-1.1.0.tgz#0e81ce56b4883b4b2a3001ebe1ab298b84237204"
integrity sha512-afmTuJrylUU/0OtqzaRkbyYFFNgCF73Bvel/sw90pvGrWIZ+vyoIJqA6eMSoA6+nb443kTmulmBtC9NerXboNg==
"@reduxjs/toolkit@^1.6.1":
version "1.6.1"
resolved "https://registry.yarnpkg.com/@reduxjs/toolkit/-/toolkit-1.6.1.tgz#7bc83b47352a663bf28db01e79d17ba54b98ade9"
integrity sha512-pa3nqclCJaZPAyBhruQtiRwtTjottRrVJqziVZcWzI73i6L3miLTtUyWfauwv08HWtiXLx1xGyGt+yLFfW/d0A==
"@reduxjs/toolkit@1.7.2":
version "1.7.2"
resolved "https://registry.yarnpkg.com/@reduxjs/toolkit/-/toolkit-1.7.2.tgz#b428aaef92582379464f9de698dbb71957eafb02"
integrity sha512-wwr3//Ar8ZhM9bS58O+HCIaMlR4Y6SNHfuszz9hKnQuFIKvwaL3Kmjo6fpDKUOjo4Lv54Yi299ed8rofCJ/Vjw==
dependencies:
immer "^9.0.1"
redux "^4.1.0"
redux-thunk "^2.3.0"
reselect "^4.0.0"
immer "^9.0.7"
redux "^4.1.2"
redux-thunk "^2.4.1"
reselect "^4.1.5"
"@samverschueren/stream-to-observable@^0.3.0":
version "0.3.0"
@ -16829,10 +16829,10 @@ immediate@~3.0.5:
resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b"
integrity sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=
immer@^9.0.1, immer@^9.0.6:
version "9.0.6"
resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.6.tgz#7a96bf2674d06c8143e327cbf73539388ddf1a73"
integrity sha512-G95ivKpy+EvVAnAab4fVa4YGYn24J1SpEktnJX7JJ45Bd7xqME/SCplFzYFmTbrkwZbQ4xJK1xMTUYBkN6pWsQ==
immer@^9.0.15, immer@^9.0.7:
version "9.0.15"
resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.15.tgz#0b9169e5b1d22137aba7d43f8a81a495dd1b62dc"
integrity sha512-2eB/sswms9AEUSkOm4SbV5Y7Vmt/bKRwByd52jfLkW4OLYeaTP3EEiJ9agqU0O/tq6Dk62Zfj+TJSqfm1rLVGQ==
import-fresh@^2.0.0:
version "2.0.0"
@ -20935,7 +20935,7 @@ oauth-sign@~0.9.0:
object-assign@4.X, object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==
object-assign@^3.0.0:
version "3.0.0"
@ -23853,20 +23853,20 @@ redux-saga@^1.1.3:
dependencies:
"@redux-saga/core" "^1.1.3"
redux-thunk@^2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.3.0.tgz#51c2c19a185ed5187aaa9a2d08b666d0d6467622"
integrity sha512-km6dclyFnmcvxhAcrQV2AkZmPQjzPDjgVlQtR0EQjxZPyJ0BnMf3in1ryuR8A2qU0HldVRfxYXbFSKlI3N7Slw==
redux-thunk@^2.4.1:
version "2.4.1"
resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.4.1.tgz#0dd8042cf47868f4b29699941de03c9301a75714"
integrity sha512-OOYGNY5Jy2TWvTL1KgAlVy6dcx3siPJ1wTq741EPyUKfn6W6nChdICjZwCd0p8AZBs5kWpZlbkXW2nE/zjUa+Q==
redux-thunks@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/redux-thunks/-/redux-thunks-1.0.0.tgz#56e03b86d281a2664c884ab05c543d9ab1673658"
integrity sha1-VuA7htKBomZMiEqwXFQ9mrFnNlg=
redux@^4.0.0, redux@^4.0.4, redux@^4.1.0:
version "4.1.1"
resolved "https://registry.yarnpkg.com/redux/-/redux-4.1.1.tgz#76f1c439bb42043f985fbd9bf21990e60bd67f47"
integrity sha512-hZQZdDEM25UY2P493kPYuKqviVwZ58lEmGQNeQ+gXa+U0gYPUBf7NKYazbe3m+bs/DzM/ahN12DbF+NG8i0CWw==
redux@^4.0.0, redux@^4.0.4, redux@^4.1.2, redux@^4.2.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/redux/-/redux-4.2.0.tgz#46f10d6e29b6666df758780437651eeb2b969f13"
integrity sha512-oSBmcKKIuIR4ME29/AeNUnl5L+hvBq7OaJWzaptTQJAntaPvxIJqfnjbaEiCzzaIz+XmVILfqAM3Ob0aXLPfjA==
dependencies:
"@babel/runtime" "^7.9.2"
@ -23912,9 +23912,9 @@ regenerator-runtime@^0.11.0:
integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==
regenerator-runtime@^0.13.1, regenerator-runtime@^0.13.4, regenerator-runtime@^0.13.7:
version "0.13.7"
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55"
integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==
version "0.13.9"
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52"
integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==
regenerator-transform@^0.15.0:
version "0.15.0"
@ -24313,10 +24313,10 @@ requires-port@^1.0.0:
resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=
reselect@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.0.0.tgz#f2529830e5d3d0e021408b246a206ef4ea4437f7"
integrity sha512-qUgANli03jjAyGlnbYVAV5vvnOmJnODyABz51RdBN7M4WaVu8mecZWgyQNkG8Yqe3KRGRt0l4K4B3XVEULC4CA==
reselect@^4.0.0, reselect@^4.1.5, reselect@^4.1.6:
version "4.1.6"
resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.1.6.tgz#19ca2d3d0b35373a74dc1c98692cdaffb6602656"
integrity sha512-ZovIuXqto7elwnxyXbBtCPo9YFEr3uJqj2rRbcOOog1bmu2Ag85M4hixSwFWyaBMKXNgvPaJ9OSu9SkBPIeJHQ==
resize-observer-polyfill@^1.5.1:
version "1.5.1"