1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-02-09 00:18:00 +01:00

Merge branch 'main' into feat/search-toggles-project

This commit is contained in:
Youssef Khedher 2022-03-01 16:33:55 +01:00 committed by GitHub
commit e36d3c13e5
17 changed files with 70 additions and 403 deletions

View File

@ -1,21 +1,4 @@
# 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.
# unleash-frontend
## Run with a local instance of the unleash-api:

View File

@ -1,37 +0,0 @@
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;
},
},
};

View File

@ -29,7 +29,6 @@
"start": "react-scripts start",
"start:heroku": "UNLEASH_API=https://unleash.herokuapp.com yarn run start",
"start:ea": "UNLEASH_API=https://unleash4.herokuapp.com yarn run start",
"start:demo": "UNLEASH_API=http://unleash.herokuapp.com yarn run start",
"test": "react-scripts test",
"prepare": "yarn run build",
"fmt": "prettier src --write --loglevel warn",
@ -56,13 +55,10 @@
"@types/react-router-dom": "5.3.3",
"@types/react-test-renderer": "17.0.1",
"@types/react-timeago": "4.1.3",
"@welldone-software/why-did-you-render": "6.2.3",
"chart.js": "3.7.1",
"chartjs-adapter-date-fns": "2.0.0",
"classnames": "2.3.1",
"copy-to-clipboard": "3.3.1",
"craco": "0.0.3",
"css-loader": "6.6.0",
"cypress": "9.5.1",
"date-fns": "2.28.0",
"debounce": "1.2.1",
@ -70,7 +66,6 @@
"fast-json-patch": "3.1.0",
"http-proxy-middleware": "2.0.3",
"lodash.clonedeep": "4.5.0",
"lodash.flow": "3.5.0",
"prettier": "2.5.1",
"prop-types": "15.8.1",
"react": "17.0.2",
@ -85,8 +80,7 @@
"react-timeago": "6.2.1",
"sass": "1.49.9",
"swr": "1.2.2",
"typescript": "4.6.2",
"web-vitals": "2.1.4"
"typescript": "4.6.2"
},
"jest": {
"moduleNameMapper": {

View File

@ -1,12 +1,11 @@
import { Switch, Tooltip } from '@material-ui/core';
import { OverridableComponent } from '@material-ui/core/OverridableComponent';
import { Switch, Tooltip, SwitchProps } from '@material-ui/core';
import AccessContext from '../../../contexts/AccessContext';
import React, { useContext } from 'react';
interface IPermissionSwitchProps extends OverridableComponent<any> {
interface IPermissionSwitchProps extends SwitchProps {
permission: string;
tooltip: string;
onChange?: (e: any) => void;
tooltip?: string;
onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;
disabled?: boolean;
projectId?: string;
environmentId?: string;

View File

@ -9,7 +9,7 @@ interface IResponsiveButtonProps {
onClick: () => void;
tooltip?: string;
disabled?: boolean;
permission?: string;
permission: string;
projectId?: string;
environmentId?: string;
maxWidth: string;

View File

@ -135,7 +135,7 @@ const FeatureToggleListNew = ({
type={feature.type}
environments={feature.environments}
projectId={projectId}
createdAt={new Date()}
createdAt={new Date().toISOString()}
/>
);
});

View File

@ -3,7 +3,7 @@ import { useLocationSettings } from '../../../../hooks/useLocationSettings';
import { formatDateYMD, formatDateYMDHMS } from '../../../../utils/format-date';
interface CreatedAtProps {
time: Date;
time: string;
}
const CreatedAt = ({ time }: CreatedAtProps) => {

View File

@ -1,15 +1,11 @@
import { useRef, useState } from 'react';
import React, { useRef, useState } from 'react';
import { TableCell, TableRow } from '@material-ui/core';
import { useHistory } from 'react-router';
import { useStyles } from '../FeatureToggleListNew.styles';
import useToggleFeatureByEnv from '../../../../hooks/api/actions/useToggleFeatureByEnv/useToggleFeatureByEnv';
import {
IEnvironments,
IFeatureEnvironment,
} from '../../../../interfaces/featureToggle';
import { IEnvironments } from '../../../../interfaces/featureToggle';
import useToast from '../../../../hooks/useToast';
import { getTogglePath } from '../../../../utils/route-path-helpers';
import { SyntheticEvent } from 'react-router/node_modules/@types/react';
import useUiConfig from '../../../../hooks/api/getters/useUiConfig/useUiConfig';
import FeatureStatus from '../../FeatureView/FeatureStatus/FeatureStatus';
import FeatureType from '../../FeatureView/FeatureType/FeatureType';
@ -25,7 +21,7 @@ import EnvironmentStrategyDialog from '../../../common/EnvironmentStrategiesDial
interface IFeatureToggleListNewItemProps {
name: string;
type: string;
environments: IFeatureEnvironment[];
environments: IEnvironments[];
projectId: string;
lastSeenAt?: string;
createdAt: string;
@ -49,7 +45,7 @@ const FeatureToggleListNewItem = ({
const { refetch } = useProject(projectId);
const styles = useStyles();
const history = useHistory();
const ref = useRef(null);
const ref = useRef<HTMLButtonElement>(null);
const [showInfoBox, setShowInfoBox] = useState(false);
const [environmentName, setEnvironmentName] = useState('');
@ -57,8 +53,8 @@ const FeatureToggleListNewItem = ({
setShowInfoBox(false);
};
const onClick = (e: SyntheticEvent) => {
if (!ref.current?.contains(e.target)) {
const onClick = (e: React.MouseEvent) => {
if (!ref.current?.contains(e.target as Node)) {
history.push(getTogglePath(projectId, name));
}
};

View File

@ -1,5 +1,7 @@
import useFeatureTypes from '../../../../../../hooks/api/getters/useFeatureTypes/useFeatureTypes';
import GeneralSelect from '../../../../../common/GeneralSelect/GeneralSelect';
import GeneralSelect, {
ISelectOption,
} from '../../../../../common/GeneralSelect/GeneralSelect';
const FeatureTypeSelect = ({
editable,
@ -11,7 +13,7 @@ const FeatureTypeSelect = ({
}) => {
const { featureTypes } = useFeatureTypes();
const options = featureTypes.map(t => ({
const options: ISelectOption[] = featureTypes.map(t => ({
key: t.id,
label: t.name,
title: t.description,

View File

@ -1,4 +1,4 @@
import React, { useEffect, useState } from 'react';
import React, { useEffect, useState, ChangeEvent } from 'react';
import {
Button,
FormControl,
@ -9,25 +9,20 @@ import {
Tooltip,
} from '@material-ui/core';
import { Info } from '@material-ui/icons';
import { weightTypes } from './enums';
import { OverrideConfig } from './OverrideConfig/OverrideConfig';
import ConditionallyRender from '../../../../../common/ConditionallyRender';
import GeneralSelect from '../../../../../common/GeneralSelect/GeneralSelect';
import { useCommonStyles } from '../../../../../../common.styles';
import { useCommonStyles } from 'common.styles';
import Dialogue from '../../../../../common/Dialogue';
import { modalStyles, trim } from '../../../../../common/util';
import { modalStyles, trim } from 'component/common/util';
import PermissionSwitch from '../../../../../common/PermissionSwitch/PermissionSwitch';
import { UPDATE_FEATURE_VARIANTS } from '../../../../../providers/AccessProvider/permissions';
import { UPDATE_FEATURE_VARIANTS } from 'component/providers/AccessProvider/permissions';
import useFeature from '../../../../../../hooks/api/getters/useFeature/useFeature';
import { useParams } from 'react-router-dom';
import { IFeatureViewParams } from '../../../../../../interfaces/params';
import {
IFeatureVariant,
IOverride,
} from '../../../../../../interfaces/featureToggle';
import { IFeatureViewParams } from 'interfaces/params';
import { IFeatureVariant, IOverride } from 'interfaces/featureToggle';
import cloneDeep from 'lodash.clonedeep';
import GeneralSelect from 'component/common/GeneralSelect/GeneralSelect';
const payloadOptions = [
{ key: 'string', label: 'string' },
@ -58,7 +53,7 @@ const AddVariant = ({
title,
editing,
}: IAddVariantProps) => {
const [data, setData] = useState({});
const [data, setData] = useState<Record<string, string>>({});
const [payload, setPayload] = useState(EMPTY_PAYLOAD);
const [overrides, setOverrides] = useState<IOverride[]>([]);
const [error, setError] = useState<Record<string, string>>({});
@ -71,7 +66,7 @@ const AddVariant = ({
if (editVariant) {
setData({
name: editVariant.name,
weight: editVariant.weight / 10,
weight: String(editVariant.weight / 10),
weightType: editVariant.weightType || weightTypes.VARIABLE,
stickiness: editVariant.stickiness,
});
@ -108,7 +103,9 @@ const AddVariant = ({
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [editVariant]);
const setVariantValue = e => {
const setVariantValue = (
e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>
) => {
const { name, value } = e.target;
setData({
...data,
@ -116,7 +113,7 @@ const AddVariant = ({
});
};
const setVariantWeightType = e => {
const setVariantWeightType = (e: React.ChangeEvent<HTMLInputElement>) => {
const { checked, name } = e.target;
const weightType = checked ? weightTypes.FIX : weightTypes.VARIABLE;
setData({
@ -125,7 +122,7 @@ const AddVariant = ({
});
};
const submit = async e => {
const submit = async (e: React.FormEvent) => {
setError({});
e.preventDefault();
@ -141,9 +138,9 @@ const AddVariant = ({
}
try {
const variant = {
const variant: IFeatureVariant = {
name: data.name,
weight: data.weight * 10,
weight: Number(data.weight) * 10,
weightType: data.weightType,
stickiness: data.stickiness,
payload: payload.value ? payload : undefined,
@ -172,7 +169,7 @@ const AddVariant = ({
}
};
const onPayload = (e: React.SyntheticEvent) => {
const onPayload = (e: ChangeEvent<{ name?: string; value: unknown }>) => {
e.preventDefault();
setPayload({
...payload,
@ -186,18 +183,19 @@ const AddVariant = ({
closeDialog();
};
const updateOverrideType = (index: number) => (e: React.SyntheticEvent) => {
e.preventDefault();
setOverrides(
overrides.map((o, i) => {
if (i === index) {
o[e.target.name] = e.target.value;
}
const updateOverrideType =
(index: number) => (e: ChangeEvent<HTMLInputElement>) => {
e.preventDefault();
setOverrides(
overrides.map((o, i) => {
if (i === index) {
o[e.target.name] = e.target.value;
}
return o;
})
);
};
return o;
})
);
};
const updateOverrideValues = (index: number, values: string[]) => {
setOverrides(
@ -230,7 +228,6 @@ const AddVariant = ({
return (
<Dialogue
open={showDialog}
contentLabel="Add variant modal"
style={modalStyles}
onClose={onCancel}
onClick={submit}
@ -355,6 +352,7 @@ const AddVariant = ({
<Grid container>
<Grid item md={2} sm={2} xs={4}>
<GeneralSelect
id="variant-payload-type"
name="type"
label="Type"
className={commonStyles.fullWidth}
@ -362,7 +360,6 @@ const AddVariant = ({
options={payloadOptions}
onChange={onPayload}
style={{ minWidth: '100px', width: '100%' }}
data-test={'VARIANT_PAYLOAD_TYPE'}
/>
</Grid>
<Grid item md={8} sm={8} xs={6}>

View File

@ -24,8 +24,10 @@ import { useAuthPermissions } from '../../../hooks/api/getters/useAuth/useAuthPe
const Header = () => {
const theme = useTheme();
const [anchorEl, setAnchorEl] = useState();
const [anchorElAdvanced, setAnchorElAdvanced] = useState();
const [anchorEl, setAnchorEl] = useState<HTMLButtonElement | null>(null);
const [anchorElAdvanced, setAnchorElAdvanced] =
useState<HTMLButtonElement | null>(null);
const [admin, setAdmin] = useState(false);
const { permissions } = useAuthPermissions();
const commonStyles = useCommonStyles();

View File

@ -148,7 +148,7 @@ export const ProjectAccessAddUser = ({ roles }: IProjectAccessAddUserProps) => {
const getOptionLabel = (option: IProjectAccessUser) => {
if (option) {
return `${option.name || '(Empty name)'} <${
return `${option.name || option.username || '(Empty name)'} <${
option.email || option.username
}>`;
} else return '';

View File

@ -109,17 +109,19 @@ const sortByLastSeen = (
): IFeatureToggle[] => {
return [...features].sort((a, b) =>
a.lastSeenAt && b.lastSeenAt
? a.lastSeenAt.localeCompare(b.lastSeenAt)
: 0
? b.lastSeenAt.localeCompare(a.lastSeenAt)
: a.lastSeenAt
? -1
: b.lastSeenAt
? 1
: b.createdAt.localeCompare(a.createdAt)
);
};
const sortByCreated = (
features: Readonly<IFeatureToggle[]>
): IFeatureToggle[] => {
return [...features].sort((a, b) =>
new Date(a.createdAt) > new Date(b.createdAt) ? -1 : 1
);
return [...features].sort((a, b) => b.createdAt.localeCompare(a.createdAt));
};
const sortByName = (features: Readonly<IFeatureToggle[]>): IFeatureToggle[] => {

View File

@ -1,6 +1,4 @@
import './wdyr';
import 'whatwg-fetch';
import './app.css';
import ReactDOM from 'react-dom';
@ -9,7 +7,6 @@ import { ThemeProvider, CssBaseline } from '@material-ui/core';
import { DndProvider } from 'react-dnd';
import { HTML5Backend } from 'react-dnd-html5-backend';
import { StylesProvider } from '@material-ui/core/styles';
import mainTheme from './themes/main-theme';
import { App } from './component/App';
import ScrollToTop from './component/scroll-to-top';

View File

@ -57,7 +57,7 @@ export interface IOverride {
}
export interface IPayload {
name: string;
type: string;
value: string;
}
@ -75,13 +75,6 @@ export interface IFeatureMetrics {
seenApplications: string[];
}
export interface IFeatureMetrics {
version: number;
maturity: string;
lastHourUsage: IFeatureEnvironmentMetrics[];
seenApplications: string[];
}
export interface IFeatureMetricsRaw {
featureName: string;
appName: string;

View File

@ -1,10 +0,0 @@
/// <reference types="@welldone-software/why-did-you-render" />
import React from 'react';
if (process.env.NODE_ENV === 'development') {
const whyDidYouRender = require('@welldone-software/why-did-you-render');
whyDidYouRender(React, {
trackAllPureComponents: false,
});
}

View File

@ -28,11 +28,6 @@
resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.13.12.tgz"
integrity sha512-3eJJ841uKxeV8dcN/2yGEUy+RfgQspPEgQat85umsE1rotuquQ2AbIub4S6j7c50a2d+4myc+zSlnXeIHrOnhQ==
"@babel/compat-data@^7.13.15":
version "7.14.0"
resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.0.tgz"
integrity sha512-vu9V3uMM/1o5Hl5OekMUowo3FqXLJSw+s+66nt0fSWVWTtmosdzn45JHOB3cPtZoe6CTBDzvSw0RdOY85Q37+Q==
"@babel/core@7.12.3":
version "7.12.3"
resolved "https://registry.npmjs.org/@babel/core/-/core-7.12.3.tgz"
@ -76,27 +71,6 @@
semver "^6.3.0"
source-map "^0.5.0"
"@babel/core@^7.6.0":
version "7.14.0"
resolved "https://registry.npmjs.org/@babel/core/-/core-7.14.0.tgz"
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.npmjs.org/@babel/generator/-/generator-7.13.9.tgz"
@ -106,15 +80,6 @@
jsesc "^2.5.1"
source-map "^0.5.0"
"@babel/generator@^7.14.0":
version "7.14.1"
resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.14.1.tgz"
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.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz"
@ -140,16 +105,6 @@
browserslist "^4.14.5"
semver "^6.3.0"
"@babel/helper-compilation-targets@^7.13.16":
version "7.13.16"
resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz"
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.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.13.11.tgz"
@ -242,20 +197,6 @@
"@babel/traverse" "^7.13.13"
"@babel/types" "^7.13.14"
"@babel/helper-module-transforms@^7.14.0":
version "7.14.0"
resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.0.tgz"
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.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz"
@ -313,11 +254,6 @@
resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz"
integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==
"@babel/helper-validator-identifier@^7.14.0":
version "7.14.0"
resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz"
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.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz"
@ -342,15 +278,6 @@
"@babel/traverse" "^7.13.0"
"@babel/types" "^7.13.0"
"@babel/helpers@^7.14.0":
version "7.14.0"
resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz"
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.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz"
@ -365,11 +292,6 @@
resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.13.13.tgz"
integrity sha512-OhsyMrqygfk5v8HmWwOzlYjJrtLaFhF34MrfG/Z73DgYCI6ojNUTUp2TYbtnjo8PegeJp12eamsNettCQjKjVw==
"@babel/parser@^7.14.0":
version "7.14.1"
resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.14.1.tgz"
integrity sha512-muUGEKu8E/ftMTPlNp+mc6zL3E9zKWmF5sDHZ5MSsoTP9Wyz64AhEf9kD08xYJ7w6Hdcu8H550ircnPyWSIF0Q==
"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.13.12":
version "7.13.12"
resolved "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.13.12.tgz"
@ -1235,20 +1157,6 @@
debug "^4.1.0"
globals "^11.1.0"
"@babel/traverse@^7.14.0":
version "7.14.0"
resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.0.tgz"
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.npmjs.org/@babel/types/-/types-7.13.14.tgz"
@ -1258,14 +1166,6 @@
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.npmjs.org/@babel/types/-/types-7.14.1.tgz"
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.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz"
@ -1279,15 +1179,6 @@
exec-sh "^0.3.2"
minimist "^1.2.0"
"@craco/craco@^5.5.0":
version "5.9.0"
resolved "https://registry.npmjs.org/@craco/craco/-/craco-5.9.0.tgz"
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.npmjs.org/@csstools/convert-colors/-/convert-colors-1.4.0.tgz"
@ -1940,7 +1831,7 @@
resolved "https://registry.npmjs.org/@types/aria-query/-/aria-query-4.2.1.tgz"
integrity sha512-S6oPal772qJZHoRZLFc/XoZW2gFvwXusYUmXPXkgxJLuEk2vOt7jc4Yo6z/vtI0EBkbPBVrJJ0B+prLIKiWqHg==
"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.3", "@types/babel__core@^7.1.7":
"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.7":
version "7.1.14"
resolved "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.14.tgz"
integrity sha512-zGZJzzBUVDo/eV6KgbE0f0ZI7dInEYvo12Rb70uNQDshC3SkRMb67ja0GgRHZgAX3Za6rhaWlvbDO8rrGyAb1g==
@ -2263,18 +2154,6 @@
"@types/source-list-map" "*"
source-map "^0.7.3"
"@types/webpack@^4.39.2":
version "4.41.28"
resolved "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.28.tgz"
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.npmjs.org/@types/webpack/-/webpack-4.41.27.tgz"
@ -2565,13 +2444,6 @@
"@webassemblyjs/wast-parser" "1.9.0"
"@xtuc/long" "4.2.2"
"@welldone-software/why-did-you-render@6.2.3":
version "6.2.3"
resolved "https://registry.yarnpkg.com/@welldone-software/why-did-you-render/-/why-did-you-render-6.2.3.tgz#cdd5e27cf25b7e767c1c0b0e8808f67d3f6be833"
integrity sha512-FQgi90jvC9uw2aALlonJfqaWOvU5UUBBVvdAnS2iryXwCc4YJkKsPJY5Y/LzaND3OIyk8XGUn1vTRn6hcem28Q==
dependencies:
lodash "^4"
"@xtuc/ieee754@^1.2.0":
version "1.2.0"
resolved "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz"
@ -4166,17 +4038,6 @@ cosmiconfig@^7.0.0:
path-type "^4.0.0"
yaml "^1.10.0"
craco@0.0.3:
version "0.0.3"
resolved "https://registry.npmjs.org/craco/-/craco-0.0.3.tgz"
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.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz"
@ -4296,20 +4157,6 @@ css-loader@4.3.0:
schema-utils "^2.7.1"
semver "^7.3.2"
css-loader@6.6.0:
version "6.6.0"
resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.6.0.tgz#c792ad5510bd1712618b49381bd0310574fafbd3"
integrity sha512-FK7H2lisOixPT406s5gZM1S3l8GrfhEBT3ZiL2UX1Ng1XWs0y2GPllz/OTyvbaHe12VgQrIXIzuEGVlbUhodqg==
dependencies:
icss-utils "^5.1.0"
postcss "^8.4.5"
postcss-modules-extract-imports "^3.0.0"
postcss-modules-local-by-default "^4.0.0"
postcss-modules-scope "^3.0.0"
postcss-modules-values "^4.0.0"
postcss-value-parser "^4.2.0"
semver "^7.3.5"
css-prefers-color-scheme@^3.1.1:
version "3.1.1"
resolved "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-3.1.1.tgz"
@ -5030,7 +4877,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.5.0:
enhanced-resolve@^4.3.0:
version "4.5.0"
resolved "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz"
integrity sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==
@ -6472,11 +6319,6 @@ icss-utils@^4.0.0, icss-utils@^4.1.1:
dependencies:
postcss "^7.0.14"
icss-utils@^5.0.0, icss-utils@^5.1.0:
version "5.1.0"
resolved "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz"
integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==
identity-obj-proxy@3.0.0:
version "3.0.0"
resolved "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz"
@ -7985,11 +7827,6 @@ lodash.flatten@^4.4.0:
resolved "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz"
integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=
lodash.flow@3.5.0:
version "3.5.0"
resolved "https://registry.npmjs.org/lodash.flow/-/lodash.flow-3.5.0.tgz"
integrity sha1-h79AKSuM+D5OjOGjrkIJ4gBxZ1o=
lodash.memoize@^4.1.2:
version "4.1.2"
resolved "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz"
@ -8025,7 +7862,7 @@ lodash.uniq@^4.5.0:
resolved "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz"
integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=
"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:
"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:
version "4.17.21"
resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz"
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
@ -8431,7 +8268,7 @@ nanocolors@^0.2.2:
resolved "https://registry.npmjs.org/nanocolors/-/nanocolors-0.2.12.tgz"
integrity sha512-SFNdALvzW+rVlzqexid6epYdt8H9Zol7xDoQarioEFcFN0JHo4CYNztAxmtfgGTVRCmFlEOqqhBpoFGKqSAMug==
nanoid@^3.1.25, nanoid@^3.2.0:
nanoid@^3.1.25:
version "3.3.1"
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.1.tgz#6347a18cac88af88f58af0b3594b723d5e99bb35"
integrity sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==
@ -9081,11 +8918,6 @@ performance-now@^2.1.0:
resolved "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz"
integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
picocolors@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1, picomatch@^2.2.2:
version "2.2.2"
resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz"
@ -9495,11 +9327,6 @@ postcss-modules-extract-imports@^2.0.0:
dependencies:
postcss "^7.0.5"
postcss-modules-extract-imports@^3.0.0:
version "3.0.0"
resolved "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz"
integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==
postcss-modules-local-by-default@^3.0.3:
version "3.0.3"
resolved "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz"
@ -9510,15 +9337,6 @@ postcss-modules-local-by-default@^3.0.3:
postcss-selector-parser "^6.0.2"
postcss-value-parser "^4.1.0"
postcss-modules-local-by-default@^4.0.0:
version "4.0.0"
resolved "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz"
integrity sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==
dependencies:
icss-utils "^5.0.0"
postcss-selector-parser "^6.0.2"
postcss-value-parser "^4.1.0"
postcss-modules-scope@^2.2.0:
version "2.2.0"
resolved "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz"
@ -9527,13 +9345,6 @@ postcss-modules-scope@^2.2.0:
postcss "^7.0.6"
postcss-selector-parser "^6.0.0"
postcss-modules-scope@^3.0.0:
version "3.0.0"
resolved "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz"
integrity sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==
dependencies:
postcss-selector-parser "^6.0.4"
postcss-modules-values@^3.0.0:
version "3.0.0"
resolved "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz"
@ -9542,13 +9353,6 @@ postcss-modules-values@^3.0.0:
icss-utils "^4.0.0"
postcss "^7.0.6"
postcss-modules-values@^4.0.0:
version "4.0.0"
resolved "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz"
integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==
dependencies:
icss-utils "^5.0.0"
postcss-nesting@^7.0.0:
version "7.0.1"
resolved "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-7.0.1.tgz"
@ -9798,7 +9602,7 @@ postcss-selector-parser@^5.0.0-rc.3, postcss-selector-parser@^5.0.0-rc.4:
indexes-of "^1.0.1"
uniq "^1.0.1"
postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4:
postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2:
version "6.0.4"
resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz"
integrity sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw==
@ -9837,11 +9641,6 @@ postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0:
resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz"
integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==
postcss-value-parser@^4.2.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514"
integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==
postcss-values-parser@^2.0.0, postcss-values-parser@^2.0.1:
version "2.0.1"
resolved "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz"
@ -9878,15 +9677,6 @@ postcss@^8.1.0:
nanoid "^3.1.25"
source-map-js "^0.6.2"
postcss@^8.4.5:
version "8.4.6"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.6.tgz#c5ff3c3c457a23864f32cb45ac9b741498a09ae1"
integrity sha512-OovjwIzs9Te46vlEx7+uXB0PLijpwjXGKXjVGGPIGubGpq7uh5Xgf6D6FiJ/SzJMBosHDp6a2hiXOS97iBXcaA==
dependencies:
nanoid "^3.2.0"
picocolors "^1.0.0"
source-map-js "^1.0.2"
prelude-ls@^1.2.1:
version "1.2.1"
resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz"
@ -11036,9 +10826,9 @@ semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0:
resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz"
integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
semver@^7.2.1, semver@^7.3.2, semver@^7.3.5:
semver@^7.2.1, semver@^7.3.2:
version "7.3.5"
resolved "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7"
integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==
dependencies:
lru-cache "^6.0.0"
@ -11283,7 +11073,7 @@ source-list-map@^2.0.0:
resolved "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz"
integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==
"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.2:
"source-map-js@>=0.6.2 <2.0.0":
version "1.0.2"
resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c"
integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==
@ -12453,11 +12243,6 @@ wbuf@^1.1.0, wbuf@^1.7.3:
dependencies:
minimalistic-assert "^1.0.0"
web-vitals@2.1.4:
version "2.1.4"
resolved "https://registry.yarnpkg.com/web-vitals/-/web-vitals-2.1.4.tgz#76563175a475a5e835264d373704f9dde718290c"
integrity sha512-sVWcwhU5mX6crfI5Vd2dC4qchyTqxV8URinzt25XqVh+bHEPGH4C3NPrNionCP7Obx59wrYEbNlw4Z8sjALzZg==
webidl-conversions@^5.0.0:
version "5.0.0"
resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz"
@ -12536,13 +12321,6 @@ 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.npmjs.org/webpack-merge/-/webpack-merge-4.2.2.tgz"
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.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz"
@ -12580,35 +12358,6 @@ webpack@4.44.2:
watchpack "^1.7.4"
webpack-sources "^1.4.1"
webpack@^4.41.0:
version "4.46.0"
resolved "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz"
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.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz"