diff --git a/.eslintrc b/.eslintrc index b98aba1aa8..168f4d801e 100644 --- a/.eslintrc +++ b/.eslintrc @@ -95,11 +95,15 @@ { "pattern": "lib/**", "group": "internal" + }, + { + "pattern": "testing/**", + "group": "internal" } ], "pathGroupsExcludedImportTypes": [] - }, + } ] - }, + } } diff --git a/.github/workflows/audit_build_verify.yml b/.github/workflows/audit_build_verify.yml index 354575e56e..835b1e2ba5 100644 --- a/.github/workflows/audit_build_verify.yml +++ b/.github/workflows/audit_build_verify.yml @@ -42,7 +42,7 @@ jobs: continue-on-error: true - name: Cache node modules - uses: actions/cache@56461b9eb0f8438fd15c7a9968e3c9ebb18ceff1 # pin@v3 + uses: actions/cache@9b0c1fce7a93df8e3bb8926b0d6e9d89e92f20a7 # pin@v3 with: path: | .npm-cache @@ -70,7 +70,7 @@ jobs: - name: Upload lint results # run if lint failed and only on main/dev branch and pull requests if: always() && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/dev' || github.event_name == 'pull_request') - uses: github/codeql-action/upload-sarif@e0e5ded33cabb451ae0a9768fc7b0410bad9ad44 # pin@codeql-bundle-20220322 + uses: github/codeql-action/upload-sarif@cc7986c02bac29104a72998e67239bb5ee2ee110 # pin@codeql-bundle-20220322 with: sarif_file: lint-results.sarif continue-on-error: true @@ -98,7 +98,7 @@ jobs: continue-on-error: true - name: Cache node modules - uses: actions/cache@56461b9eb0f8438fd15c7a9968e3c9ebb18ceff1 # pin@v3 + uses: actions/cache@9b0c1fce7a93df8e3bb8926b0d6e9d89e92f20a7 # pin@v3 with: path: | .npm-cache @@ -119,7 +119,7 @@ jobs: npm install --prefer-offline --no-audit --legacy-peer-deps - name: Cache next.js build cache - uses: actions/cache@56461b9eb0f8438fd15c7a9968e3c9ebb18ceff1 # pin@v2 + uses: actions/cache@9b0c1fce7a93df8e3bb8926b0d6e9d89e92f20a7 # pin@v2 with: path: .next/cache key: ${{ runner.os }}-next-cache-${{ hashFiles('**/package-lock.json') }} @@ -135,7 +135,7 @@ jobs: - name: Archive build if: github.ref == 'refs/heads/main' || github.ref == 'refs/heads/dev' || github.event_name == 'pull_request' - uses: actions/upload-artifact@3cea5372237819ed00197afe530f5a7ea3e805c8 # pin@v3 + uses: actions/upload-artifact@83fd05a356d7e2593de66fc9913b3002723633cb # pin@v3 with: name: build path: build.tar.gz diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index a38ad5191b..9e34dc6981 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -21,13 +21,13 @@ jobs: uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # pin@v2 - name: Initialize CodeQL - uses: github/codeql-action/init@e0e5ded33cabb451ae0a9768fc7b0410bad9ad44 # pin@codeql-bundle-20220322 + uses: github/codeql-action/init@cc7986c02bac29104a72998e67239bb5ee2ee110 # pin@codeql-bundle-20220322 with: queries: security-and-quality languages: javascript - name: Autobuild - uses: github/codeql-action/autobuild@e0e5ded33cabb451ae0a9768fc7b0410bad9ad44 # pin@codeql-bundle-20220322 + uses: github/codeql-action/autobuild@cc7986c02bac29104a72998e67239bb5ee2ee110 # pin@codeql-bundle-20220322 - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@e0e5ded33cabb451ae0a9768fc7b0410bad9ad44 # pin@codeql-bundle-20220322 + uses: github/codeql-action/analyze@cc7986c02bac29104a72998e67239bb5ee2ee110 # pin@codeql-bundle-20220322 diff --git a/.github/workflows/lighthouse.yml b/.github/workflows/lighthouse.yml index 7a4046b97b..fc63dd9401 100644 --- a/.github/workflows/lighthouse.yml +++ b/.github/workflows/lighthouse.yml @@ -29,7 +29,7 @@ jobs: continue-on-error: true - name: Archive lighthouse artifacts - uses: actions/upload-artifact@3cea5372237819ed00197afe530f5a7ea3e805c8 # pin@v2 + uses: actions/upload-artifact@83fd05a356d7e2593de66fc9913b3002723633cb # pin@v2 # run on lighthouse fail if: always() with: diff --git a/README.md b/README.md index 4307c050a7..b5d10af343 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ # Kwenta -A dApp enabling derivatives trading with infinite liquidity โ€” powered by the Synthetix protocol. +A dApp enabling derivatives trading โ€” powered by the Synthetix protocol. The decentralized trading UI is available at [kwenta.eth.limo](https://kwenta.eth.limo).
ENS link: [kwenta.eth](https://app.ens.domains/name/kwenta.eth). @@ -47,11 +47,13 @@ cp .env.local.example .env.local Then, open `.env.local` and add the missing environment variables: Required: + - `NEXT_PUBLIC_PORTIS_APP_ID` - Portis app id (get it from [portis.io](https://www.portis.io/)) - `NEXT_PUBLIC_BN_ONBOARD_API_KEY` - Blocknative Onboard API key (get it from [blocknative.com](https://blocknative.com/)) - `NEXT_PUBLIC_PROVIDER_ID` - Specifies the default provider, options are `INFURA` or `BLAST_API` Optional: + - `NEXT_PUBLIC_INFURA_PROJECT_ID` - Infura project id (get it from [infura.io](https://infura.io/)) - `NEXT_PUBLIC_BLASTAPI_PROJECT_ID` - Blast API project id (get it from [blastapi.io](https://blastapi.io/)) @@ -70,16 +72,29 @@ npm run build npm start ``` +### Unit Testing + +```bash +npm run test:unit +``` + +For unit tests we use a combination of Jest and [React Testing Library](https://testing-library.com/docs/react-testing-library/intro/) + +Page tests should be added to the \_\_tests\_\_ folder at the root as it is not possible co-locate tests and pages in nextjs. Other tests should be co-located in a \_\_tests\_\_ folder next to their related file. + ### End-2-End testing -In order to run fully automated end-2-end (e2e) tests Kwenta uses [Synpress](https://github.com/Synthetixio/synpress) (a wrapper around [Cynpress](https://www.cypress.io/)). -#### Constraints +In order to run fully automated end-2-end (e2e) tests Kwenta uses [Synpress](https://github.com/Synthetixio/synpress) (a wrapper around [Cynpress](https://www.cypress.io/)). + +#### Constraints + The current e2e tests are written to be run on Optimistic Kovan using Chrome as the browser. #### Setup -- Download and install Google Chrome + +- Download and install Google Chrome - Setup a test wallet on Optimistic Kovan and fund it with plenty of ETH (to pay for gas) and sUSD -- Prior to running the tests you must set the environment variables below in the shell from which npm is started. Unfortunately, at this time other methods to set said environment variables (eg. through `.env.local`) don't work in conjunction with Synpress. +- Prior to running the tests you must set the environment variables below in the shell from which npm is started. Unfortunately, at this time other methods to set said environment variables (eg. through `.env.local`) don't work in conjunction with Synpress. ```bash PRIVATE_KEY= @@ -91,9 +106,11 @@ IS_TESTNET=true ``` ##### Bash convenience script for setting up the environment -A Bash convenience script [has been made available here](https://gist.github.com/raffiegang/b24a6b97bcd054645abf59be852bc88d). -- Open bash -- Copy the private key of the test wallet into the file `SYNPRESS_PRIVATEKEY` into the same folder location as the script. While using this method, please don't forget to update your .gitignore file to prevent your private key to be leaked. + +A Bash convenience script [has been made available here](https://gist.github.com/raffiegang/b24a6b97bcd054645abf59be852bc88d). + +- Open bash +- Copy the private key of the test wallet into the file `SYNPRESS_PRIVATEKEY` into the same folder location as the script. While using this method, please don't forget to update your .gitignore file to prevent your private key to be leaked. - Run the following command `source ./synpress-envsetter.sh` #### Run the tests diff --git a/__tests__/pages/market.test.tsx b/__tests__/pages/market.test.tsx new file mode 100644 index 0000000000..dfd9f4c75d --- /dev/null +++ b/__tests__/pages/market.test.tsx @@ -0,0 +1,59 @@ +import { render, waitFor } from '@testing-library/react'; + +import mockConnector from 'testing/unit/__mocks__/mockConnector'; +import MockProviders from 'testing/unit/__mocks__/MockProviders'; +import { mockGrapqhlRequest, mockReactQuery } from 'testing/unit/__mocks__/mockQueries'; +import { TEST_ADDR } from 'testing/unit/constants'; + +import Market from '../../pages/market'; + +describe('Futures market page - cross margin', () => { + beforeAll(() => { + // TODO: remove this when we return to writing tests + jest.spyOn(console, 'error').mockImplementation(() => {}); + mockReactQuery(); + }); + test('Displays cross margin not available when unsupported network', async () => { + mockGrapqhlRequest({ crossMarginAccounts: [] }); + mockConnector({ network: { id: 1, name: 'ethereum' } }); + + const { findAllByTestId } = render( + + + + ); + + const components = await findAllByTestId('cross-margin-unsupported-network'); + // Mobile and Desktop both get rendered + expect(components.length).toEqual(2); + }); + test('Displays cross margin onboard prompt when no cross margin account', async () => { + mockGrapqhlRequest({ crossMarginAccounts: [] }); + mockConnector(); + + const { findAllByTestId } = render( + + + + ); + + const components = await findAllByTestId('cross-margin-create-account'); + // Mobile and Desktop both get rendered + expect(components.length).toEqual(2); + }); + test('Trade panel input is disabled when wallet not connected', async () => { + mockGrapqhlRequest({ crossMarginAccounts: [{ id: TEST_ADDR }] }); + mockConnector(); + + const { findByTestId } = render( + + + + ); + + await waitFor(async () => { + const component = await findByTestId('set-order-size-amount-susd-desktop'); + expect(component.hasAttribute('disabled')); + }); + }); +}); diff --git a/assets/svg/app/question-mark.svg b/assets/svg/app/question-mark.svg new file mode 100644 index 0000000000..961f4180ae --- /dev/null +++ b/assets/svg/app/question-mark.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/svg/futures/cross-margin-icon-light.svg b/assets/svg/futures/cross-margin-icon-light.svg index 18b05bbf04..e8c36a2629 100644 --- a/assets/svg/futures/cross-margin-icon-light.svg +++ b/assets/svg/futures/cross-margin-icon-light.svg @@ -1,4 +1,4 @@ - - + + diff --git a/assets/svg/futures/deposit-arrow.svg b/assets/svg/futures/deposit-arrow.svg index aa315e3691..0d1a6ffb4d 100644 --- a/assets/svg/futures/deposit-arrow.svg +++ b/assets/svg/futures/deposit-arrow.svg @@ -1,3 +1,3 @@ - - + + diff --git a/assets/svg/futures/isolated-margin-icon-light.svg b/assets/svg/futures/isolated-margin-icon-light.svg index 560c97fa95..dedce8cd51 100644 --- a/assets/svg/futures/isolated-margin-icon-light.svg +++ b/assets/svg/futures/isolated-margin-icon-light.svg @@ -1,3 +1,3 @@ - + diff --git a/assets/svg/futures/withdraw-arrow.svg b/assets/svg/futures/withdraw-arrow.svg index 86fe64e96a..2415bb6709 100644 --- a/assets/svg/futures/withdraw-arrow.svg +++ b/assets/svg/futures/withdraw-arrow.svg @@ -1,3 +1,3 @@ - - + + diff --git a/components/Badge/Badge.tsx b/components/Badge/Badge.tsx index 97997cabd9..062bb8e465 100644 --- a/components/Badge/Badge.tsx +++ b/components/Badge/Badge.tsx @@ -1,15 +1,14 @@ import styled from 'styled-components'; -const Badge = styled.span` +const Badge = styled.span<{ color: 'yellow' | 'red' }>` text-transform: uppercase; - padding: 1.6px 3px 1px 5px; + padding: 1.6px 3px 1px 3px; text-align: center; font-family: ${(props) => props.theme.fonts.black}; - color: ${(props) => props.theme.colors.selectedTheme.badge.text}; - background: ${(props) => props.theme.colors.selectedTheme.badge.background}; + color: ${(props) => props.theme.colors.selectedTheme.badge[props.color].text}; + background: ${(props) => props.theme.colors.selectedTheme.badge[props.color].background}; border-radius: 100px; - letter-spacing: 1px; - margin-left: 4px; + margin-left: 5px; line-height: unset; font-size: 10px; font-variant: all-small-caps; diff --git a/components/Badge/MarketBadge.tsx b/components/Badge/MarketBadge.tsx index 899e9fd8b9..bf12b93cb8 100644 --- a/components/Badge/MarketBadge.tsx +++ b/components/Badge/MarketBadge.tsx @@ -5,7 +5,6 @@ import styled from 'styled-components'; import { CurrencyKey } from 'constants/currency'; import { FuturesClosureReason } from 'hooks/useFuturesMarketClosed'; import useIsMarketTransitioning from 'hooks/useIsMarketTransitioning'; -import theme from 'styles/theme'; import { FuturesMarketAsset } from 'utils/futures'; import { marketIsOpen, marketNextOpen, marketNextTransition } from 'utils/marketHours'; @@ -25,7 +24,7 @@ export const TransitionBadge: FC = ({ isOpen }) => { const { t } = useTranslation(); return ( - + {t(`futures.market.state.${isOpen ? 'closes-soon' : 'opens-soon'}`)} ); @@ -51,7 +50,7 @@ export const MarketBadge: FC = ({ if (isFuturesMarketClosed) { const reason = futuresClosureReason || 'unknown'; - return {t(`futures.market.state.${reason}`)}; + return {t(`futures.market.state.${reason}`)}; } if (isMarketTransitioning && isOpen !== null) { @@ -63,8 +62,7 @@ export const MarketBadge: FC = ({ export default MarketBadge; -const StyledBadge = styled(Badge)<{ background: string }>` - background: ${(props) => props.background}; +const StyledBadge = styled(Badge)` padding: 1px 5px; line-height: 9px; `; diff --git a/components/Button/Button.tsx b/components/Button/Button.tsx index ad8cab586d..39f1d381c3 100644 --- a/components/Button/Button.tsx +++ b/components/Button/Button.tsx @@ -35,7 +35,7 @@ export const border = css` left: 0; right: 0; bottom: 0; - border-radius: 10px; + border-radius: 8px; padding: 1px; background: ${(props) => props.theme.colors.selectedTheme.button.border}; -webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0); diff --git a/components/Button/TabButton.tsx b/components/Button/TabButton.tsx index 4ba9199605..9a3103f838 100644 --- a/components/Button/TabButton.tsx +++ b/components/Button/TabButton.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import React, { ReactNode } from 'react'; import styled, { css } from 'styled-components'; import Button from './Button'; @@ -9,19 +9,21 @@ export type TabButtonProps = { badge?: number; icon?: any; active?: boolean; - onClick?: React.MouseEventHandler | undefined; + titleIcon?: ReactNode; disabled?: boolean; noOutline?: boolean; vertical?: boolean; nofill?: boolean; + onClick?: React.MouseEventHandler | undefined; }; const TabButton: React.FC = React.memo( - ({ title, detail, badge, active, icon, vertical, nofill, ...props }) => ( + ({ title, detail, badge, active, icon, vertical, titleIcon, nofill, ...props }) => ( {!!icon &&
{icon}
}
+ {titleIcon}

{title}

{!!badge &&
{badge}
}
@@ -55,6 +57,7 @@ const StyledButton = styled(Button)<{ .title-container { display: flex; flex-direction: row; + align-items: center; } .title { text-align: center; diff --git a/components/Error/Error.tsx b/components/Error/Error.tsx index 22f070e679..bbc82b4ea5 100644 --- a/components/Error/Error.tsx +++ b/components/Error/Error.tsx @@ -1,4 +1,5 @@ import React, { FC, useMemo } from 'react'; +import { useTranslation } from 'react-i18next'; import styled from 'styled-components'; import Button from 'components/Button'; @@ -6,29 +7,45 @@ import Spacer from 'components/Spacer'; import { formatRevert, isUserDeniedError } from 'utils/formatters/error'; import { truncateString } from 'utils/formatters/string'; +type MessageType = 'error' | 'warn'; + type ErrorProps = { message: string; + messageType?: MessageType; formatter?: 'revert' | undefined; + containerStyle?: Record; retryButton?: { onClick: () => void; label: string; }; }; -export const Error: FC = ({ message, formatter, retryButton }) => { +export const FRIENDLY_I18N_MESSAGES: Record = { + 'Insufficient margin': 'futures.market.trade.margin.modal.deposit.min-margin-error', +}; + +export const Error: FC = ({ + message, + formatter, + retryButton, + containerStyle, + messageType = 'error', +}) => { + const { t } = useTranslation(); const formattedMessage = useMemo(() => { + if (FRIENDLY_I18N_MESSAGES[message]) return t(FRIENDLY_I18N_MESSAGES[message]); switch (formatter) { case 'revert': return formatRevert(message); default: return message; } - }, [message, formatter]); + }, [message, formatter, t]); if (isUserDeniedError(message) || !message) return null; return ( - +
{truncateString(formattedMessage)}
{retryButton && ( <> @@ -42,16 +59,23 @@ export const Error: FC = ({ message, formatter, retryButton }) => { ); }; -const ErrorContainer = styled.div` - color: ${(props) => props.theme.colors.selectedTheme.red}; +const ErrorContainer = styled.div<{ messageType: MessageType; style: Record }>` + color: ${(props) => + props.messageType === 'error' + ? props.theme.colors.selectedTheme.red + : props.theme.colors.selectedTheme.orange}; flex: none; order: 0; flex-grow: 0; text-align: center; font-size: 12px; - margin-bottom: 16px; + margin: ${(props) => props.style.margin ?? '0 0 16px 0'}; padding: 15px; border: 1px solid rgba(239, 104, 104, 0.2); + border-color: ${(props) => + props.messageType === 'error' + ? props.theme.colors.selectedTheme.red + : props.theme.colors.selectedTheme.orange}; border-radius: 8px; cursor: default; diff --git a/components/InfoBox/InfoBox.tsx b/components/InfoBox/InfoBox.tsx index facaa81590..c28d56b7e4 100644 --- a/components/InfoBox/InfoBox.tsx +++ b/components/InfoBox/InfoBox.tsx @@ -70,12 +70,14 @@ const InfoBoxContainer = styled.div` color: ${(props) => props.theme.colors.selectedTheme.text.title}; font-size: 13px; text-transform: capitalize; + cursor: default; } .value { color: ${(props) => props.theme.colors.selectedTheme.text.value}; font-family: ${(props) => props.theme.fonts.mono}; font-size: 13px; + cursor: default; } .red { diff --git a/components/Input/NumericInput.test.tsx b/components/Input/NumericInput.test.tsx index a83920070a..f5a2777ac5 100644 --- a/components/Input/NumericInput.test.tsx +++ b/components/Input/NumericInput.test.tsx @@ -1,6 +1,7 @@ import { render } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; -import ContextProvider from 'test-utils/ContextProvider'; + +import ContextProvider from 'testing/unit/__mocks__/MockProviders'; import NumericInput from './NumericInput'; diff --git a/components/Nav/DropDownLabel.tsx b/components/Nav/DropDownLabel.tsx index cd57eaced7..e69dabe02c 100644 --- a/components/Nav/DropDownLabel.tsx +++ b/components/Nav/DropDownLabel.tsx @@ -5,6 +5,7 @@ import { FlexDivRow } from 'styles/common'; export const LabelContainer = styled(FlexDivRow)<{ noPadding?: boolean }>` padding: ${(props) => !props.noPadding && '16px'}; font-size: 13px; + align-items: center; font-family: ${(props) => props.theme.fonts.regular}; width: 100%; color: ${(props) => props.theme.colors.selectedTheme.button.text.primary}; diff --git a/components/Nav/FuturesIcon.tsx b/components/Nav/FuturesIcon.tsx index 6771e2cb3c..98fdea62c4 100644 --- a/components/Nav/FuturesIcon.tsx +++ b/components/Nav/FuturesIcon.tsx @@ -17,7 +17,11 @@ export default function FuturesIcon(props: IconProps) { const CrossMarginIcon = currentTheme === 'dark' ? CrossMarginIconDark : CrossMarginIconLight; const IsolatedMarginIcon = currentTheme === 'dark' ? IsolatedMarginIconDark : IsolatedMarginIconLight; - return props.type === 'cross_margin' ? : ; + return props.type === 'cross_margin' ? ( + + ) : ( + + ); } export function CrossMarginIcon() { diff --git a/components/PreviewArrow/PreviewArrow.tsx b/components/PreviewArrow/PreviewArrow.tsx index f0fa62a0c0..051471eb59 100644 --- a/components/PreviewArrow/PreviewArrow.tsx +++ b/components/PreviewArrow/PreviewArrow.tsx @@ -1,14 +1,17 @@ import styled from 'styled-components'; +type TextColor = 'yellow' | 'red'; + type PreviewArrowProps = { + color?: TextColor; showPreview: boolean; }; -const PreviewArrow: React.FC = ({ showPreview, children }) => { +const PreviewArrow: React.FC = ({ showPreview, children, color }) => { return showPreview ? ( <> - {children} + {children} ) : null; }; @@ -23,8 +26,8 @@ const StyledArrow = styled.span` } `; -const StyledPreviewGold = styled.span` - color: ${(props) => props.theme.colors.selectedTheme.yellow}; +const StyledPreviewGold = styled.span<{ color?: TextColor }>` + color: ${(props) => props.theme.colors.selectedTheme[props.color || 'yellow']}; `; export default PreviewArrow; diff --git a/components/ProgressSteps/ProgressSteps.tsx b/components/ProgressSteps/ProgressSteps.tsx index 317fb95b01..63af4bc8b7 100644 --- a/components/ProgressSteps/ProgressSteps.tsx +++ b/components/ProgressSteps/ProgressSteps.tsx @@ -25,7 +25,7 @@ const ProgressSteps: FC = ({ step, totalSteps, complete }) => { {stepList.map((_, i) => ( - + ))}
diff --git a/components/SegmentedControl/SegmentedControl.tsx b/components/SegmentedControl/SegmentedControl.tsx index da48e4d35a..b7e611a43f 100644 --- a/components/SegmentedControl/SegmentedControl.tsx +++ b/components/SegmentedControl/SegmentedControl.tsx @@ -40,10 +40,12 @@ function SegmentedControl({ } const SegmentedControlContainer = styled.div<{ $length: number; styleType: StyleType }>` - display: grid; + display: ${(props) => (props.styleType === 'check' ? 'flex' : 'grid')}; grid-template-columns: repeat(${(props) => props.$length}, 1fr); - box-sizing: border-box; + ${(props) => props.styleType === 'check' && 'justify-content: space-between;'} grid-gap: 14px; + box-sizing: border-box; + width: 100%; height: ${(props) => (props.styleType === 'tab' ? '38px' : '24px')}; padding: ${(props) => (props.styleType === 'tab' ? '4px' : '0')}; diff --git a/components/Slider/Slider.tsx b/components/Slider/Slider.tsx index 2d3de34660..c863ef695d 100644 --- a/components/Slider/Slider.tsx +++ b/components/Slider/Slider.tsx @@ -1,4 +1,9 @@ -import Slider, { SliderProps as DefaultSliderProps } from '@material-ui/core/Slider'; +import Slider, { + SliderProps as DefaultSliderProps, + ValueLabelProps, +} from '@material-ui/core/Slider'; +import Tooltip from '@material-ui/core/Tooltip'; +import { withStyles } from '@material-ui/styles'; import React from 'react'; import styled, { css } from 'styled-components'; @@ -31,10 +36,12 @@ const SliderComponent: React.FC = ({ max={maxValue} step={steps} marks + valueLabelDisplay="auto" defaultValue={defaultValue ?? minValue} value={value} onChange={onChange} onChangeCommitted={onChangeCommitted} + ValueLabelComponent={ValueLabelComponent} disabled={disabled} {...props} className={className} @@ -42,11 +49,31 @@ const SliderComponent: React.FC = ({ ); }; + +const TextOnlyTooltip = withStyles((theme) => ({ + tooltip: { + color: theme.palette.colors.selectedTheme.text.value, + marginTop: '1px', + fontSize: '13px', + backgroundColor: 'transparent', + }, +}))(Tooltip); + export default SliderComponent; +function ValueLabelComponent(props: ValueLabelProps) { + const { children, open, value } = props; + + return ( + + {children} + + ); +} + const styledMarkLabel = css` font-family: ${(props) => props.theme.fonts.mono}; - font-size: 11px; + font-size: 13px; color: ${(props) => props.theme.colors.selectedTheme.slider.label}; ${media.lessThan('sm')` top: -5px; @@ -118,17 +145,4 @@ const StyledSlider = styled(Slider)` .MuiSlider-markLabel:nth-child(7) { color: #787878 !important; } - - .MuiSlider-valueLabel { - span[class^='PrivateValueLabel-label'] { - color: ${(props) => props.theme.colors.selectedTheme.button.text.primary}; - } - font-family: ${(props) => props.theme.fonts.mono}; - font-size: 11px; - top: initial; - bottom: -41.5px; - ${media.lessThan('sm')` - top: -15px; - `} - } `; diff --git a/components/TVChart/DataFeed.ts b/components/TVChart/DataFeed.ts index c745be8c66..a5e22450f3 100644 --- a/components/TVChart/DataFeed.ts +++ b/components/TVChart/DataFeed.ts @@ -155,7 +155,7 @@ const DataFeedFactory = ( ): IBasicDataFeed => { return { onReady: (cb: OnReadyCallback) => { - setTimeout(() => cb(config), 0); + setTimeout(() => cb(config), 500); }, resolveSymbol: (symbolName: string, onSymbolResolvedCallback: (val: any) => any) => { const { base, quote } = splitBaseQuote(symbolName); diff --git a/components/Table/Table.tsx b/components/Table/Table.tsx index db9b11b793..18b37271e9 100644 --- a/components/Table/Table.tsx +++ b/components/Table/Table.tsx @@ -22,6 +22,21 @@ type ColumnWithSorting = Column & { columns?: Column[]; }; +export function compareNumericString(rowA: Row, rowB: Row, id: string, desc: boolean) { + let a = parseFloat(rowA.values[id]); + let b = parseFloat(rowB.values[id]); + if (isNaN(a)) { + // Blanks and non-numeric strings to bottom + a = desc ? Number.NEGATIVE_INFINITY : Number.POSITIVE_INFINITY; + } + if (isNaN(b)) { + b = desc ? Number.NEGATIVE_INFINITY : Number.POSITIVE_INFINITY; + } + if (a > b) return 1; + if (a < b) return -1; + return 0; +} + type TableProps = { palette?: TablePalette; data: object[]; diff --git a/components/Table/index.ts b/components/Table/index.ts index 6013249e37..e3db158368 100644 --- a/components/Table/index.ts +++ b/components/Table/index.ts @@ -1 +1 @@ -export { default, TableNoResults } from './Table'; +export { default, TableNoResults, compareNumericString } from './Table'; diff --git a/components/Text/PositionType.tsx b/components/Text/PositionType.tsx index 31f83ce4da..0235b7cbca 100644 --- a/components/Text/PositionType.tsx +++ b/components/Text/PositionType.tsx @@ -1,37 +1,50 @@ import styled, { css } from 'styled-components'; +import { PositionSide } from 'queries/futures/types'; + type PositionProps = { - side: 'long' | 'short'; + side: PositionSide; + mobile?: boolean; }; -const PositionType: React.FC = ({ side = 'long' }) => { - return {side}; +const PositionType: React.FC = ({ side = PositionSide.LONG, mobile = false }) => { + return mobile ? ( + {side} + ) : ( + {side} + ); }; -const StyledText = styled.p<{ $side: PositionProps['side'] }>` +const StyledText = styled.p<{ side: PositionSide }>` text-transform: uppercase; padding: 5px 9px; border-radius: 6px; + font-family: ${(props) => props.theme.fonts.monoBold}; + font-variant: all-small-caps; ${(props) => - props.$side === 'long' && - css` - color: ${(props) => props.theme.colors.selectedTheme.green}; - background: rgba(127, 212, 130, 0.1); - font-family: ${(props) => props.theme.fonts.monoBold}; - font-variant: all-small-caps; - letter-spacing: 1.4px; - `}; + props.side === PositionSide.LONG + ? css` + color: ${(props) => props.theme.colors.common.primaryGreen}; + background: rgba(127, 212, 130, 0.1); + letter-spacing: 1.4px; + ` + : css` + color: ${(props) => props.theme.colors.common.primaryRed}; + background: rgba(239, 104, 104, 0.1); + letter-spacing: -0.2px; + `}; + }; +`; - ${(props) => - props.$side === 'short' && - css` - color: ${(props) => props.theme.colors.selectedTheme.red}; - background: rgba(239, 104, 104, 0.1); - font-family: ${(props) => props.theme.fonts.monoBold}; - font-variant: all-small-caps; - letter-spacing: -0.2px; - `}; +const MobileStyledText = styled.p<{ side: PositionSide }>` + margin: 0; + text-transform: uppercase; + font-family: ${(props) => props.theme.fonts.bold}; + color: ${(props) => + props.side === PositionSide.LONG + ? props.theme.colors.common.primaryGreen + : props.theme.colors.common.primaryRed}; `; export default PositionType; diff --git a/constants/address.ts b/constants/address.ts index 2c325ea8da..2b42667de3 100644 --- a/constants/address.ts +++ b/constants/address.ts @@ -5,13 +5,11 @@ export const ENS_REVERSE_LOOKUP = '0x3671aE578E63FdF66ad4F3E12CC0c0d71Ac7510C'; export const SYNTH_SWAP_OPTIMISM_ADDRESS = '0x6d6273f52b0C8eaB388141393c1e8cfDB3311De6'; export const CROSS_MARGIN_ACCOUNT_FACTORY: Record = { - 69: '0xB2e8d9832C8a22C6fB6D2c92c7E2a69d654749CB', - 420: '0xf6Be6F3b4DDC804978169F5B96A6D6dDA9212168', - // 10: awaiting mainnet + 420: '0x9320170B37eDEb4f41cb6E5A8F82B984aD9c44eE', + 10: '0x8e43BF1910ad1461EEe0Daca10547c7e6d9D2f36', }; export const CROSS_MARGIN_BASE_SETTINGS: Record = { - 69: '0x026B0DA8B453967D39227748066Eb094a415b696', - 420: '0x6909951d28133e7c26C24035e2163BD4c4B973E8', - // 10: awaiting mainnet + 420: '0x8d1CB3f153D4646b64A447809e1Ce7714d41C6B4', + 10: '0x8954C7b1417E3De398c7F33520EbAe142929Ba2A', }; diff --git a/constants/defaults.ts b/constants/defaults.ts index 6499641688..76dfb41098 100644 --- a/constants/defaults.ts +++ b/constants/defaults.ts @@ -43,10 +43,10 @@ export const DEFAULT_NP_LEVERAGE_ADJUSTMENT: number = 0.9975; // for mobile leaderboard export const DEFAULT_LEADERBOARD_ROWS = 20; -export const CROSS_MARGIN_ENABLED = process.env.NODE_ENV === 'development'; +export const CROSS_MARGIN_ENABLED = true; export const DEFAULT_FUTURES_MARGIN_TYPE = CROSS_MARGIN_ENABLED ? 'cross_margin' : 'isolated_margin'; -export const DEFAULT_LEVERAGE = '10'; +export const DEFAULT_LEVERAGE = '1'; diff --git a/constants/futures.ts b/constants/futures.ts index de93bd353b..3e6c8a8c83 100644 --- a/constants/futures.ts +++ b/constants/futures.ts @@ -1,7 +1,9 @@ import { wei } from '@synthetixio/wei'; -export const ISOLATED_MARGIN_ORDER_TYPES = ['market', 'next-price']; -export const CROSS_MARGIN_ORDER_TYPES = ['market', 'limit', 'stop']; -export const ORDER_KEEPER_ETH_DEPOSIT = wei(0.1); +import { FuturesOrderType } from 'queries/futures/types'; + +export const ISOLATED_MARGIN_ORDER_TYPES: FuturesOrderType[] = ['market', 'next price']; +export const CROSS_MARGIN_ORDER_TYPES: FuturesOrderType[] = ['market', 'limit', 'stop market']; +export const ORDER_KEEPER_ETH_DEPOSIT = wei(0.01); export const DEFAULT_MAX_LEVERAGE = wei(10); export const MAX_POSITION_BUFFER = 0.01; diff --git a/constants/links.ts b/constants/links.ts index 28eb6a23c0..fb15d9f5a0 100644 --- a/constants/links.ts +++ b/constants/links.ts @@ -40,6 +40,7 @@ export const EXTERNAL_LINKS = { DevDao: 'https://docs.kwenta.io/dao/contribute/devdao-contribute', MarketingDao: 'https://docs.kwenta.io/dao/contribute/marketingDAO', Faq: 'https://docs.kwenta.io/resources/faq', + CrossMarginFaq: 'https://docs.kwenta.io/products/futures/cross-margin-accounts', }, Optimism: { Home: 'https://optimism.io/', diff --git a/constants/queryKeys.ts b/constants/queryKeys.ts index bd51cabb86..6a7aff4ee0 100644 --- a/constants/queryKeys.ts +++ b/constants/queryKeys.ts @@ -237,23 +237,39 @@ export const QUERY_KEYS = { MarketsPositions: ( networkId: NetworkId, markets: string[] | [], - selectedFuturesAddress: string - ) => ['futures', 'marketsPositions', networkId, markets, selectedFuturesAddress], - Positions: (networkId: NetworkId, markets: string[] | [], walletAddress: string) => [ + walletAddress: string, + crossMarginAddress: string + ) => ['futures', 'marketsPositions', networkId, markets, walletAddress, crossMarginAddress], + Portfolio: ( + networkId: NetworkId, + markets: string[] | [], + walletAddress: string | null, + crossMarginAddress: string | null, + freeMargin: number + ) => [ 'futures', 'positions', networkId, markets, walletAddress, + crossMarginAddress, + freeMargin, + ], + PositionHistory: (walletAddress: string | null, networkId: NetworkId) => [ + 'futures', + 'accountPositions', + walletAddress, + networkId, ], - AccountPositions: ( - walletAddress: string | null, - networkId: NetworkId, - accountType: FuturesAccountType - ) => ['futures', 'accountPositions', walletAddress, networkId, accountType], Participants: () => ['futures', 'participants'], Participant: (walletAddress: string) => ['futures', 'participant', walletAddress], Stats: (networkId: NetworkId) => ['futures', 'stats', networkId], + Leaderboard: (networkId: NetworkId, searchTerm: string) => [ + 'futures', + 'leaderboard', + networkId, + searchTerm, + ], AverageLeverage: ['futures', 'averageLeverage'], CumulativeVolume: ['futures', 'cumulativeVolume'], TotalLiquidations: ['futures', 'totalLiquidations'], @@ -302,18 +318,19 @@ export const QUERY_KEYS = { currencyKey: string | null ) => ['futures', 'currentRoundId', networkId, walletAddress, currencyKey], OverviewStats: (networkId: NetworkId) => ['futures', 'overview-stats', networkId], - CrossMarginAccountOverview: ( - networkId: NetworkId, - wallet: string, - crossMarginBaseAddress: string - ) => ['futures', 'cross-margin-account-overview', networkId, wallet, crossMarginBaseAddress], - CrossMarginAccount: (wallet: string, factoryAddress: string) => [ + CrossMarginAccountOverview: (networkId: NetworkId, wallet: string, retryCount: number) => [ 'futures', - 'cross-margin-account', + 'cross-margin-account-overview', + networkId, wallet, - factoryAddress, + retryCount, + ], + CrossMarginSettings: (networkId: NetworkId, settingsAddress: string) => [ + 'futures', + 'cross-margin-settings', + networkId, + settingsAddress, ], - CrossMarginSettings: (networkId: NetworkId) => ['futures', 'cross-margin-settings', networkId], }, Files: { Get: (fileName: string) => ['files', 'get', fileName], diff --git a/contexts/RefetchContext.tsx b/contexts/RefetchContext.tsx index 5c76c4c4db..7aae0b052c 100644 --- a/contexts/RefetchContext.tsx +++ b/contexts/RefetchContext.tsx @@ -1,20 +1,22 @@ import React, { useEffect } from 'react'; -import { UseQueryResult } from 'react-query'; import { useRecoilValue, useSetRecoilState } from 'recoil'; import { Period } from 'constants/period'; import useGetAverageFundingRateForMarkets from 'queries/futures/useGetAverageFundingRateForMarkets'; import useGetCrossMarginAccountOverview from 'queries/futures/useGetCrossMarginAccountOverview'; +import useGetCrossMarginSettings from 'queries/futures/useGetCrossMarginSettings'; import useGetFuturesMarkets from 'queries/futures/useGetFuturesMarkets'; import useGetFuturesOpenOrders from 'queries/futures/useGetFuturesOpenOrders'; import useGetFuturesPositionForMarket from 'queries/futures/useGetFuturesPositionForMarket'; import useGetFuturesPositionForMarkets from 'queries/futures/useGetFuturesPositionForMarkets'; +import useGetFuturesPositionHistory from 'queries/futures/useGetFuturesPositionHistory'; import useGetFuturesVolumes from 'queries/futures/useGetFuturesVolumes'; import useQueryCrossMarginAccount from 'queries/futures/useQueryCrossMarginAccount'; import useExchangeRatesQuery from 'queries/rates/useExchangeRatesQuery'; import useLaggedDailyPrice from 'queries/rates/useLaggedDailyPrice'; import useSynthBalances from 'queries/synths/useSynthBalances'; -import { futuresAccountTypeState, positionState } from 'store/futures'; +import { futuresAccountState, futuresAccountTypeState, positionState } from 'store/futures'; +import logError from 'utils/logError'; type RefetchType = | 'modify-position' @@ -24,7 +26,10 @@ type RefetchType = | 'account-margin-change' | 'cross-margin-account-change'; -type RefetchUntilType = 'wallet-balance-change' | 'cross-margin-account-change'; +type RefetchUntilType = + | 'wallet-balance-change' + | 'cross-margin-account-change' + | 'account-margin-change'; type RefetchContextType = { handleRefetch: (refetchType: RefetchType, timeout?: number) => void; @@ -38,6 +43,7 @@ const RefetchContext = React.createContext({ export const RefetchProvider: React.FC = ({ children }) => { const selectedAccountType = useRecoilValue(futuresAccountTypeState); + const { crossMarginAddress } = useRecoilValue(futuresAccountState); const setPosition = useSetRecoilState(positionState); const synthsBalancesQuery = useSynthBalances(); @@ -45,13 +51,15 @@ export const RefetchProvider: React.FC = ({ children }) => { const positionQuery = useGetFuturesPositionForMarket(); const crossMarginAccountOverview = useGetCrossMarginAccountOverview(); const positionsQuery = useGetFuturesPositionForMarkets(); + const positionHistoryQuery = useGetFuturesPositionHistory(); const marketsQuery = useGetFuturesMarkets(); - const crossMarginAccountQuery = useQueryCrossMarginAccount(); + const queryCrossMarginAccount = useQueryCrossMarginAccount(); useExchangeRatesQuery({ refetchInterval: 15000 }); useGetAverageFundingRateForMarkets(Period.ONE_HOUR); useLaggedDailyPrice(); useGetFuturesVolumes({ refetchInterval: 60000 }); + useGetCrossMarginSettings(); useEffect(() => { if (positionQuery.error) { @@ -66,21 +74,25 @@ export const RefetchProvider: React.FC = ({ children }) => { marketsQuery.refetch(); openOrdersQuery.refetch(); positionsQuery.refetch(); + positionHistoryQuery.refetch(); if (selectedAccountType === 'cross_margin') { crossMarginAccountOverview.refetch(); } break; case 'new-order': + positionsQuery.refetch(); openOrdersQuery.refetch(); break; case 'close-position': positionQuery.refetch(); - openOrdersQuery.refetch(); positionsQuery.refetch(); + positionHistoryQuery.refetch(); + openOrdersQuery.refetch(); break; case 'margin-change': - positionsQuery.refetch(); positionQuery.refetch(); + positionsQuery.refetch(); + positionHistoryQuery.refetch(); openOrdersQuery.refetch(); synthsBalancesQuery.refetch(); break; @@ -89,7 +101,7 @@ export const RefetchProvider: React.FC = ({ children }) => { synthsBalancesQuery.refetch(); break; case 'cross-margin-account-change': - crossMarginAccountQuery.refetch(); + queryCrossMarginAccount(); break; } }, timeout ?? 5000); @@ -97,14 +109,29 @@ export const RefetchProvider: React.FC = ({ children }) => { const refetchUntilUpdate = async (refetchType: RefetchUntilType) => { switch (refetchType) { + case 'account-margin-change': + return Promise.all([ + refetchWithComparator( + crossMarginAccountOverview.refetch, + crossMarginAccountOverview, + (prev, next) => + !next.data || + prev?.data?.freeMargin?.toString() === next?.data?.freeMargin?.toString() + ), + refetchWithComparator( + synthsBalancesQuery.refetch, + synthsBalancesQuery, + (prev, next) => + !next.data || + prev?.data.susdWalletBalance?.toString() === next?.data.susdWalletBalance?.toString() + ), + ]); case 'cross-margin-account-change': - return refetchWithComparator(crossMarginAccountQuery, (prev, next) => { - return !next || prev === next; - }); - case 'wallet-balance-change': - return refetchWithComparator(synthsBalancesQuery, (prev, next) => { - return !next || prev?.susdWalletBalance === next?.susdWalletBalance; - }); + return refetchWithComparator( + queryCrossMarginAccount, + crossMarginAddress, + (prev, next) => !next || prev === next + ); } }; @@ -119,36 +146,34 @@ export const RefetchProvider: React.FC = ({ children }) => { // signal to continue retrying, comparing prev and new query result const refetchWithComparator = async ( - query: UseQueryResult, + query: () => Promise, + existingResult: any, comparator: (previous: any, current: any) => boolean, interval = 1000, - max = 20 + max = 25 ) => { - const prev = query?.data; - - return new Promise((res, rej) => { + return new Promise((res) => { let count = 1; - const refetch = async () => { + const refetch = async (existingResult: any) => { const timeout = setTimeout(async () => { if (count > max) { clearTimeout(timeout); - rej(new Error('Refetch timed out')); + logError('refetch timeout'); + res({ data: null, status: 'timeout' }); } else { - const cur = query?.data || null; - const next = await query.refetch(); - + const next = await query(); count += 1; - if (!comparator(prev, next.data)) { + if (!comparator(existingResult, next)) { clearTimeout(timeout); - res(cur); + res({ data: next, status: 'complete' }); } else { - refetch(); + refetch(next); } } }, interval); }; - refetch(); + refetch(existingResult); }); }; diff --git a/hooks/useCrossMarginKeeperEthBal.ts b/hooks/useCrossMarginKeeperEthBal.ts deleted file mode 100644 index 50ca324afe..0000000000 --- a/hooks/useCrossMarginKeeperEthBal.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { wei } from '@synthetixio/wei'; -import { useCallback, useEffect, useState } from 'react'; -import { useRecoilValue } from 'recoil'; - -import Connector from 'containers/Connector'; -import { futuresAccountState } from 'store/futures'; -import { zeroBN } from 'utils/formatters/number'; - -export default function useCrossMarginKeeperEthBal() { - const { provider } = Connector.useContainer(); - - const { crossMarginAddress } = useRecoilValue(futuresAccountState); - - const [keeperEthBal, setKeeperEthBal] = useState(zeroBN); - - const getKeeperEthBal = useCallback(async () => { - if (!crossMarginAddress) return zeroBN; - const bal = await provider.getBalance(crossMarginAddress); - setKeeperEthBal(wei(bal)); - }, [crossMarginAddress, provider]); - - useEffect(() => { - getKeeperEthBal(); - }, [getKeeperEthBal]); - - return { keeperEthBal, getKeeperEthBal }; -} diff --git a/hooks/useCurrencyPrice.test.tsx b/hooks/useCurrencyPrice.test.tsx index d11143f3e8..6b86fc1a0e 100644 --- a/hooks/useCurrencyPrice.test.tsx +++ b/hooks/useCurrencyPrice.test.tsx @@ -1,7 +1,8 @@ import useSynthetixQueries from '@synthetixio/queries'; import { wei } from '@synthetixio/wei'; import { renderHook } from '@testing-library/react-hooks'; -import ContextProvider from 'test-utils/ContextProvider'; + +import ContextProvider from 'testing/unit/__mocks__/MockProviders'; import useCurrencyPrice from './useCurrencyPrice'; diff --git a/hooks/useENS.ts b/hooks/useENS.ts index 6cdc85e7a1..cc20dfdd6e 100644 --- a/hooks/useENS.ts +++ b/hooks/useENS.ts @@ -1,8 +1,12 @@ +import { isAddress } from 'ethers/lib/utils'; import { useEffect, useState } from 'react'; import Connector from 'containers/Connector'; -const useENS = (address?: string): { ensName: string | null; ensAvatar: string | null } => { +type ENSAccount = { ensAddress: string | null; ensName: string | null; ensAvatar: string | null }; + +const useENS = (addressOrName: string): ENSAccount => { + const [ensAddress, setENSAddress] = useState(null); const [ensName, setENSName] = useState(null); const [ensAvatar, setENSAvatar] = useState(null); const { staticMainnetProvider } = Connector.useContainer(); @@ -11,24 +15,31 @@ const useENS = (address?: string): { ensName: string | null; ensAvatar: string | let mounted = true; (async () => { - if (address) { - const name = await staticMainnetProvider.lookupAddress(address); - if (name && mounted) { - const avatar = await staticMainnetProvider.getAvatar(name); - setENSAvatar(avatar); - setENSName(name); - } + let newEnsName = null; + if (isAddress(addressOrName)) { + setENSAddress(addressOrName); + newEnsName = await staticMainnetProvider.lookupAddress(addressOrName); + setENSName(newEnsName); + } else if (addressOrName.endsWith('.eth')) { + newEnsName = await staticMainnetProvider.resolveName(addressOrName); + setENSAddress(newEnsName); + setENSName(addressOrName); + } + + if (newEnsName && mounted) { + setENSAvatar(await staticMainnetProvider.getAvatar(newEnsName)); } })(); return () => { mounted = false; + setENSAddress(null); setENSAvatar(null); setENSName(null); }; - }, [address, staticMainnetProvider]); + }, [addressOrName, staticMainnetProvider]); - return { ensName, ensAvatar }; + return { ensAddress, ensName, ensAvatar }; }; export default useENS; diff --git a/hooks/useENSs.ts b/hooks/useENSs.ts index f3fc269340..f0a2c16fcf 100644 --- a/hooks/useENSs.ts +++ b/hooks/useENSs.ts @@ -6,8 +6,6 @@ import QUERY_KEYS from 'constants/queryKeys'; import Connector from 'containers/Connector'; import reverseRecordsAbi from 'lib/abis/ReverseRecords.json'; -import useIsL2 from './useIsL2'; - const ADDRESSES_PER_LOOKUP = 1500; type EnsInfo = { @@ -15,8 +13,6 @@ type EnsInfo = { }; const useENSs = (addresses: string[], options?: UseQueryOptions) => { - const isL2 = useIsL2(); - const { staticMainnetProvider } = Connector.useContainer(); return useQuery( @@ -48,7 +44,7 @@ const useENSs = (addresses: string[], options?: UseQueryOptions) => return ensInfo; }, { - enabled: isL2 && addresses.length > 0, + enabled: addresses.length > 0, ...options, } ); diff --git a/hooks/useFuturesData.ts b/hooks/useFuturesData.ts index 873559926e..91f86588d9 100644 --- a/hooks/useFuturesData.ts +++ b/hooks/useFuturesData.ts @@ -8,7 +8,11 @@ import { useState, useEffect, useMemo, useCallback } from 'react'; import { useTranslation } from 'react-i18next'; import { useRecoilState, useRecoilValue, useSetRecoilState } from 'recoil'; -import { DEFAULT_LEVERAGE } from 'constants/defaults'; +import { + CROSS_MARGIN_ENABLED, + DEFAULT_FUTURES_MARGIN_TYPE, + DEFAULT_LEVERAGE, +} from 'constants/defaults'; import { CROSS_MARGIN_ORDER_TYPES, ISOLATED_MARGIN_ORDER_TYPES, @@ -17,9 +21,13 @@ import { import Connector from 'containers/Connector'; import TransactionNotifier from 'containers/TransactionNotifier'; import { useRefetchContext } from 'contexts/RefetchContext'; -import { KWENTA_TRACKING_CODE } from 'queries/futures/constants'; -import { PositionSide, TradeFees, FuturesTradeInputs } from 'queries/futures/types'; -import useGetCrossMarginAccountOverview from 'queries/futures/useGetCrossMarginAccountOverview'; +import { KWENTA_TRACKING_CODE, ORDER_PREVIEW_ERRORS } from 'queries/futures/constants'; +import { + PositionSide, + TradeFees, + FuturesTradeInputs, + FuturesAccountType, +} from 'queries/futures/types'; import useGetFuturesPotentialTradeDetails from 'queries/futures/useGetFuturesPotentialTradeDetails'; import { getFuturesMarketContract } from 'queries/futures/utils'; import { @@ -38,21 +46,20 @@ import { futuresAccountTypeState, preferredLeverageState, simulatedTradeState, - crossMarginTotalMarginState, potentialTradeDetailsState, futuresOrderPriceState, orderFeeCapState, isAdvancedOrderState, + aboveMaxLeverageState, + crossMarginAccountOverviewState, } from 'store/futures'; import { zeroBN, floorNumber, weiToString } from 'utils/formatters/number'; -import { getDisplayAsset } from 'utils/futures'; +import { getDisplayAsset, MarketKeyByAsset } from 'utils/futures'; import logError from 'utils/logError'; import useCrossMarginAccountContracts from './useCrossMarginContracts'; import usePersistedRecoilState from './usePersistedRecoilState'; -const DEFAULT_MAX_LEVERAGE = wei(10); - const ZERO_TRADE_INPUTS = { nativeSize: '', susdSize: '', @@ -77,10 +84,10 @@ const useFuturesData = () => { const { useSynthetixTxn } = useSynthetixQueries(); const getPotentialTrade = useGetFuturesPotentialTradeDetails(); - const crossMarginAccountOverview = useGetCrossMarginAccountOverview(); + const crossMarginAccountOverview = useRecoilValue(crossMarginAccountOverviewState); const { crossMarginAccountContract } = useCrossMarginAccountContracts(); const { monitorTransaction } = TransactionNotifier.useContainer(); - const { handleRefetch } = useRefetchContext(); + const { handleRefetch, refetchUntilUpdate } = useRefetchContext(); const marketAsset = useRecoilValue(currentMarketState); const [tradeInputs, setTradeInputs] = useRecoilState(futuresTradeInputsState); @@ -95,7 +102,7 @@ const useFuturesData = () => { const feeCap = useRecoilValue(orderFeeCapState); const position = useRecoilValue(positionState); const market = useRecoilValue(marketInfoState); - const totalMargin = useRecoilValue(crossMarginTotalMarginState); + const aboveMaxLeverage = useRecoilValue(aboveMaxLeverageState); const maxLeverage = useRecoilValue(maxLeverageState); const { crossMarginAvailable, crossMarginAddress } = useRecoilValue(futuresAccountState); const { tradeFee: crossMarginTradeFee, stopOrderFee, limitOrderFee } = useRecoilValue( @@ -105,7 +112,7 @@ const useFuturesData = () => { const marketAssetRate = useRecoilValue(marketAssetRateState); const orderPrice = useRecoilValue(futuresOrderPriceState); const setPotentialTradeDetails = useSetRecoilState(potentialTradeDetailsState); - const selectedAccountType = useRecoilValue(futuresAccountTypeState); + const [selectedAccountType, setSelectedAccountType] = useRecoilState(futuresAccountTypeState); const [preferredLeverage] = usePersistedRecoilState(preferredLeverageState); const [maxFee, setMaxFee] = useState(zeroBN); @@ -118,19 +125,14 @@ const useFuturesData = () => { ]); const crossMarginAccount = useMemo(() => { - return crossMarginAvailable - ? { freeMargin: crossMarginAccountOverview.data?.freeMargin } - : null; - }, [crossMarginAccountOverview.data?.freeMargin, crossMarginAvailable]); - - const marketMaxLeverage = useMemo(() => { - return market?.maxLeverage ?? DEFAULT_MAX_LEVERAGE; - }, [market?.maxLeverage]); + return crossMarginAvailable ? { freeMargin: crossMarginAccountOverview.freeMargin } : null; + }, [crossMarginAccountOverview.freeMargin, crossMarginAvailable]); const selectedLeverage = useMemo(() => { const effectiveLeverage = position?.position?.leverage.toString() || ''; - return effectiveLeverage || preferredLeverage[marketAsset] || DEFAULT_LEVERAGE; - }, [position?.position?.leverage, preferredLeverage, marketAsset]); + const leverage = effectiveLeverage || preferredLeverage[marketAsset] || DEFAULT_LEVERAGE; + return String(Math.min(maxLeverage.toNumber(), Number(leverage))); + }, [position?.position?.leverage, preferredLeverage, marketAsset, maxLeverage]); const remainingMargin: Wei = useMemo(() => { if (selectedAccountType === 'isolated_margin') { @@ -141,28 +143,29 @@ const useFuturesData = () => { return positionMargin.add(accountMargin); }, [position?.remainingMargin, crossMarginAccount?.freeMargin, selectedAccountType]); - const resetTradeState = useCallback(() => { - setSimulatedTrade(ZERO_TRADE_INPUTS); - setTradeInputs(ZERO_TRADE_INPUTS); + const clearTradePreview = useCallback(() => { setPotentialTradeDetails({ data: null, status: 'idle', error: null, }); setTradeFees(ZERO_FEES); + }, [setPotentialTradeDetails, setTradeFees]); + + const resetTradeState = useCallback(() => { + setSimulatedTrade(ZERO_TRADE_INPUTS); + setTradeInputs(ZERO_TRADE_INPUTS); setCrossMarginMarginDelta(zeroBN); - }, [ - setSimulatedTrade, - setPotentialTradeDetails, - setCrossMarginMarginDelta, - setTradeFees, - setTradeInputs, - ]); + clearTradePreview(); + }, [setSimulatedTrade, setTradeInputs, clearTradePreview, setCrossMarginMarginDelta]); const maxUsdInputAmount = useMemo(() => { if (selectedAccountType === 'isolated_margin') { return maxLeverage.mul(remainingMargin); } + if (aboveMaxLeverage && position?.position?.side === leverageSide) { + return zeroBN; + } const currentValue = position?.position?.notionalValue || zeroBN; let maxUsd = remainingMargin.mul(selectedLeverage); maxUsd = leverageSide === 'long' ? maxUsd.sub(currentValue) : maxUsd.add(currentValue); @@ -175,11 +178,13 @@ const useFuturesData = () => { selectedLeverage, maxLeverage, maxFee, + aboveMaxLeverage, remainingMargin, leverageSide, selectedAccountType, crossMarginTradeFee, position?.position?.notionalValue, + position?.position?.side, ]); const getTradeFee = useCallback( @@ -199,7 +204,7 @@ const useFuturesData = () => { const calculateCrossMarginFee = useCallback( (susdSizeDelta: Wei) => { - if (orderType !== 'limit' && orderType !== 'stop') return zeroBN; + if (orderType !== 'limit' && orderType !== 'stop market') return zeroBN; const advancedOrderFeeRate = orderType === 'limit' ? limitOrderFee : stopOrderFee; return susdSizeDelta.abs().mul(advancedOrderFeeRate); }, @@ -219,7 +224,9 @@ const useFuturesData = () => { ]); const currentDeposit = - orderType === 'limit' || orderType === 'market' ? await getCrossMarginEthBal() : zeroBN; + orderType === 'limit' || orderType === 'stop market' + ? await getCrossMarginEthBal() + : zeroBN; const requiredDeposit = currentDeposit.lt(ORDER_KEEPER_ETH_DEPOSIT) ? ORDER_KEEPER_ETH_DEPOSIT.sub(currentDeposit) : zeroBN; @@ -264,24 +271,15 @@ const useFuturesData = () => { const fullMargin = newNotionalValue.abs().div(nextTrade.leverage); let marginDelta = fullMargin.sub(position?.remainingMargin || '0').add(fees.total); - return crossMarginAccount?.freeMargin?.sub(marginDelta).lt(0) - ? crossMarginAccount?.freeMargin - : marginDelta; + return marginDelta; }, - [ - position?.position?.notionalValue, - position?.position?.size, - position?.remainingMargin, - crossMarginAccount?.freeMargin, - ] + [position?.position?.notionalValue, position?.position?.size, position?.remainingMargin] ); // eslint-disable-next-line const debounceFetchPreview = useCallback( debounce(async (nextTrade: FuturesTradeInputs, fromLeverage = false) => { setError(null); - // if (((orderType === 'stop' || orderType === 'limit') && !orderPrice) || !nextTrade.nativeSize) - // return; try { const fees = await calculateFees(nextTrade.susdSizeDelta, nextTrade.nativeSizeDelta); let nextMarginDelta = zeroBN; @@ -299,7 +297,12 @@ const useFuturesData = () => { nextTrade.orderPrice ); } catch (err) { - setError(t('futures.market.trade.preview.error')); + if (Object.values(ORDER_PREVIEW_ERRORS).includes(err.message)) { + setError(err.message); + } else { + setError(t('futures.market.trade.preview.error')); + } + clearTradePreview(); logError(err); } }, 500), @@ -347,7 +350,7 @@ const useFuturesData = () => { ? options?.crossMarginLeverage ?? wei(selectedLeverage) : isolatedMarginLeverage; let leverage = remainingMargin.eq(0) ? zeroBN : inputLeverage; - leverage = marketMaxLeverage.gt(leverage) ? leverage : marketMaxLeverage; + leverage = maxLeverage.gt(leverage) ? leverage : maxLeverage; const newTradeInputs = { nativeSize: changeEnabled ? weiToString(nativeSize) : '', @@ -368,7 +371,7 @@ const useFuturesData = () => { [ tradePrice, remainingMargin, - marketMaxLeverage, + maxLeverage, selectedLeverage, selectedAccountType, leverageSide, @@ -380,39 +383,18 @@ const useFuturesData = () => { const onChangeOpenPosLeverage = useCallback( async (leverage: number) => { - const notionalValue = position?.position?.notionalValue || zeroBN; - const adjustedMargin = notionalValue.abs().div(leverage); - const newMargin = adjustedMargin.gt(totalMargin) ? totalMargin : adjustedMargin; - - let newUsdSize = newMargin.mul(leverage); - newUsdSize = position?.position?.side === 'long' ? newUsdSize : newUsdSize.neg(); - const usdSizeDelta = newUsdSize.sub(notionalValue); - const nativeSizeDelta = usdSizeDelta.div(marketAssetRate); - const fees = await calculateFees(usdSizeDelta.abs(), nativeSizeDelta); - - // TODO: Make this size calc accurate - - const adjustedSusdDelta = usdSizeDelta.add(fees.total.mul(leverage)).mul(1.03); - const adjustedNativeDelta = adjustedSusdDelta.div(marketAssetRate); debounceFetchPreview( { leverage: String(leverage), - nativeSize: adjustedNativeDelta.abs().toString(), - susdSize: adjustedSusdDelta.abs().toString(), - susdSizeDelta: adjustedSusdDelta, - nativeSizeDelta: adjustedNativeDelta, + nativeSize: '0', + susdSize: '0', + susdSizeDelta: zeroBN, + nativeSizeDelta: zeroBN, }, true ); }, - [ - totalMargin, - marketAssetRate, - calculateFees, - position?.position?.notionalValue, - position?.position?.side, - debounceFetchPreview, - ] + [debounceFetchPreview] ); const onLeverageChange = useCallback( @@ -460,7 +442,7 @@ const useFuturesData = () => { const orderTxn = useSynthetixTxn( `FuturesMarket${getDisplayAsset(marketAsset)}`, - orderType === 'next-price' ? 'submitNextPriceOrderWithTracking' : 'modifyPositionWithTracking', + orderType === 'next price' ? 'submitNextPriceOrderWithTracking' : 'modifyPositionWithTracking', [tradeInputs.nativeSizeDelta.toBN(), KWENTA_TRACKING_CODE], {}, { @@ -480,7 +462,7 @@ const useFuturesData = () => { if (orderType === 'market' || fromEditLeverage) { const newPosition = [ { - marketKey: formatBytes32String(marketAsset), + marketKey: formatBytes32String(MarketKeyByAsset[marketAsset]), marginDelta: crossMarginMarginDelta.toBN(), sizeDelta: tradeInputs.nativeSizeDelta.toBN(), }, @@ -490,7 +472,7 @@ const useFuturesData = () => { const enumType = orderType === 'limit' ? 0 : 1; return await crossMarginAccountContract.placeOrderWithFeeCap( - formatBytes32String(marketAsset), + formatBytes32String(MarketKeyByAsset[marketAsset]), crossMarginMarginDelta.toBN(), tradeInputs.nativeSizeDelta.toBN(), wei(orderPrice).toBN(), @@ -522,6 +504,7 @@ const useFuturesData = () => { onTxConfirmed: () => { resetTradeState(); handleRefetch('modify-position'); + refetchUntilUpdate('account-margin-change'); }, }); } @@ -592,6 +575,22 @@ const useFuturesData = () => { // eslint-disable-next-line react-hooks/exhaustive-deps }, [crossMarginAddress]); + useEffect(() => { + if (!CROSS_MARGIN_ENABLED) { + setSelectedAccountType(DEFAULT_FUTURES_MARGIN_TYPE); + return; + } + const routerType = + typeof router.query.accountType === 'string' + ? (router.query.accountType as FuturesAccountType) + : DEFAULT_FUTURES_MARGIN_TYPE; + const accountType = ['cross_margin', 'isolated_margin'].includes(routerType) + ? routerType + : DEFAULT_FUTURES_MARGIN_TYPE; + setSelectedAccountType(accountType); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [router.query.accountType]); + return { onLeverageChange, onTradeAmountChange, diff --git a/jest.config.js b/jest.config.js index e13f253955..9fb8226eaa 100644 --- a/jest.config.js +++ b/jest.config.js @@ -6,9 +6,20 @@ const customJestConfig = { roots: [''], modulePaths: [''], moduleDirectories: ['node_modules'], - globalSetup: './test-setup/global.js', - setupFilesAfterEnv: ['./test-setup/setup.js'], + globalSetup: './testing/unit/setup/global.js', + setupFilesAfterEnv: ['./testing/unit/setup/setup.js'], testEnvironment: 'jest-environment-jsdom', + transform: { + '^.+\\.(svg)$': `jest-transformer-svg`, + }, }; -module.exports = createJestConfig(customJestConfig); +const getCustomConfig = async () => { + // Delete next js module name mapper transform and use above svg + // transformer to avoid errors with svg and styled components + const config = await createJestConfig(customJestConfig)(); + delete config['moduleNameMapper']['^.+\\.(svg)$']; + return config; +}; + +module.exports = getCustomConfig(); diff --git a/package-lock.json b/package-lock.json index 624097d81a..2b61a6958d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "kwenta", - "version": "3.2.5", + "version": "4.0.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "kwenta", - "version": "3.2.5", + "version": "4.0.0", "hasInstallScript": true, "dependencies": { "@artsy/fresnel": "1.7.0", @@ -28,6 +28,7 @@ "bignumber.js": "9.0.0", "codegen-graph-ts": "^0.1.4", "cors": "^2.8.5", + "css-mediaquery": "^0.1.2", "date-fns": "2.21.3", "date-fns-tz": "1.1.4", "ethcall": "4.7.2", @@ -93,11 +94,11 @@ "@types/react-slick": "0.23.10", "@types/react-table": "7.0.22", "@types/styled-components": "5.1.2", - "@typescript-eslint/eslint-plugin": "4.33.0", - "@typescript-eslint/parser": "4.33.0", + "@typescript-eslint/eslint-plugin": "5.40.1", + "@typescript-eslint/parser": "5.40.1", "babel-eslint": "10.1.0", "eslint": "7.32.0", - "eslint-config-prettier": "6.10.1", + "eslint-config-prettier": "8.5.0", "eslint-config-react-app": "6.0.0", "eslint-plugin-chai-friendly": "^0.7.2", "eslint-plugin-cypress": "^2.12.1", @@ -111,8 +112,11 @@ "eslint-plugin-ui-testing": "^2.0.0", "html-to-image": "^1.9.0", "husky": "8.0.1", - "jest": "27.3.1", + "jest": "28.1.0", + "jest-environment-jsdom": "28.1.0", + "jest-transformer-svg": "^2.0.0", "lint-staged": "^13.0.3", + "next-router-mock": "^0.7.4", "pinst": "3.0.0", "prettier": "2.0.5", "react-test-renderer": "17.0.1", @@ -172,29 +176,29 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.0.tgz", - "integrity": "sha512-y5rqgTTPTmaF5e2nVhOxw+Ur9HDJLsWb6U/KpgUzRZEdPfE6VOubXBKLdbcUTijzRptednSBDQbYZBOSqJxpJw==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.4.tgz", + "integrity": "sha512-CHIGpJcUQ5lU9KrPHTjBMhVwQG6CQjxfg36fGXl3qk/Gik1WwWachaXFuo0uCWJT/mStOKtcbFJCaVLihC1CMw==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.0.tgz", - "integrity": "sha512-reM4+U7B9ss148rh2n1Qs9ASS+w94irYXga7c2jaQv9RVzpS7Mv1a9rnYYwuDa45G+DkORt9g6An2k/V4d9LbQ==", + "version": "7.19.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.3.tgz", + "integrity": "sha512-WneDJxdsjEvyKtXKsaBGbDeiyOjR5vYq4HcShxnIbG0qixpoHjI3MqeZM9NDvsojNCEBItQE4juOo/bU6e72gQ==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.19.0", - "@babel/helper-compilation-targets": "^7.19.0", + "@babel/generator": "^7.19.3", + "@babel/helper-compilation-targets": "^7.19.3", "@babel/helper-module-transforms": "^7.19.0", "@babel/helpers": "^7.19.0", - "@babel/parser": "^7.19.0", + "@babel/parser": "^7.19.3", "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.0", - "@babel/types": "^7.19.0", + "@babel/traverse": "^7.19.3", + "@babel/types": "^7.19.3", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -210,11 +214,11 @@ } }, "node_modules/@babel/generator": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.0.tgz", - "integrity": "sha512-S1ahxf1gZ2dpoiFgA+ohK9DIpz50bJ0CWs7Zlzb54Z4sG8qmdIrGrVqmy1sAtTVRb+9CU6U8VqT9L0Zj7hxHVg==", + "version": "7.19.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.5.tgz", + "integrity": "sha512-DxbNz9Lz4aMZ99qPpO1raTbcrI1ZeYh+9NR9qhfkQIbFtVEqotHojEBxHzmxhVONkGt6VyrqVQcgpefMy9pqcg==", "dependencies": { - "@babel/types": "^7.19.0", + "@babel/types": "^7.19.4", "@jridgewell/gen-mapping": "^0.3.2", "jsesc": "^2.5.1" }, @@ -247,13 +251,13 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.0.tgz", - "integrity": "sha512-Ai5bNWXIvwDvWM7njqsG3feMlL9hCVQsPYXodsZyLwshYkZVJt59Gftau4VrE8S9IT9asd2uSP1hG6wCNw+sXA==", + "version": "7.19.3", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.3.tgz", + "integrity": "sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg==", "dependencies": { - "@babel/compat-data": "^7.19.0", + "@babel/compat-data": "^7.19.3", "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.20.2", + "browserslist": "^4.21.3", "semver": "^6.3.0" }, "engines": { @@ -301,9 +305,9 @@ } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.2.tgz", - "integrity": "sha512-r9QJJ+uDWrd+94BSPcP6/de67ygLtvVy6cK4luE6MOuDsZIdoaPBnfSpbO/+LTifjPckbKXRuI9BB/Z2/y3iTg==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", + "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", "dependencies": { "@babel/helper-compilation-targets": "^7.17.7", "@babel/helper-plugin-utils": "^7.16.7", @@ -440,28 +444,28 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.9.tgz", - "integrity": "sha512-dNsWibVI4lNT6HiuOIBr1oyxo40HvIVmbwPUm3XZ7wMh4k2WxrxTqZwSqw/eEmXDS9np0ey5M2bz9tBmO9c+YQ==", + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz", + "integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==", "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-member-expression-to-functions": "^7.18.9", "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9" + "@babel/traverse": "^7.19.1", + "@babel/types": "^7.19.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-simple-access": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", - "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.19.4.tgz", + "integrity": "sha512-f9Xq6WqBFqaDfbCzn2w85hwklswz5qsKlh7f08w4Y9yhJHpnNC0QemtSkK5YyOY8kPGvyiwdzZksGUhnGdaUIg==", "dev": true, "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.19.4" }, "engines": { "node": ">=6.9.0" @@ -491,17 +495,17 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz", - "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", - "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", "engines": { "node": ">=6.9.0" } @@ -530,14 +534,14 @@ } }, "node_modules/@babel/helpers": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.0.tgz", - "integrity": "sha512-DRBCKGwIEdqY3+rPJgG/dKfQy9+08rHIAJx8q2p+HSWP87s2HCrQmaAMMyMll2kIXKCW0cO1RdQskx15Xakftg==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.4.tgz", + "integrity": "sha512-G+z3aOx2nfDHwX/kyVii5fJq+bgscg89/dJNWpYeKeBv3v9xX8EIabmx1k6u9LS04H7nROFVRVK+e3k0VHp+sw==", "dev": true, "dependencies": { "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.0", - "@babel/types": "^7.19.0" + "@babel/traverse": "^7.19.4", + "@babel/types": "^7.19.4" }, "engines": { "node": ">=6.9.0" @@ -557,9 +561,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.0.tgz", - "integrity": "sha512-74bEXKX2h+8rrfQUfsBfuZZHzsEs6Eql4pqy/T4Nn6Y9wNPggQOqD6z6pn5Bl8ZfysKouFZT/UXEH94ummEeQw==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.4.tgz", + "integrity": "sha512-qpVT7gtuOLjWeDTKLkJ6sryqLliBaFpAtGeqw5cs5giLldvh+Ch0plqnUMKoVAUS6ZEueQQiZV+p5pxtPitEsA==", "bin": { "parser": "bin/babel-parser.js" }, @@ -600,9 +604,9 @@ } }, "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.19.0.tgz", - "integrity": "sha512-nhEByMUTx3uZueJ/QkJuSlCfN4FGg+xy+vRsfGQGzSauq5ks2Deid2+05Q3KhfaUjvec1IGhw/Zm3cFm8JigTQ==", + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.19.1.tgz", + "integrity": "sha512-0yu8vNATgLy4ivqMNBIwb1HebCelqN7YX8SL3FDXORv/RqT0zEEWUCH4GH44JsSrvCu6GqnAdR5EBFAPeNBB4Q==", "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", @@ -651,14 +655,14 @@ } }, "node_modules/@babel/plugin-proposal-decorators": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.19.0.tgz", - "integrity": "sha512-Bo5nOSjiJccjv00+BrDkmfeBLBi2B0qe8ygj24KdL8VdwtZz+710NCwehF+x/Ng+0mkHx5za2eAofmvVFLF4Fg==", + "version": "7.19.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.19.3.tgz", + "integrity": "sha512-MbgXtNXqo7RTKYIXVchVJGPvaVufQH3pxvQyfbGvNw1DObIhph+PesYXJTcd8J4DdWibvf6Z2eanOyItX8WnJg==", "dev": true, "dependencies": { "@babel/helper-create-class-features-plugin": "^7.19.0", "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-replace-supers": "^7.18.9", + "@babel/helper-replace-supers": "^7.19.1", "@babel/helper-split-export-declaration": "^7.18.6", "@babel/plugin-syntax-decorators": "^7.19.0" }, @@ -782,14 +786,14 @@ } }, "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.9.tgz", - "integrity": "sha512-kDDHQ5rflIeY5xl69CEqGEZ0KY369ehsCIEbTGb4siHG5BE9sga/T0r0OUwyZNLMmZE79E1kbsqAjwFCW4ds6Q==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.19.4.tgz", + "integrity": "sha512-wHmj6LDxVDnL+3WhXteUBaoM1aVILZODAUjg11kHqG4cOlfgMQGxw6aCgvrXrmaJR3Bn14oZhImyCPZzRpC93Q==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.18.8", - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9", + "@babel/compat-data": "^7.19.4", + "@babel/helper-compilation-targets": "^7.19.3", + "@babel/helper-plugin-utils": "^7.19.0", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-transform-parameters": "^7.18.8" }, @@ -1221,12 +1225,12 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.9.tgz", - "integrity": "sha512-5sDIJRV1KtQVEbt/EIBwGy4T01uYIo4KRB3VUqzkhrAIOGx7AoctL9+Ux88btY0zXdDyPJ9mW+bg+v+XEkGmtw==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.19.4.tgz", + "integrity": "sha512-934S2VLLlt2hRJwPf4MczaOr4hYF0z+VKPwqTNxyKX7NthTiPfhuKFWQZHXRM0vh/wo/VyXB3s4bZUNA08l+tQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.19.0" }, "engines": { "node": ">=6.9.0" @@ -1274,12 +1278,12 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.18.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.13.tgz", - "integrity": "sha512-TodpQ29XekIsex2A+YJPj5ax2plkGa8YYY6mFjCohk/IG9IY42Rtuj1FuDeemfg2ipxIFLzPeA83SIBnlhSIow==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.19.4.tgz", + "integrity": "sha512-t0j0Hgidqf0aM86dF8U+vXYReUgJnlv4bZLsyoPnwZNrGY+7/38o8YjaELrvHeVfTZao15kjR0PVv0nju2iduA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.19.0" }, "engines": { "node": ">=6.9.0" @@ -1484,9 +1488,9 @@ } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.0.tgz", - "integrity": "sha512-HDSuqOQzkU//kfGdiHBt71/hkDTApw4U/cMVgKgX7PqfB3LOaK+2GtCEsBu1dL9CkswDm0Gwehht1dCr421ULQ==", + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.1.tgz", + "integrity": "sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw==", "dev": true, "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.19.0", @@ -1672,15 +1676,15 @@ } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.18.10.tgz", - "integrity": "sha512-q5mMeYAdfEbpBAgzl7tBre/la3LeCxmDO1+wMXRdPWbcoMjR3GiXlCLk7JBZVVye0bqTGNMbt0yYVXX1B1jEWQ==", + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.1.tgz", + "integrity": "sha512-2nJjTUFIzBMP/f/miLxEK9vxwW/KUXsdvN4sR//TmuDhe6yU2h57WmIOE12Gng3MDP/xpjUV/ToZRdcf8Yj4fA==", "dependencies": { "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.9", - "babel-plugin-polyfill-corejs2": "^0.3.2", - "babel-plugin-polyfill-corejs3": "^0.5.3", - "babel-plugin-polyfill-regenerator": "^0.4.0", + "@babel/helper-plugin-utils": "^7.19.0", + "babel-plugin-polyfill-corejs2": "^0.3.3", + "babel-plugin-polyfill-corejs3": "^0.6.0", + "babel-plugin-polyfill-regenerator": "^0.4.1", "semver": "^6.3.0" }, "engines": { @@ -1767,9 +1771,9 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.19.0.tgz", - "integrity": "sha512-DOOIywxPpkQHXijXv+s9MDAyZcLp12oYRl3CMWZ6u7TjSoCBq/KqHR/nNFR3+i2xqheZxoF0H2XyL7B6xeSRuA==", + "version": "7.19.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.19.3.tgz", + "integrity": "sha512-z6fnuK9ve9u/0X0rRvI9MY0xg+DOUaABDYOe+/SQTxtlptaBB/V9JIUxJn6xp3lMBeb9qe8xSFmHU35oZDXD+w==", "dev": true, "dependencies": { "@babel/helper-create-class-features-plugin": "^7.19.0", @@ -1815,18 +1819,18 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.19.0.tgz", - "integrity": "sha512-1YUju1TAFuzjIQqNM9WsF4U6VbD/8t3wEAlw3LFYuuEr+ywqLRcSXxFKz4DCEj+sN94l/XTDiUXYRrsvMpz9WQ==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.19.4.tgz", + "integrity": "sha512-5QVOTXUdqTCjQuh2GGtdd7YEhoRXBMVGROAtsBeLGIbIz3obCBIfRMT1I3ZKkMgNzwkyCkftDXSSkHxnfVf4qg==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.19.0", - "@babel/helper-compilation-targets": "^7.19.0", + "@babel/compat-data": "^7.19.4", + "@babel/helper-compilation-targets": "^7.19.3", "@babel/helper-plugin-utils": "^7.19.0", "@babel/helper-validator-option": "^7.18.6", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-async-generator-functions": "^7.19.0", + "@babel/plugin-proposal-async-generator-functions": "^7.19.1", "@babel/plugin-proposal-class-properties": "^7.18.6", "@babel/plugin-proposal-class-static-block": "^7.18.6", "@babel/plugin-proposal-dynamic-import": "^7.18.6", @@ -1835,7 +1839,7 @@ "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", "@babel/plugin-proposal-numeric-separator": "^7.18.6", - "@babel/plugin-proposal-object-rest-spread": "^7.18.9", + "@babel/plugin-proposal-object-rest-spread": "^7.19.4", "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", "@babel/plugin-proposal-optional-chaining": "^7.18.9", "@babel/plugin-proposal-private-methods": "^7.18.6", @@ -1859,10 +1863,10 @@ "@babel/plugin-transform-arrow-functions": "^7.18.6", "@babel/plugin-transform-async-to-generator": "^7.18.6", "@babel/plugin-transform-block-scoped-functions": "^7.18.6", - "@babel/plugin-transform-block-scoping": "^7.18.9", + "@babel/plugin-transform-block-scoping": "^7.19.4", "@babel/plugin-transform-classes": "^7.19.0", "@babel/plugin-transform-computed-properties": "^7.18.9", - "@babel/plugin-transform-destructuring": "^7.18.13", + "@babel/plugin-transform-destructuring": "^7.19.4", "@babel/plugin-transform-dotall-regex": "^7.18.6", "@babel/plugin-transform-duplicate-keys": "^7.18.9", "@babel/plugin-transform-exponentiation-operator": "^7.18.6", @@ -1874,7 +1878,7 @@ "@babel/plugin-transform-modules-commonjs": "^7.18.6", "@babel/plugin-transform-modules-systemjs": "^7.19.0", "@babel/plugin-transform-modules-umd": "^7.18.6", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1", "@babel/plugin-transform-new-target": "^7.18.6", "@babel/plugin-transform-object-super": "^7.18.6", "@babel/plugin-transform-parameters": "^7.18.8", @@ -1889,11 +1893,11 @@ "@babel/plugin-transform-unicode-escapes": "^7.18.10", "@babel/plugin-transform-unicode-regex": "^7.18.6", "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.19.0", - "babel-plugin-polyfill-corejs2": "^0.3.2", - "babel-plugin-polyfill-corejs3": "^0.5.3", - "babel-plugin-polyfill-regenerator": "^0.4.0", - "core-js-compat": "^3.22.1", + "@babel/types": "^7.19.4", + "babel-plugin-polyfill-corejs2": "^0.3.3", + "babel-plugin-polyfill-corejs3": "^0.6.0", + "babel-plugin-polyfill-regenerator": "^0.4.1", + "core-js-compat": "^3.25.1", "semver": "^6.3.0" }, "engines": { @@ -1993,9 +1997,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.19.0.tgz", - "integrity": "sha512-eR8Lo9hnDS7tqkO7NsV+mKvCmv5boaXFSZ70DnfhcgiEne8hv9oCEd36Klw74EtizEqLsy4YnW8UWwpBVolHZA==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.19.4.tgz", + "integrity": "sha512-EXpLCrk55f+cYqmHsSR+yD/0gAIMxxA9QK9lnQWzhMCvt+YmoBN7Zx94s++Kv0+unHk39vxNO8t+CMA2WSS3wA==", "dependencies": { "regenerator-runtime": "^0.13.4" }, @@ -2004,12 +2008,12 @@ } }, "node_modules/@babel/runtime-corejs3": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.19.0.tgz", - "integrity": "sha512-JyXXoCu1N8GLuKc2ii8y5RGma5FMpFeO2nAQIe0Yzrbq+rQnN+sFj47auLblR5ka6aHNGPDgv8G/iI2Grb0ldQ==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.19.4.tgz", + "integrity": "sha512-HzjQ8+dzdx7dmZy4DQ8KV8aHi/74AjEbBGTFutBmg/pd3dY5/q1sfuOGPTFGEytlQhWoeVXqcK5BwMgIkRkNDQ==", "dev": true, "dependencies": { - "core-js-pure": "^3.20.2", + "core-js-pure": "^3.25.1", "regenerator-runtime": "^0.13.4" }, "engines": { @@ -2030,18 +2034,18 @@ } }, "node_modules/@babel/traverse": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.0.tgz", - "integrity": "sha512-4pKpFRDh+utd2mbRC8JLnlsMUii3PMHjpL6a0SZ4NMZy7YFP9aXORxEhdMVOc9CpWtDF09IkciQLEhK7Ml7gRA==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.4.tgz", + "integrity": "sha512-w3K1i+V5u2aJUOXBFFC5pveFLmtq1s3qcdDNC2qRI6WPBQIDaKFqXxDEqDO/h1dQ3HjsZoZMyIy6jGLq0xtw+g==", "dependencies": { "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.19.0", + "@babel/generator": "^7.19.4", "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-function-name": "^7.19.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.19.0", - "@babel/types": "^7.19.0", + "@babel/parser": "^7.19.4", + "@babel/types": "^7.19.4", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -2050,12 +2054,12 @@ } }, "node_modules/@babel/types": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.0.tgz", - "integrity": "sha512-YuGopBq3ke25BVSiS6fgF49Ul9gH1x70Bcr6bqRLjWCkcX8Hre1/5+z+IiWOIerRMSSEfGZVB9z9kyq7wVs9YA==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.4.tgz", + "integrity": "sha512-M5LK7nAeS6+9j7hAq+b3fQs+pNfUtTGq+yFFfHnauFA8zQtLRfmuipmsKDKKLuyG+wC8ABW43A153YNawNTEtw==", "dependencies": { - "@babel/helper-string-parser": "^7.18.10", - "@babel/helper-validator-identifier": "^7.18.6", + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", "to-fast-properties": "^2.0.0" }, "engines": { @@ -2167,9 +2171,9 @@ } }, "node_modules/@coinbase/wallet-sdk": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@coinbase/wallet-sdk/-/wallet-sdk-3.5.2.tgz", - "integrity": "sha512-Wga/n2709w/+m/YlHviuQx8nl4gr2UkA4HM3OwFZopxvDeZerBYEjL/og7CUbSwplHDl+REIIz0jJfuedVyX5g==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/@coinbase/wallet-sdk/-/wallet-sdk-3.5.3.tgz", + "integrity": "sha512-kaGMk9KyiSLPm1+BvCQSc99ku9gn0j+M1+2Beii+4gx/lRVhutlzmn6l+5zTB/n3xri25iTr+SxjMZLlMfW8Hg==", "dependencies": { "@metamask/safe-event-emitter": "2.0.0", "@solana/web3.js": "1.52.0", @@ -2239,9 +2243,9 @@ } }, "node_modules/@coinbase/wallet-sdk/node_modules/preact": { - "version": "10.10.6", - "resolved": "https://registry.npmjs.org/preact/-/preact-10.10.6.tgz", - "integrity": "sha512-w0mCL5vICUAZrh1DuHEdOWBjxdO62lvcO++jbzr8UhhYcTbFkpegLH9XX+7MadjTl/y0feoqwQ/zAnzkc/EGog==", + "version": "10.11.1", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.11.1.tgz", + "integrity": "sha512-1Wz5PCRm6Fg+6BTXWJHhX4wRK9MZbZBHuwBqfZlOdVm2NqPe8/rjYpufvYCwJSGb9layyzB2jTTXfpCTynLqFQ==", "funding": { "type": "opencollective", "url": "https://opencollective.com/preact" @@ -2587,9 +2591,9 @@ } }, "node_modules/@cypress/webpack-dev-server/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -2754,9 +2758,9 @@ "integrity": "sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ==" }, "node_modules/@emotion/serialize/node_modules/csstype": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz", - "integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" }, "node_modules/@emotion/sheet": { "version": "1.2.0", @@ -3381,9 +3385,9 @@ ] }, "node_modules/@ethersproject/networks": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.0.tgz", - "integrity": "sha512-MG6oHSQHd4ebvJrleEQQ4HhVu8Ichr0RDYEfHzsVAVjHNM+w36x9wp9r+hf1JstMXtseXDtkiVoARAG6M959AA==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz", + "integrity": "sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==", "funding": [ { "type": "individual", @@ -3436,9 +3440,9 @@ } }, "node_modules/@ethersproject/providers": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.0.tgz", - "integrity": "sha512-+TTrrINMzZ0aXtlwO/95uhAggKm4USLm1PbeCBR/3XZ7+Oey+3pMyddzZEyRhizHpy1HXV0FRWRMI1O3EGYibA==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.1.tgz", + "integrity": "sha512-vZveG/DLyo+wk4Ga1yx6jSEHrLPgmTt+dFv0dv8URpVCRf0jVhalps1jq/emN/oXnMRsC7cQgAF32DcXLL7BPQ==", "funding": [ { "type": "individual", @@ -3675,9 +3679,9 @@ } }, "node_modules/@ethersproject/web": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.0.tgz", - "integrity": "sha512-ApHcbbj+muRASVDSCl/tgxaH2LBkRMEYfLOLVa0COipx0+nlu0QKet7U2lEg0vdkh8XRSLf2nd1f1Uk9SrVSGA==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz", + "integrity": "sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==", "funding": [ { "type": "individual", @@ -3725,9 +3729,9 @@ "dev": true }, "node_modules/@gnosis.pm/safe-apps-provider": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-apps-provider/-/safe-apps-provider-0.13.1.tgz", - "integrity": "sha512-v84Apwb5SeDuRexcvzL2fyfYS3SR9MqPSKiSyFFOWo/Tpm4zgF/Z4ZKhsBKkgktqGoc0zFUZeQPVvqyQpixM9g==", + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-apps-provider/-/safe-apps-provider-0.14.0.tgz", + "integrity": "sha512-qOkPUfIu9dLoy4Muo40xzswqix7ZoJDmtEl35D+oYYa6JDw8cr4tVkPPjl6eDPNtMLiqGjs1POzHdZrfC8aHVw==", "dependencies": { "@gnosis.pm/safe-apps-sdk": "7.8.0", "events": "^3.3.0" @@ -3743,21 +3747,21 @@ } }, "node_modules/@gnosis.pm/safe-apps-wagmi": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-apps-wagmi/-/safe-apps-wagmi-1.0.3.tgz", - "integrity": "sha512-UKzO/+7hRitjAr5uHqPXNzY1s5JV0y5aheLEpGQQlDEg42EMflo2nm+K4NV+S0mrgnTPW+/kk00sv8FuQqaFjA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-apps-wagmi/-/safe-apps-wagmi-1.0.4.tgz", + "integrity": "sha512-D0jJLhhJO6WmWl47UBmHS8PBvStLTM2mHobtUdwJHNK//4sTStrmQ2RexUhzbvbEimFfEXKJOexTN66z/slHpQ==", "dependencies": { - "@gnosis.pm/safe-apps-provider": "^0.13.0", + "@gnosis.pm/safe-apps-provider": "^0.14.0", "@gnosis.pm/safe-apps-sdk": "^7.7.0" }, "peerDependencies": { - "@wagmi/core": "^0.3.8" + "@wagmi/core": ">= 0.3.8 < 0.6.0" } }, "node_modules/@gnosis.pm/safe-react-gateway-sdk": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-react-gateway-sdk/-/safe-react-gateway-sdk-3.4.0.tgz", - "integrity": "sha512-HtxcXA3KHc3Z/b7jFG7fp9sVTPYyzfV2/8EAZN94qlP7GL2SqU+TuzAR7ZdgBzLhQGWwwvS5b8Ahxraqr1Fz1Q==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-react-gateway-sdk/-/safe-react-gateway-sdk-3.4.1.tgz", + "integrity": "sha512-b8i0BLEP9CC7S2N7hYDX3OXRYIb9asOMVW0QWh4jzsgT5xitUOPy4jrZL9kAmx8QgcMPYbD+Jjsq/R9ltzSmew==", "dependencies": { "cross-fetch": "^3.1.5" } @@ -3791,16 +3795,6 @@ "node": ">=10.10.0" } }, - "node_modules/@humanwhocodes/gitignore-to-minimatch": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", - "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", @@ -3907,42 +3901,43 @@ } }, "node_modules/@jest/console": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", - "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz", + "integrity": "sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", + "@jest/types": "^28.1.3", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", + "jest-message-util": "^28.1.3", + "jest-util": "^28.1.3", "slash": "^3.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/@jest/console/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", "dev": true, "dependencies": { + "@jest/schemas": "^28.1.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^16.0.0", + "@types/yargs": "^17.0.8", "chalk": "^4.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/@jest/console/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -4007,12 +4002,12 @@ } }, "node_modules/@jest/console/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", + "@jest/types": "^28.1.3", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -4020,7 +4015,7 @@ "picomatch": "^2.2.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/@jest/console/node_modules/supports-color": { @@ -4036,42 +4031,43 @@ } }, "node_modules/@jest/core": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", - "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-28.1.3.tgz", + "integrity": "sha512-CIKBrlaKOzA7YG19BEqCw3SLIsEwjZkeJzf5bdooVnW4bH5cktqe3JX+G2YV1aK5vP8N9na1IGWFzYaTp6k6NA==", "dev": true, "dependencies": { - "@jest/console": "^27.5.1", - "@jest/reporters": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/console": "^28.1.3", + "@jest/reporters": "^28.1.3", + "@jest/test-result": "^28.1.3", + "@jest/transform": "^28.1.3", + "@jest/types": "^28.1.3", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "emittery": "^0.8.1", + "ci-info": "^3.2.0", "exit": "^0.1.2", "graceful-fs": "^4.2.9", - "jest-changed-files": "^27.5.1", - "jest-config": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-resolve-dependencies": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "jest-watcher": "^27.5.1", + "jest-changed-files": "^28.1.3", + "jest-config": "^28.1.3", + "jest-haste-map": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-regex-util": "^28.0.2", + "jest-resolve": "^28.1.3", + "jest-resolve-dependencies": "^28.1.3", + "jest-runner": "^28.1.3", + "jest-runtime": "^28.1.3", + "jest-snapshot": "^28.1.3", + "jest-util": "^28.1.3", + "jest-validate": "^28.1.3", + "jest-watcher": "^28.1.3", "micromatch": "^4.0.4", + "pretty-format": "^28.1.3", "rimraf": "^3.0.0", "slash": "^3.0.0", "strip-ansi": "^6.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" @@ -4083,51 +4079,52 @@ } }, "node_modules/@jest/core/node_modules/@jest/transform": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", - "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-28.1.3.tgz", + "integrity": "sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA==", "dev": true, "dependencies": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.5.1", + "@babel/core": "^7.11.6", + "@jest/types": "^28.1.3", + "@jridgewell/trace-mapping": "^0.3.13", "babel-plugin-istanbul": "^6.1.1", "chalk": "^4.0.0", "convert-source-map": "^1.4.0", "fast-json-stable-stringify": "^2.0.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-util": "^27.5.1", + "jest-haste-map": "^28.1.3", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.1.3", "micromatch": "^4.0.4", "pirates": "^4.0.4", "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" + "write-file-atomic": "^4.0.1" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/@jest/core/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", "dev": true, "dependencies": { + "@jest/schemas": "^28.1.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^16.0.0", + "@types/yargs": "^17.0.8", "chalk": "^4.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/@jest/core/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -4192,68 +4189,81 @@ } }, "node_modules/@jest/core/node_modules/jest-haste-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", - "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz", + "integrity": "sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", - "@types/graceful-fs": "^4.1.2", + "@jest/types": "^28.1.3", + "@types/graceful-fs": "^4.1.3", "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.1.3", + "jest-worker": "^28.1.3", "micromatch": "^4.0.4", - "walker": "^1.0.7" + "walker": "^1.0.8" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" }, "optionalDependencies": { "fsevents": "^2.3.2" } }, "node_modules/@jest/core/node_modules/jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", "dev": true, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/@jest/core/node_modules/jest-serializer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", - "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", + "node_modules/@jest/core/node_modules/jest-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", "dev": true, "dependencies": { + "@jest/types": "^28.1.3", "@types/node": "*", - "graceful-fs": "^4.2.9" + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/@jest/core/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "node_modules/@jest/core/node_modules/pretty-format": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", + "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" + "@jest/schemas": "^28.1.3", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/core/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/@jest/core/node_modules/supports-color": { @@ -4268,41 +4278,55 @@ "node": ">=8" } }, + "node_modules/@jest/core/node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, "node_modules/@jest/environment": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", - "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.1.3.tgz", + "integrity": "sha512-1bf40cMFTEkKyEf585R9Iz1WayDjHoHqvts0XFYEqyKM3cFWDpeMoqKKTAF9LSYQModPUlh8FKptoM2YcMWAXA==", "dev": true, "dependencies": { - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/fake-timers": "^28.1.3", + "@jest/types": "^28.1.3", "@types/node": "*", - "jest-mock": "^27.5.1" + "jest-mock": "^28.1.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/@jest/environment/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", "dev": true, "dependencies": { + "@jest/schemas": "^28.1.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^16.0.0", + "@types/yargs": "^17.0.8", "chalk": "^4.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/@jest/environment/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -4378,43 +4402,69 @@ "node": ">=8" } }, + "node_modules/@jest/expect": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-28.1.3.tgz", + "integrity": "sha512-lzc8CpUbSoE4dqT0U+g1qODQjBRHPpCPXissXD4mS9+sWQdmmpeJ9zSH1rS1HEkrsMN0fb7nKrJ9giAR1d3wBw==", + "dev": true, + "dependencies": { + "expect": "^28.1.3", + "jest-snapshot": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-28.1.3.tgz", + "integrity": "sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA==", + "dev": true, + "dependencies": { + "jest-get-type": "^28.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/@jest/fake-timers": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", - "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.3.tgz", + "integrity": "sha512-D/wOkL2POHv52h+ok5Oj/1gOG9HSywdoPtFsRCUmlCILXNn5eIWmcnd3DIiWlJnpGvQtmajqBP95Ei0EimxfLw==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", - "@sinonjs/fake-timers": "^8.0.1", + "@jest/types": "^28.1.3", + "@sinonjs/fake-timers": "^9.1.2", "@types/node": "*", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" + "jest-message-util": "^28.1.3", + "jest-mock": "^28.1.3", + "jest-util": "^28.1.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/@jest/fake-timers/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", "dev": true, "dependencies": { + "@jest/schemas": "^28.1.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^16.0.0", + "@types/yargs": "^17.0.8", "chalk": "^4.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/@jest/fake-timers/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -4479,12 +4529,12 @@ } }, "node_modules/@jest/fake-timers/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", + "@jest/types": "^28.1.3", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -4492,7 +4542,7 @@ "picomatch": "^2.2.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/@jest/fake-timers/node_modules/supports-color": { @@ -4508,39 +4558,40 @@ } }, "node_modules/@jest/globals": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", - "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-28.1.3.tgz", + "integrity": "sha512-XFU4P4phyryCXu1pbcqMO0GSQcYe1IsalYCDzRNyhetyeyxMcIxa11qPNDpVNLeretItNqEmYYQn1UYz/5x1NA==", "dev": true, "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/types": "^27.5.1", - "expect": "^27.5.1" + "@jest/environment": "^28.1.3", + "@jest/expect": "^28.1.3", + "@jest/types": "^28.1.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/@jest/globals/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", "dev": true, "dependencies": { + "@jest/schemas": "^28.1.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^16.0.0", + "@types/yargs": "^17.0.8", "chalk": "^4.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/@jest/globals/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -4617,39 +4668,39 @@ } }, "node_modules/@jest/reporters": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", - "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-28.1.3.tgz", + "integrity": "sha512-JuAy7wkxQZVNU/V6g9xKzCGC5LVXx9FDcABKsSXp5MiKPEE2144a/vXTEDoyzjUpZKfVwp08Wqg5A4WfTMAzjg==", "dev": true, "dependencies": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/console": "^28.1.3", + "@jest/test-result": "^28.1.3", + "@jest/transform": "^28.1.3", + "@jest/types": "^28.1.3", + "@jridgewell/trace-mapping": "^0.3.13", "@types/node": "*", "chalk": "^4.0.0", "collect-v8-coverage": "^1.0.0", "exit": "^0.1.2", - "glob": "^7.1.2", + "glob": "^7.1.3", "graceful-fs": "^4.2.9", "istanbul-lib-coverage": "^3.0.0", "istanbul-lib-instrument": "^5.1.0", "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", "istanbul-reports": "^3.1.3", - "jest-haste-map": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", + "jest-message-util": "^28.1.3", + "jest-util": "^28.1.3", + "jest-worker": "^28.1.3", "slash": "^3.0.0", - "source-map": "^0.6.0", "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", "terminal-link": "^2.0.0", - "v8-to-istanbul": "^8.1.0" + "v8-to-istanbul": "^9.0.1" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" @@ -4661,51 +4712,52 @@ } }, "node_modules/@jest/reporters/node_modules/@jest/transform": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", - "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-28.1.3.tgz", + "integrity": "sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA==", "dev": true, "dependencies": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.5.1", + "@babel/core": "^7.11.6", + "@jest/types": "^28.1.3", + "@jridgewell/trace-mapping": "^0.3.13", "babel-plugin-istanbul": "^6.1.1", "chalk": "^4.0.0", "convert-source-map": "^1.4.0", "fast-json-stable-stringify": "^2.0.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-util": "^27.5.1", + "jest-haste-map": "^28.1.3", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.1.3", "micromatch": "^4.0.4", "pirates": "^4.0.4", "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" + "write-file-atomic": "^4.0.1" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/@jest/reporters/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", "dev": true, "dependencies": { + "@jest/schemas": "^28.1.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^16.0.0", + "@types/yargs": "^17.0.8", "chalk": "^4.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/@jest/reporters/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -4770,60 +4822,46 @@ } }, "node_modules/@jest/reporters/node_modules/jest-haste-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", - "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz", + "integrity": "sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", - "@types/graceful-fs": "^4.1.2", + "@jest/types": "^28.1.3", + "@types/graceful-fs": "^4.1.3", "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.1.3", + "jest-worker": "^28.1.3", "micromatch": "^4.0.4", - "walker": "^1.0.7" + "walker": "^1.0.8" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" }, "optionalDependencies": { "fsevents": "^2.3.2" } }, "node_modules/@jest/reporters/node_modules/jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", "dev": true, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/reporters/node_modules/jest-serializer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", - "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", - "dev": true, - "dependencies": { - "@types/node": "*", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/@jest/reporters/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", + "@jest/types": "^28.1.3", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -4831,7 +4869,7 @@ "picomatch": "^2.2.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/@jest/reporters/node_modules/supports-color": { @@ -4846,55 +4884,81 @@ "node": ">=8" } }, + "node_modules/@jest/reporters/node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@jest/schemas": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", + "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", + "dev": true, + "dependencies": { + "@sinclair/typebox": "^0.24.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/@jest/source-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", - "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", + "version": "28.1.2", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-28.1.2.tgz", + "integrity": "sha512-cV8Lx3BeStJb8ipPHnqVw/IM2VCMWO3crWZzYodSIkxXnRcXJipCdx1JCK0K5MsJJouZQTH73mzf4vgxRaH9ww==", "dev": true, "dependencies": { + "@jridgewell/trace-mapping": "^0.3.13", "callsites": "^3.0.0", - "graceful-fs": "^4.2.9", - "source-map": "^0.6.0" + "graceful-fs": "^4.2.9" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/@jest/test-result": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", - "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz", + "integrity": "sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==", "dev": true, "dependencies": { - "@jest/console": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/console": "^28.1.3", + "@jest/types": "^28.1.3", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/@jest/test-result/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", "dev": true, "dependencies": { + "@jest/schemas": "^28.1.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^16.0.0", + "@types/yargs": "^17.0.8", "chalk": "^4.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/@jest/test-result/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -4971,40 +5035,41 @@ } }, "node_modules/@jest/test-sequencer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", - "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-28.1.3.tgz", + "integrity": "sha512-NIMPEqqa59MWnDi1kvXXpYbqsfQmSJsIbnd85mdVGkiDfQ9WQQTXOLsvISUfonmnBT+w85WEgneCigEEdHDFxw==", "dev": true, "dependencies": { - "@jest/test-result": "^27.5.1", + "@jest/test-result": "^28.1.3", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-runtime": "^27.5.1" + "jest-haste-map": "^28.1.3", + "slash": "^3.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/@jest/test-sequencer/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", "dev": true, "dependencies": { + "@jest/schemas": "^28.1.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^16.0.0", + "@types/yargs": "^17.0.8", "chalk": "^4.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/@jest/test-sequencer/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -5069,60 +5134,46 @@ } }, "node_modules/@jest/test-sequencer/node_modules/jest-haste-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", - "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz", + "integrity": "sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", - "@types/graceful-fs": "^4.1.2", + "@jest/types": "^28.1.3", + "@types/graceful-fs": "^4.1.3", "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.1.3", + "jest-worker": "^28.1.3", "micromatch": "^4.0.4", - "walker": "^1.0.7" + "walker": "^1.0.8" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" }, "optionalDependencies": { "fsevents": "^2.3.2" } }, "node_modules/@jest/test-sequencer/node_modules/jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", - "dev": true, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/test-sequencer/node_modules/jest-serializer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", - "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", "dev": true, - "dependencies": { - "@types/node": "*", - "graceful-fs": "^4.2.9" - }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/@jest/test-sequencer/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", + "@jest/types": "^28.1.3", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -5130,7 +5181,7 @@ "picomatch": "^2.2.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/@jest/test-sequencer/node_modules/supports-color": { @@ -5372,12 +5423,12 @@ "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.15", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz", - "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==", + "version": "0.3.16", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.16.tgz", + "integrity": "sha512-LCQ+NeThyJ4k1W2d+vIKdxuSt9R3pQSZ4P92m7EakaYuXcVWbHuT5bjNcqLd4Rdgi6xYWYDvBJZJLZSLanjDcA==", "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" } }, "node_modules/@json-rpc-tools/provider": { @@ -5828,9 +5879,9 @@ } }, "node_modules/@microsoft/eslint-formatter-sarif/node_modules/@eslint/eslintrc": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.1.tgz", - "integrity": "sha512-OhSY22oQQdw3zgPOOwdoj01l/Dzl1Z+xyUP33tkSN+aqyEhymJCcPHyXt+ylW8FSe0TfRC2VG+ROQOapD0aZSQ==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", + "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", "dev": true, "dependencies": { "ajv": "^6.12.4", @@ -5851,9 +5902,9 @@ } }, "node_modules/@microsoft/eslint-formatter-sarif/node_modules/@humanwhocodes/config-array": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz", - "integrity": "sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw==", + "version": "0.10.7", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.7.tgz", + "integrity": "sha512-MDl6D6sBsaV452/QSdX+4CXIjZhIcI0PELsxUjk4U828yd58vk3bTIvk/6w5FY+4hIy9sLW0sfrV7K7Kc++j/w==", "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", @@ -5932,14 +5983,13 @@ "dev": true }, "node_modules/@microsoft/eslint-formatter-sarif/node_modules/eslint": { - "version": "8.23.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.23.0.tgz", - "integrity": "sha512-pBG/XOn0MsJcKcTRLr27S5HpzQo4kLr+HjLQIyK4EiCsijDl/TB+h5uEuJU6bQ8Edvwz1XWOjpaP2qgnXGpTcA==", + "version": "8.25.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.25.0.tgz", + "integrity": "sha512-DVlJOZ4Pn50zcKW5bYH7GQK/9MsoQG2d5eDH0ebEkE8PbgzTTmtt/VTH9GGJ4BfeZCpBLqFfvsjX35UacUL83A==", "dev": true, "dependencies": { - "@eslint/eslintrc": "^1.3.1", - "@humanwhocodes/config-array": "^0.10.4", - "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", + "@eslint/eslintrc": "^1.3.3", + "@humanwhocodes/config-array": "^0.10.5", "@humanwhocodes/module-importer": "^1.0.1", "ajv": "^6.10.0", "chalk": "^4.0.0", @@ -5956,7 +6006,6 @@ "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "find-up": "^5.0.0", - "functional-red-black-tree": "^1.0.1", "glob-parent": "^6.0.1", "globals": "^13.15.0", "globby": "^11.1.0", @@ -5965,6 +6014,7 @@ "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", + "js-sdsl": "^4.1.4", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", @@ -6126,9 +6176,9 @@ "integrity": "sha512-/gApFXWk5CCLFQJL5IYJXxPQuG5tz5nPX4l27A9Zm/+wJxiwFrRSP54AopDxIv4JRp/rGwcgk/lZS/0Clw8jYA==" }, "node_modules/@next/eslint-plugin-next": { - "version": "12.3.0", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-12.3.0.tgz", - "integrity": "sha512-jVdq1qYTNDjUtulnE8/hkPv0pHILV4jMg5La99iaY/FFm20WxVnsAZtbNnMvlPbf8dc010oO304SX9yXbg5PAw==", + "version": "12.3.1", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-12.3.1.tgz", + "integrity": "sha512-sw+lTf6r6P0j+g/n9y4qdWWI2syPqZx+uc0+B/fRENqfR3KpSid6MIKqc9gNwGhJASazEQ5b3w8h4cAET213jw==", "dev": true, "dependencies": { "glob": "7.1.7" @@ -6365,9 +6415,9 @@ } }, "node_modules/@nomiclabs/hardhat-etherscan": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-3.1.0.tgz", - "integrity": "sha512-JroYgfN1AlYFkQTQ3nRwFi4o8NtZF7K/qFR2dxDUgHbCtIagkUseca9L4E/D2ScUm4XT40+8PbCdqZi+XmHyQA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-3.1.1.tgz", + "integrity": "sha512-a6+fJlHTiPjzUYnvwkcduJN0rAKWagQsQNoHJP/9mJ1CZjIkGysGtvVAjNpnrYWocj/Hbi36XmZ0H2aIKlol7A==", "dependencies": { "@ethersproject/abi": "^5.1.2", "@ethersproject/address": "^5.0.2", @@ -6424,9 +6474,9 @@ } }, "node_modules/@npmcli/fs/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -6457,14 +6507,14 @@ "integrity": "sha512-HaW78NszGzRZd9SeoI3JD11JqY+lubnaOx7Pewj5pfjqWXOEATpeKIFb9Z4t2WBUK2iryiXX3lzWwmYWgUL0Ug==" }, "node_modules/@pmmmwh/react-refresh-webpack-plugin": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.7.tgz", - "integrity": "sha512-bcKCAzF0DV2IIROp9ZHkRJa6O4jy7NlnHdWL3GmcUxYWNjLXkK5kfELELwEfSP5hXPfVL/qOGMAROuMQb9GG8Q==", + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.8.tgz", + "integrity": "sha512-wxXRwf+IQ6zvHSJZ+5T2RQNEsq+kx4jKRXfFvdt3nBIUzJUAvXEFsUeoaohDe/Kr84MTjGwcuIUPNcstNJORsA==", "dev": true, "dependencies": { "ansi-html-community": "^0.0.8", "common-path-prefix": "^3.0.0", - "core-js-pure": "^3.8.1", + "core-js-pure": "^3.23.3", "error-stack-parser": "^2.0.6", "find-up": "^5.0.0", "html-entities": "^2.1.0", @@ -6479,7 +6529,7 @@ "@types/webpack": "4.x || 5.x", "react-refresh": ">=0.10.0 <1.0.0", "sockjs-client": "^1.4.0", - "type-fest": ">=0.17.0 <3.0.0", + "type-fest": ">=0.17.0 <4.0.0", "webpack": ">=4.43.0 <6.0.0", "webpack-dev-server": "3.x || 4.x", "webpack-hot-middleware": "2.x", @@ -6737,6 +6787,12 @@ "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", "dev": true }, + "node_modules/@sinclair/typebox": { + "version": "0.24.46", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.46.tgz", + "integrity": "sha512-ng4ut1z2MCBhK/NwDVwIQp3pAUOCs/KNaW3cBxdFB2xTDrOuo1xuNmpr/9HHFhxqIvHrs1NTH3KJg6q+JSy1Kw==", + "dev": true + }, "node_modules/@sindresorhus/is": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", @@ -6757,18 +6813,18 @@ } }, "node_modules/@sinonjs/fake-timers": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", - "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", + "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==", "dev": true, "dependencies": { "@sinonjs/commons": "^1.7.0" } }, "node_modules/@snapshot-labs/snapshot.js": { - "version": "0.4.28", - "resolved": "https://registry.npmjs.org/@snapshot-labs/snapshot.js/-/snapshot.js-0.4.28.tgz", - "integrity": "sha512-zP/XtR6gzoF5KjD8q9PdlN7HMQGC1yX9pT1hK185xqfdwB57Ut+Jk3Sk7Sr6bRygSSTlSSyg12zZ1EdHwZMGyw==", + "version": "0.4.40", + "resolved": "https://registry.npmjs.org/@snapshot-labs/snapshot.js/-/snapshot.js-0.4.40.tgz", + "integrity": "sha512-/6VHbDZANx36c4nMCiPrg3LR52jjysow+F/79lp7h8B3sNHMqHCTDmheBM6pTguQ3+cCgfKLOrZn62C9laQW2A==", "dependencies": { "@ensdomains/eth-ens-namehash": "^2.0.15", "@ethersproject/abi": "^5.6.4", @@ -6919,18 +6975,18 @@ "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" }, "node_modules/@storybook/addon-actions": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-6.5.10.tgz", - "integrity": "sha512-vpCnEu81fmtYzOf0QsRYoDuf9wXgVVl2VysE1dWRebRhIUDU0JurrthTnw322e38D4FzaoNGqZE7wnBYBohzZA==", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-6.5.12.tgz", + "integrity": "sha512-yEbyKjBsSRUr61SlS+SOTqQwdumO8Wa3GoHO3AfmvoKfzdGrM7w8G5Zs9Iev16khWg/7bQvoH3KZsg/hQuKnNg==", "dev": true, "dependencies": { - "@storybook/addons": "6.5.10", - "@storybook/api": "6.5.10", - "@storybook/client-logger": "6.5.10", - "@storybook/components": "6.5.10", - "@storybook/core-events": "6.5.10", + "@storybook/addons": "6.5.12", + "@storybook/api": "6.5.12", + "@storybook/client-logger": "6.5.12", + "@storybook/components": "6.5.12", + "@storybook/core-events": "6.5.12", "@storybook/csf": "0.0.2--canary.4566f4d.1", - "@storybook/theming": "6.5.10", + "@storybook/theming": "6.5.12", "core-js": "^3.8.2", "fast-deep-equal": "^3.1.3", "global": "^4.4.0", @@ -6962,18 +7018,18 @@ } }, "node_modules/@storybook/addon-backgrounds": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-6.5.10.tgz", - "integrity": "sha512-5uzQda3dh891h7BL8e9Ymk7BI+QgkkzDJXuA4mHjOXfIiD3S3efhJI8amXuBC2ZpIr6zmVit0MqZVyoVve46cQ==", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-6.5.12.tgz", + "integrity": "sha512-S0QThY1jnU7Q+HY+g9JgpAJszzNmNkigZ4+X/4qlUXE0WYYn9i2YG5H6me1+57QmIXYddcWWqqgF9HUXl667NA==", "dev": true, "dependencies": { - "@storybook/addons": "6.5.10", - "@storybook/api": "6.5.10", - "@storybook/client-logger": "6.5.10", - "@storybook/components": "6.5.10", - "@storybook/core-events": "6.5.10", + "@storybook/addons": "6.5.12", + "@storybook/api": "6.5.12", + "@storybook/client-logger": "6.5.12", + "@storybook/components": "6.5.12", + "@storybook/core-events": "6.5.12", "@storybook/csf": "0.0.2--canary.4566f4d.1", - "@storybook/theming": "6.5.10", + "@storybook/theming": "6.5.12", "core-js": "^3.8.2", "global": "^4.4.0", "memoizerific": "^1.11.3", @@ -6999,20 +7055,20 @@ } }, "node_modules/@storybook/addon-controls": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-6.5.10.tgz", - "integrity": "sha512-lC2y3XcolmQAJwFurIyGrynAHPWmfNtTCdu3rQBTVGwyxCoNwdOOeC2jV0BRqX2+CW6OHzJr9frNWXPSaZ8c4w==", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-6.5.12.tgz", + "integrity": "sha512-UoaamkGgAQXplr0kixkPhROdzkY+ZJQpG7VFDU6kmZsIgPRNfX/QoJFR5vV6TpDArBIjWaUUqWII+GHgPRzLgQ==", "dev": true, "dependencies": { - "@storybook/addons": "6.5.10", - "@storybook/api": "6.5.10", - "@storybook/client-logger": "6.5.10", - "@storybook/components": "6.5.10", - "@storybook/core-common": "6.5.10", + "@storybook/addons": "6.5.12", + "@storybook/api": "6.5.12", + "@storybook/client-logger": "6.5.12", + "@storybook/components": "6.5.12", + "@storybook/core-common": "6.5.12", "@storybook/csf": "0.0.2--canary.4566f4d.1", - "@storybook/node-logger": "6.5.10", - "@storybook/store": "6.5.10", - "@storybook/theming": "6.5.10", + "@storybook/node-logger": "6.5.12", + "@storybook/store": "6.5.12", + "@storybook/theming": "6.5.12", "core-js": "^3.8.2", "lodash": "^4.17.21", "ts-dedent": "^2.0.0" @@ -7035,29 +7091,29 @@ } }, "node_modules/@storybook/addon-docs": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-6.5.10.tgz", - "integrity": "sha512-1kgjo3f0vL6GN8fTwLL05M/q/kDdzvuqwhxPY/v5hubFb3aQZGr2yk9pRBaLAbs4bez0yG0ASXcwhYnrEZUppg==", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-6.5.12.tgz", + "integrity": "sha512-T+QTkmF7QlMVfXHXEberP8CYti/XMTo9oi6VEbZLx+a2N3qY4GZl7X2g26Sf5V4Za+xnapYKBMEIiJ5SvH9weQ==", "dev": true, "dependencies": { "@babel/plugin-transform-react-jsx": "^7.12.12", "@babel/preset-env": "^7.12.11", "@jest/transform": "^26.6.2", "@mdx-js/react": "^1.6.22", - "@storybook/addons": "6.5.10", - "@storybook/api": "6.5.10", - "@storybook/components": "6.5.10", - "@storybook/core-common": "6.5.10", - "@storybook/core-events": "6.5.10", + "@storybook/addons": "6.5.12", + "@storybook/api": "6.5.12", + "@storybook/components": "6.5.12", + "@storybook/core-common": "6.5.12", + "@storybook/core-events": "6.5.12", "@storybook/csf": "0.0.2--canary.4566f4d.1", - "@storybook/docs-tools": "6.5.10", + "@storybook/docs-tools": "6.5.12", "@storybook/mdx1-csf": "^0.0.1", - "@storybook/node-logger": "6.5.10", - "@storybook/postinstall": "6.5.10", - "@storybook/preview-web": "6.5.10", - "@storybook/source-loader": "6.5.10", - "@storybook/store": "6.5.10", - "@storybook/theming": "6.5.10", + "@storybook/node-logger": "6.5.12", + "@storybook/postinstall": "6.5.12", + "@storybook/preview-web": "6.5.12", + "@storybook/source-loader": "6.5.12", + "@storybook/store": "6.5.12", + "@storybook/theming": "6.5.12", "babel-loader": "^8.0.0", "core-js": "^3.8.2", "fast-deep-equal": "^3.1.3", @@ -7091,23 +7147,23 @@ } }, "node_modules/@storybook/addon-essentials": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-6.5.10.tgz", - "integrity": "sha512-PT2aiR4vgAyB0pl3HNBUa4/a7NDRxASxAazz7zt9ZDirkipDKfxwdcLeRoJzwSngVDWEhuz5/paN5x4eNp4Hww==", - "dev": true, - "dependencies": { - "@storybook/addon-actions": "6.5.10", - "@storybook/addon-backgrounds": "6.5.10", - "@storybook/addon-controls": "6.5.10", - "@storybook/addon-docs": "6.5.10", - "@storybook/addon-measure": "6.5.10", - "@storybook/addon-outline": "6.5.10", - "@storybook/addon-toolbars": "6.5.10", - "@storybook/addon-viewport": "6.5.10", - "@storybook/addons": "6.5.10", - "@storybook/api": "6.5.10", - "@storybook/core-common": "6.5.10", - "@storybook/node-logger": "6.5.10", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-6.5.12.tgz", + "integrity": "sha512-4AAV0/mQPSk3V0Pie1NIqqgBgScUc0VtBEXDm8BgPeuDNVhPEupnaZgVt+I3GkzzPPo6JjdCsp2L11f3bBSEjw==", + "dev": true, + "dependencies": { + "@storybook/addon-actions": "6.5.12", + "@storybook/addon-backgrounds": "6.5.12", + "@storybook/addon-controls": "6.5.12", + "@storybook/addon-docs": "6.5.12", + "@storybook/addon-measure": "6.5.12", + "@storybook/addon-outline": "6.5.12", + "@storybook/addon-toolbars": "6.5.12", + "@storybook/addon-viewport": "6.5.12", + "@storybook/addons": "6.5.12", + "@storybook/api": "6.5.12", + "@storybook/core-common": "6.5.12", + "@storybook/node-logger": "6.5.12", "core-js": "^3.8.2", "regenerator-runtime": "^0.13.7", "ts-dedent": "^2.0.0" @@ -7174,16 +7230,16 @@ } }, "node_modules/@storybook/addon-links": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-6.5.10.tgz", - "integrity": "sha512-r3WzYIPz7WjHiaPObC2Tg6bHuZRBb/Kt/X+Eitw+jTqBel7ksvkO36tn81q8Eyj61qIdNQmUWAaX/0aewT0kLA==", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-6.5.12.tgz", + "integrity": "sha512-Dyt922J5nTBwM/9KtuuDIt3sX8xdTkKh+aXSoOX6OzT04Xwm5NumFOvuQ2YA00EM+3Ihn7Ayc3urvxnHTixmKg==", "dev": true, "dependencies": { - "@storybook/addons": "6.5.10", - "@storybook/client-logger": "6.5.10", - "@storybook/core-events": "6.5.10", + "@storybook/addons": "6.5.12", + "@storybook/client-logger": "6.5.12", + "@storybook/core-events": "6.5.12", "@storybook/csf": "0.0.2--canary.4566f4d.1", - "@storybook/router": "6.5.10", + "@storybook/router": "6.5.12", "@types/qs": "^6.9.5", "core-js": "^3.8.2", "global": "^4.4.0", @@ -7210,16 +7266,16 @@ } }, "node_modules/@storybook/addon-measure": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-6.5.10.tgz", - "integrity": "sha512-ss7L1H5K5hXygDIoVwj+QyVXbve5V67x7CofLiLCgQYuJzfO16+sPGjiTGWMpTb4ijox2uKWnTkpilt5bCjXgw==", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-6.5.12.tgz", + "integrity": "sha512-zmolO6+VG4ov2620G7f1myqLQLztfU+ykN+U5y52GXMFsCOyB7fMoVWIMrZwsNlinDu+CnUvelXHUNbqqnjPRg==", "dev": true, "dependencies": { - "@storybook/addons": "6.5.10", - "@storybook/api": "6.5.10", - "@storybook/client-logger": "6.5.10", - "@storybook/components": "6.5.10", - "@storybook/core-events": "6.5.10", + "@storybook/addons": "6.5.12", + "@storybook/api": "6.5.12", + "@storybook/client-logger": "6.5.12", + "@storybook/components": "6.5.12", + "@storybook/core-events": "6.5.12", "@storybook/csf": "0.0.2--canary.4566f4d.1", "core-js": "^3.8.2", "global": "^4.4.0" @@ -7242,16 +7298,16 @@ } }, "node_modules/@storybook/addon-outline": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/addon-outline/-/addon-outline-6.5.10.tgz", - "integrity": "sha512-AjdaeQ+/iBKmGrAqRW4niwMB6AkgGnYmSzVs5Cf6F/Sb4Dp+vzgLNOwLABD9qs8Ri8dvHl5J4QpVwQKUhYZaOQ==", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/addon-outline/-/addon-outline-6.5.12.tgz", + "integrity": "sha512-jXwLz2rF/CZt6Cgy+QUTa+pNW0IevSONYwS3D533E9z5h0T5ZKJbbxG5jxM+oC+FpZ/nFk5mEmUaYNkxgIVdpw==", "dev": true, "dependencies": { - "@storybook/addons": "6.5.10", - "@storybook/api": "6.5.10", - "@storybook/client-logger": "6.5.10", - "@storybook/components": "6.5.10", - "@storybook/core-events": "6.5.10", + "@storybook/addons": "6.5.12", + "@storybook/api": "6.5.12", + "@storybook/client-logger": "6.5.12", + "@storybook/components": "6.5.12", + "@storybook/core-events": "6.5.12", "@storybook/csf": "0.0.2--canary.4566f4d.1", "core-js": "^3.8.2", "global": "^4.4.0", @@ -7276,16 +7332,16 @@ } }, "node_modules/@storybook/addon-toolbars": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-6.5.10.tgz", - "integrity": "sha512-S0Ljc6Wv+bPbx2e0iTveJ6bBDqjsemu+FZD4qDLsHreoI7DAcqyrF5Def1l8xNohixIVpx8dQpYXRtyzNlXekg==", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-6.5.12.tgz", + "integrity": "sha512-+QjoEHkekz4wTy8zqxYdV9ijDJ5YcjDc/qdnV8wx22zkoVU93FQlo0CHHVjpyvc3ilQliZbdQDJx62BcHXw30Q==", "dev": true, "dependencies": { - "@storybook/addons": "6.5.10", - "@storybook/api": "6.5.10", - "@storybook/client-logger": "6.5.10", - "@storybook/components": "6.5.10", - "@storybook/theming": "6.5.10", + "@storybook/addons": "6.5.12", + "@storybook/api": "6.5.12", + "@storybook/client-logger": "6.5.12", + "@storybook/components": "6.5.12", + "@storybook/theming": "6.5.12", "core-js": "^3.8.2", "regenerator-runtime": "^0.13.7" }, @@ -7307,17 +7363,17 @@ } }, "node_modules/@storybook/addon-viewport": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-6.5.10.tgz", - "integrity": "sha512-RFMd+4kZljyuJjR9OJ2bFXHrSG7VTi5FDZYWEU+4W1sBxzC+JhnVnUP+HJH3gUxEFIRQC5neRzwWRE9RUUoALQ==", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-6.5.12.tgz", + "integrity": "sha512-eQ1UrmbiMiPmWe+fdMWIc0F6brh/S2z4ADfwFz0tTd+vOLWRZp1xw8JYQ9P2ZasE+PM3WFOVT9jvNjZj/cHnfw==", "dev": true, "dependencies": { - "@storybook/addons": "6.5.10", - "@storybook/api": "6.5.10", - "@storybook/client-logger": "6.5.10", - "@storybook/components": "6.5.10", - "@storybook/core-events": "6.5.10", - "@storybook/theming": "6.5.10", + "@storybook/addons": "6.5.12", + "@storybook/api": "6.5.12", + "@storybook/client-logger": "6.5.12", + "@storybook/components": "6.5.12", + "@storybook/core-events": "6.5.12", + "@storybook/theming": "6.5.12", "core-js": "^3.8.2", "global": "^4.4.0", "memoizerific": "^1.11.3", @@ -7342,18 +7398,18 @@ } }, "node_modules/@storybook/addons": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-6.5.10.tgz", - "integrity": "sha512-VD4tBCQ23PkSeDoxuHcKy0RfhIs3oMYjBacOZx7d0bvOzK9WjPyvE2ysDAh7r/ceqnwmWHAScIpE+I1RU7gl+g==", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-6.5.12.tgz", + "integrity": "sha512-y3cgxZq41YGnuIlBJEuJjSFdMsm8wnvlNOGUP9Q+Er2dgfx8rJz4Q22o4hPjpvpaj4XdBtxCJXI2NeFpN59+Cw==", "dev": true, "dependencies": { - "@storybook/api": "6.5.10", - "@storybook/channels": "6.5.10", - "@storybook/client-logger": "6.5.10", - "@storybook/core-events": "6.5.10", + "@storybook/api": "6.5.12", + "@storybook/channels": "6.5.12", + "@storybook/client-logger": "6.5.12", + "@storybook/core-events": "6.5.12", "@storybook/csf": "0.0.2--canary.4566f4d.1", - "@storybook/router": "6.5.10", - "@storybook/theming": "6.5.10", + "@storybook/router": "6.5.12", + "@storybook/theming": "6.5.12", "@types/webpack-env": "^1.16.0", "core-js": "^3.8.2", "global": "^4.4.0", @@ -7369,18 +7425,18 @@ } }, "node_modules/@storybook/api": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/api/-/api-6.5.10.tgz", - "integrity": "sha512-AkmgSPNEGdKp4oZA4KQ+RJsacw7GwfvjsVDnCkcXqS9zmSr/RNL0fhpcd60KKkmx/hGKPTDFpK3ZayxDrJ/h4A==", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/api/-/api-6.5.12.tgz", + "integrity": "sha512-DuUZmMlQxkFNU9Vgkp9aNfCkAongU76VVmygvCuSpMVDI9HQ2lG0ydL+ppL4XKoSMCCoXTY6+rg4hJANnH+1AQ==", "dev": true, "dependencies": { - "@storybook/channels": "6.5.10", - "@storybook/client-logger": "6.5.10", - "@storybook/core-events": "6.5.10", + "@storybook/channels": "6.5.12", + "@storybook/client-logger": "6.5.12", + "@storybook/core-events": "6.5.12", "@storybook/csf": "0.0.2--canary.4566f4d.1", - "@storybook/router": "6.5.10", + "@storybook/router": "6.5.12", "@storybook/semver": "^7.3.2", - "@storybook/theming": "6.5.10", + "@storybook/theming": "6.5.12", "core-js": "^3.8.2", "fast-deep-equal": "^3.1.3", "global": "^4.4.0", @@ -7402,28 +7458,28 @@ } }, "node_modules/@storybook/builder-webpack4": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/builder-webpack4/-/builder-webpack4-6.5.10.tgz", - "integrity": "sha512-AoKjsCNoQQoZXYwBDxO8s+yVEd5FjBJAaysEuUTHq2fb81jwLrGcEOo6hjw4jqfugZQIzYUEjPazlvubS78zpw==", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/builder-webpack4/-/builder-webpack4-6.5.12.tgz", + "integrity": "sha512-TsthT5jm9ZxQPNOZJbF5AV24me3i+jjYD7gbdKdSHrOVn1r3ydX4Z8aD6+BjLCtTn3T+e8NMvUkL4dInEo1x6g==", "dev": true, "dependencies": { "@babel/core": "^7.12.10", - "@storybook/addons": "6.5.10", - "@storybook/api": "6.5.10", - "@storybook/channel-postmessage": "6.5.10", - "@storybook/channels": "6.5.10", - "@storybook/client-api": "6.5.10", - "@storybook/client-logger": "6.5.10", - "@storybook/components": "6.5.10", - "@storybook/core-common": "6.5.10", - "@storybook/core-events": "6.5.10", - "@storybook/node-logger": "6.5.10", - "@storybook/preview-web": "6.5.10", - "@storybook/router": "6.5.10", + "@storybook/addons": "6.5.12", + "@storybook/api": "6.5.12", + "@storybook/channel-postmessage": "6.5.12", + "@storybook/channels": "6.5.12", + "@storybook/client-api": "6.5.12", + "@storybook/client-logger": "6.5.12", + "@storybook/components": "6.5.12", + "@storybook/core-common": "6.5.12", + "@storybook/core-events": "6.5.12", + "@storybook/node-logger": "6.5.12", + "@storybook/preview-web": "6.5.12", + "@storybook/router": "6.5.12", "@storybook/semver": "^7.3.2", - "@storybook/store": "6.5.10", - "@storybook/theming": "6.5.10", - "@storybook/ui": "6.5.10", + "@storybook/store": "6.5.12", + "@storybook/theming": "6.5.12", + "@storybook/ui": "6.5.12", "@types/node": "^14.0.10 || ^16.0.0", "@types/webpack": "^4.41.26", "autoprefixer": "^9.8.6", @@ -7655,14 +7711,14 @@ } }, "node_modules/@storybook/channel-postmessage": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/channel-postmessage/-/channel-postmessage-6.5.10.tgz", - "integrity": "sha512-t9PTA0UzFvYa3IlOfpBOolfrRMPTjUMIeCQ6FNyM0aj5GqLKSvoQzP8NeoRpIrvyf6ljFKKdaMaZ3fiCvh45ag==", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/channel-postmessage/-/channel-postmessage-6.5.12.tgz", + "integrity": "sha512-SL/tJBLOdDlbUAAxhiZWOEYd5HI4y8rN50r6jeed5nD8PlocZjxJ6mO0IxnePqIL9Yu3nSrQRHrtp8AJvPX0Yg==", "dev": true, "dependencies": { - "@storybook/channels": "6.5.10", - "@storybook/client-logger": "6.5.10", - "@storybook/core-events": "6.5.10", + "@storybook/channels": "6.5.12", + "@storybook/client-logger": "6.5.12", + "@storybook/core-events": "6.5.12", "core-js": "^3.8.2", "global": "^4.4.0", "qs": "^6.10.0", @@ -7674,13 +7730,13 @@ } }, "node_modules/@storybook/channel-websocket": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/channel-websocket/-/channel-websocket-6.5.10.tgz", - "integrity": "sha512-RTXMZbMWCS3xU+4GVIdfnUXsKcwg/WTozy88/5OxaKjGw6KgRedqLAQJKJ6Y5XlnwIcWelirkHj/COwTTXhbPg==", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/channel-websocket/-/channel-websocket-6.5.12.tgz", + "integrity": "sha512-0t5dLselHVKTRYaphxx1dRh4pmOFCfR7h8oNJlOvJ29Qy5eNyVujDG9nhwWbqU6IKayuP4nZrAbe9Req9YZYlQ==", "dev": true, "dependencies": { - "@storybook/channels": "6.5.10", - "@storybook/client-logger": "6.5.10", + "@storybook/channels": "6.5.12", + "@storybook/client-logger": "6.5.12", "core-js": "^3.8.2", "global": "^4.4.0", "telejson": "^6.0.8" @@ -7691,9 +7747,9 @@ } }, "node_modules/@storybook/channels": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-6.5.10.tgz", - "integrity": "sha512-lo26YZ6kWpHXLhuHJF4P/bICY7jD/rXEZqReKtGOSk1Lv99/xvG6pqmcy3hWLf3v3Dy/8otjRPSR7izFVIIZgQ==", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-6.5.12.tgz", + "integrity": "sha512-X5XaKbe4b7LXJ4sUakBo00x6pXnW78JkOonHoaKoWsccHLlEzwfBZpVVekhVZnqtCoLT23dB8wjKgA71RYWoiw==", "dev": true, "dependencies": { "core-js": "^3.8.2", @@ -7706,18 +7762,18 @@ } }, "node_modules/@storybook/client-api": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/client-api/-/client-api-6.5.10.tgz", - "integrity": "sha512-3wBWZl3NvMFgMovgEh+euiARAT2FXzpvTF4Q1gerGMNNDlrGxHnFvSuy4FHg/irtOGLa4yLz43ULFbYtpKw0Lg==", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/client-api/-/client-api-6.5.12.tgz", + "integrity": "sha512-+JiRSgiU829KPc25nG/k0+Ao2nUelHUe8Y/9cRoKWbCAGzi4xd0JLhHAOr9Oi2szWx/OI1L08lxVv1+WTveAeA==", "dev": true, "dependencies": { - "@storybook/addons": "6.5.10", - "@storybook/channel-postmessage": "6.5.10", - "@storybook/channels": "6.5.10", - "@storybook/client-logger": "6.5.10", - "@storybook/core-events": "6.5.10", + "@storybook/addons": "6.5.12", + "@storybook/channel-postmessage": "6.5.12", + "@storybook/channels": "6.5.12", + "@storybook/client-logger": "6.5.12", + "@storybook/core-events": "6.5.12", "@storybook/csf": "0.0.2--canary.4566f4d.1", - "@storybook/store": "6.5.10", + "@storybook/store": "6.5.12", "@types/qs": "^6.9.5", "@types/webpack-env": "^1.16.0", "core-js": "^3.8.2", @@ -7742,9 +7798,9 @@ } }, "node_modules/@storybook/client-logger": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-6.5.10.tgz", - "integrity": "sha512-/xA0MHOevXev68hyLMQw8Qo8KczSIdXOxliAgrycMTkDmw5eKeA8TP7B8zP3wGuq/e3MrdD9/8MWhb/IQBNC3w==", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-6.5.12.tgz", + "integrity": "sha512-IrkMr5KZcudX935/C2balFbxLHhkvQnJ78rbVThHDVckQ7l3oIXTh66IMzldeOabVFDZEMiW8AWuGEYof+JtLw==", "dev": true, "dependencies": { "core-js": "^3.8.2", @@ -7756,14 +7812,14 @@ } }, "node_modules/@storybook/components": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/components/-/components-6.5.10.tgz", - "integrity": "sha512-9OhgB8YQfGwOKjo/N96N5mrtJ6qDVVoEM1zuhea32tJUd2eYf0aSWpryA9VnOM0V1q/8DAoCg5rPBMYWMBU5uw==", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/components/-/components-6.5.12.tgz", + "integrity": "sha512-NAAGl5PDXaHdVLd6hA+ttmLwH3zAVGXeUmEubzKZ9bJzb+duhFKxDa9blM4YEkI+palumvgAMm0UgS7ou680Ig==", "dev": true, "dependencies": { - "@storybook/client-logger": "6.5.10", + "@storybook/client-logger": "6.5.12", "@storybook/csf": "0.0.2--canary.4566f4d.1", - "@storybook/theming": "6.5.10", + "@storybook/theming": "6.5.12", "core-js": "^3.8.2", "memoizerific": "^1.11.3", "qs": "^6.10.0", @@ -7780,13 +7836,13 @@ } }, "node_modules/@storybook/core": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/core/-/core-6.5.10.tgz", - "integrity": "sha512-K86yYa0tYlMxADlwQTculYvPROokQau09SCVqpsLg3wJCTvYFL4+SIqcYoyBSbFmHOdnYbJgPydjN33MYLiOZQ==", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/core/-/core-6.5.12.tgz", + "integrity": "sha512-+o3psAVWL+5LSwyJmEbvhgxKO1Et5uOX8ujNVt/f1fgwJBIf6BypxyPKu9YGQDRzcRssESQQZWNrZCCAZlFeuQ==", "dev": true, "dependencies": { - "@storybook/core-client": "6.5.10", - "@storybook/core-server": "6.5.10" + "@storybook/core-client": "6.5.12", + "@storybook/core-server": "6.5.12" }, "funding": { "type": "opencollective", @@ -7810,21 +7866,21 @@ } }, "node_modules/@storybook/core-client": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/core-client/-/core-client-6.5.10.tgz", - "integrity": "sha512-THsIjNrOrampTl0Lgfjvfjk1JnktKb4CQLOM80KpQb4cjDqorBjJmErzUkUQ2y3fXvrDmQ/kUREkShET4XEdtA==", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/core-client/-/core-client-6.5.12.tgz", + "integrity": "sha512-jyAd0ud6zO+flpLv0lEHbbt1Bv9Ms225M6WTQLrfe7kN/7j1pVKZEoeVCLZwkJUtSKcNiWQxZbS15h31pcYwqg==", "dev": true, "dependencies": { - "@storybook/addons": "6.5.10", - "@storybook/channel-postmessage": "6.5.10", - "@storybook/channel-websocket": "6.5.10", - "@storybook/client-api": "6.5.10", - "@storybook/client-logger": "6.5.10", - "@storybook/core-events": "6.5.10", + "@storybook/addons": "6.5.12", + "@storybook/channel-postmessage": "6.5.12", + "@storybook/channel-websocket": "6.5.12", + "@storybook/client-api": "6.5.12", + "@storybook/client-logger": "6.5.12", + "@storybook/core-events": "6.5.12", "@storybook/csf": "0.0.2--canary.4566f4d.1", - "@storybook/preview-web": "6.5.10", - "@storybook/store": "6.5.10", - "@storybook/ui": "6.5.10", + "@storybook/preview-web": "6.5.12", + "@storybook/store": "6.5.12", + "@storybook/ui": "6.5.12", "airbnb-js-shims": "^2.2.1", "ansi-to-html": "^0.6.11", "core-js": "^3.8.2", @@ -7852,9 +7908,9 @@ } }, "node_modules/@storybook/core-common": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-6.5.10.tgz", - "integrity": "sha512-Bx+VKkfWdrAmD8T51Sjq/mMhRaiapBHcpG4cU5bc3DMbg+LF2/yrgqv/cjVu+m5gHAzYCac5D7gqzBgvG7Myww==", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-6.5.12.tgz", + "integrity": "sha512-gG20+eYdIhwQNu6Xs805FLrOCWtkoc8Rt8gJiRt8yXzZh9EZkU4xgCRoCxrrJ03ys/gTiCFbBOfRi749uM3z4w==", "dev": true, "dependencies": { "@babel/core": "^7.12.10", @@ -7879,7 +7935,7 @@ "@babel/preset-react": "^7.12.10", "@babel/preset-typescript": "^7.12.7", "@babel/register": "^7.12.1", - "@storybook/node-logger": "6.5.10", + "@storybook/node-logger": "6.5.12", "@storybook/semver": "^7.3.2", "@types/node": "^14.0.10 || ^16.0.0", "@types/pretty-hrtime": "^1.0.0", @@ -8025,9 +8081,9 @@ } }, "node_modules/@storybook/core-events": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-6.5.10.tgz", - "integrity": "sha512-EVb1gO1172klVIAABLOoigFMx0V88uctY0K/qVCO8n6v+wd2+0Ccn63kl+gTxsAC3WZ8XhXh9q2w5ImHklVECw==", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-6.5.12.tgz", + "integrity": "sha512-0AMyMM19R/lHsYRfWqM8zZTXthasTAK2ExkSRzYi2GkIaVMxRKtM33YRwxKIpJ6KmIKIs8Ru3QCXu1mfCmGzNg==", "dev": true, "dependencies": { "core-js": "^3.8.2" @@ -8038,23 +8094,23 @@ } }, "node_modules/@storybook/core-server": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/core-server/-/core-server-6.5.10.tgz", - "integrity": "sha512-jqwpA0ccA8X5ck4esWBid04+cEIVqirdAcqJeNb9IZAD+bRreO4Im8ilzr7jc5AmQ9fkqHs2NByFKh9TITp8NQ==", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/core-server/-/core-server-6.5.12.tgz", + "integrity": "sha512-q1b/XKwoLUcCoCQ+8ndPD5THkEwXZYJ9ROv16i2VGUjjjAuSqpEYBq5GMGQUgxlWp1bkxtdGL2Jz+6pZfvldzA==", "dev": true, "dependencies": { "@discoveryjs/json-ext": "^0.5.3", - "@storybook/builder-webpack4": "6.5.10", - "@storybook/core-client": "6.5.10", - "@storybook/core-common": "6.5.10", - "@storybook/core-events": "6.5.10", + "@storybook/builder-webpack4": "6.5.12", + "@storybook/core-client": "6.5.12", + "@storybook/core-common": "6.5.12", + "@storybook/core-events": "6.5.12", "@storybook/csf": "0.0.2--canary.4566f4d.1", - "@storybook/csf-tools": "6.5.10", - "@storybook/manager-webpack4": "6.5.10", - "@storybook/node-logger": "6.5.10", + "@storybook/csf-tools": "6.5.12", + "@storybook/manager-webpack4": "6.5.12", + "@storybook/node-logger": "6.5.12", "@storybook/semver": "^7.3.2", - "@storybook/store": "6.5.10", - "@storybook/telemetry": "6.5.10", + "@storybook/store": "6.5.12", + "@storybook/telemetry": "6.5.12", "@types/node": "^14.0.10 || ^16.0.0", "@types/node-fetch": "^2.5.7", "@types/pretty-hrtime": "^1.0.0", @@ -8180,9 +8236,9 @@ } }, "node_modules/@storybook/core-server/node_modules/ws": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.8.1.tgz", - "integrity": "sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==", + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.9.0.tgz", + "integrity": "sha512-Ja7nszREasGaYUYCI2k4lCKIRTt+y7XuqVoHR44YpI49TtryyqbqvDMn5eqfW7e6HzTukDRIsXqzVHScqRcafg==", "dev": true, "engines": { "node": ">=10.0.0" @@ -8210,9 +8266,9 @@ } }, "node_modules/@storybook/csf-tools": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-6.5.10.tgz", - "integrity": "sha512-H77kZQEisu7+skzeIbNZwmE09OqLjwJTeFhLN1pcjxKVa30LEI3pBHcNBxVKqgxl+Yg3KkB7W/ArLO2N+i2ohw==", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-6.5.12.tgz", + "integrity": "sha512-BPhnB1xJtBVOzXuCURzQRdXcstE27ht4qoTgQkbwUTy4MEtUZ/f1AnHSYRdzrgukXdUFWseNIK4RkNdJpfOfNQ==", "dev": true, "dependencies": { "@babel/core": "^7.12.10", @@ -8244,14 +8300,14 @@ } }, "node_modules/@storybook/docs-tools": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/docs-tools/-/docs-tools-6.5.10.tgz", - "integrity": "sha512-/bvYgOO+CxMEcHifkjJg0A60OTGOhcjGxnsB1h0gJuxMrqA/7Qwc108bFmPiX0eiD1BovFkZLJV4O6OY7zP5Vw==", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/docs-tools/-/docs-tools-6.5.12.tgz", + "integrity": "sha512-8brf8W89KVk95flVqW0sYEqkL+FBwb5W9CnwI+Ggd6r2cqXe9jyg+0vDZFdYp6kYNQKrPr4fbXGrGVXQG18/QQ==", "dev": true, "dependencies": { "@babel/core": "^7.12.10", "@storybook/csf": "0.0.2--canary.4566f4d.1", - "@storybook/store": "6.5.10", + "@storybook/store": "6.5.12", "core-js": "^3.8.2", "doctrine": "^3.0.0", "lodash": "^4.17.21", @@ -8263,20 +8319,20 @@ } }, "node_modules/@storybook/manager-webpack4": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/manager-webpack4/-/manager-webpack4-6.5.10.tgz", - "integrity": "sha512-N/TlNDhuhARuFipR/ZJ/xEVESz23iIbCsZ4VNehLHm8PpiGlQUehk+jMjWmz5XV0bJItwjRclY+CU3GjZKblfQ==", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/manager-webpack4/-/manager-webpack4-6.5.12.tgz", + "integrity": "sha512-LH3e6qfvq2znEdxe2kaWtmdDPTnvSkufzoC9iwOgNvo3YrTGrYNyUTDegvW293TOTVfUn7j6TBcsOxIgRnt28g==", "dev": true, "dependencies": { "@babel/core": "^7.12.10", "@babel/plugin-transform-template-literals": "^7.12.1", "@babel/preset-react": "^7.12.10", - "@storybook/addons": "6.5.10", - "@storybook/core-client": "6.5.10", - "@storybook/core-common": "6.5.10", - "@storybook/node-logger": "6.5.10", - "@storybook/theming": "6.5.10", - "@storybook/ui": "6.5.10", + "@storybook/addons": "6.5.12", + "@storybook/core-client": "6.5.12", + "@storybook/core-common": "6.5.12", + "@storybook/node-logger": "6.5.12", + "@storybook/theming": "6.5.12", + "@storybook/ui": "6.5.12", "@types/node": "^14.0.10 || ^16.0.0", "@types/webpack": "^4.41.26", "babel-loader": "^8.0.0", @@ -8435,9 +8491,9 @@ } }, "node_modules/@storybook/mdx1-csf/node_modules/@types/lodash": { - "version": "4.14.184", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.184.tgz", - "integrity": "sha512-RoZphVtHbxPZizt4IcILciSWiC6dcn+eZ8oX9IWEYfDMcocdd42f7NPI6fQj+6zI8y4E0L7gu2pcZKLGTRaV9Q==", + "version": "4.14.186", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.186.tgz", + "integrity": "sha512-eHcVlLXP0c2FlMPm56ITode2AgLMSa6aJ05JTTbYbI+7EMkCEE5qk2E41d5g2lCVTqRe0GnnRFurmlCsDODrPw==", "dev": true }, "node_modules/@storybook/mdx1-csf/node_modules/prettier": { @@ -8453,9 +8509,9 @@ } }, "node_modules/@storybook/node-logger": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-6.5.10.tgz", - "integrity": "sha512-bYswXIKV7Stru8vYfkjUMNN8UhF7Qg7NRsUvG5Djt5lLIae1XmUIgnH40mU/nW4X4BSfcR9MKxsSsngvn2WmQg==", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-6.5.12.tgz", + "integrity": "sha512-jdLtT3mX5GQKa+0LuX0q0sprKxtCGf6HdXlKZGD5FEuz4MgJUGaaiN0Hgi+U7Z4tVNOtSoIbYBYXHqfUgJrVZw==", "dev": true, "dependencies": { "@types/npmlog": "^4.1.2", @@ -8540,9 +8596,9 @@ } }, "node_modules/@storybook/postinstall": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/postinstall/-/postinstall-6.5.10.tgz", - "integrity": "sha512-xqUdpnFHYkn8MgtV+QztvIsRWa6jQUk7QT1Mu17Y0S7PbslNGsuskRPHenHhACXBJF+TM86R+4BaAhnVYTmElw==", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/postinstall/-/postinstall-6.5.12.tgz", + "integrity": "sha512-6K73f9c2UO+w4Wtyo2BxEpEsnhPvMgqHSaJ9Yt6Tc90LaDGUbcVgy6PNibsRyuJ/KQ543WeiRO5rSZfm2uJU9A==", "dev": true, "dependencies": { "core-js": "^3.8.2" @@ -8553,17 +8609,17 @@ } }, "node_modules/@storybook/preview-web": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/preview-web/-/preview-web-6.5.10.tgz", - "integrity": "sha512-sTC/o5gkvALOtcNgtApGKGN9EavvSxRHBeBh+5BQjV2qQ8ap+26RsfUizNBECAa2Jrn4osaDYn9HRhJLFL69WA==", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/preview-web/-/preview-web-6.5.12.tgz", + "integrity": "sha512-Q5mduCJsY9zhmlsrhHvtOBA3Jt2n45bhfVkiUEqtj8fDit45/GW+eLoffv8GaVTGjV96/Y1JFwDZUwU6mEfgGQ==", "dev": true, "dependencies": { - "@storybook/addons": "6.5.10", - "@storybook/channel-postmessage": "6.5.10", - "@storybook/client-logger": "6.5.10", - "@storybook/core-events": "6.5.10", + "@storybook/addons": "6.5.12", + "@storybook/channel-postmessage": "6.5.12", + "@storybook/client-logger": "6.5.12", + "@storybook/core-events": "6.5.12", "@storybook/csf": "0.0.2--canary.4566f4d.1", - "@storybook/store": "6.5.10", + "@storybook/store": "6.5.12", "ansi-to-html": "^0.6.11", "core-js": "^3.8.2", "global": "^4.4.0", @@ -8585,24 +8641,24 @@ } }, "node_modules/@storybook/react": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/react/-/react-6.5.10.tgz", - "integrity": "sha512-m8S1qQrwA7pDGwdKEvL6LV3YKvSzVUY297Fq+xcTU3irnAy4sHDuFoLqV6Mi1510mErK1r8+rf+0R5rEXB219g==", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/react/-/react-6.5.12.tgz", + "integrity": "sha512-1tG8EdSfp+OZAKAWPT2UrexF4o007jEMwQFFXw1atIQrQOADzSnZ7lTYJ08o5TyJwksswtr18tH3oJJ9sG3KPw==", "dev": true, "dependencies": { "@babel/preset-flow": "^7.12.1", "@babel/preset-react": "^7.12.10", "@pmmmwh/react-refresh-webpack-plugin": "^0.5.3", - "@storybook/addons": "6.5.10", - "@storybook/client-logger": "6.5.10", - "@storybook/core": "6.5.10", - "@storybook/core-common": "6.5.10", + "@storybook/addons": "6.5.12", + "@storybook/client-logger": "6.5.12", + "@storybook/core": "6.5.12", + "@storybook/core-common": "6.5.12", "@storybook/csf": "0.0.2--canary.4566f4d.1", - "@storybook/docs-tools": "6.5.10", - "@storybook/node-logger": "6.5.10", + "@storybook/docs-tools": "6.5.12", + "@storybook/node-logger": "6.5.12", "@storybook/react-docgen-typescript-plugin": "1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0", "@storybook/semver": "^7.3.2", - "@storybook/store": "6.5.10", + "@storybook/store": "6.5.12", "@types/estree": "^0.0.51", "@types/node": "^14.14.20 || ^16.0.0", "@types/webpack-env": "^1.16.0", @@ -8781,18 +8837,18 @@ } }, "node_modules/@storybook/react/node_modules/@types/node": { - "version": "16.11.58", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.58.tgz", - "integrity": "sha512-uMVxJ111wpHzkx/vshZFb6Qni3BOMnlWLq7q9jrwej7Yw/KvjsEbpxCCxw+hLKxexFMc8YmpG8J9tnEe/rKsIg==", + "version": "16.11.65", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.65.tgz", + "integrity": "sha512-Vfz7wGMOr4jbQGiQHVJm8VjeQwM9Ya7mHe9LtQ264/Epf5n1KiZShOFqk++nBzw6a/ubgYdB9Od7P+MH/LjoWw==", "dev": true }, "node_modules/@storybook/router": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/router/-/router-6.5.10.tgz", - "integrity": "sha512-O+vNW/eEpYFF8eCg5jZjNQ6q2DKQVxqDRPCy9pJdEbvavMDZn6AFYgVK+VJe5F4211WW2yncOu922xObCxXJYg==", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/router/-/router-6.5.12.tgz", + "integrity": "sha512-xHubde9YnBbpkDY5+zGO4Pr6VPxP8H9J2v4OTF3H82uaxCIKR0PKG0utS9pFKIsEiP3aM62Hb9qB8nU+v1nj3w==", "dev": true, "dependencies": { - "@storybook/client-logger": "6.5.10", + "@storybook/client-logger": "6.5.12", "core-js": "^3.8.2", "memoizerific": "^1.11.3", "qs": "^6.10.0", @@ -8876,13 +8932,13 @@ } }, "node_modules/@storybook/source-loader": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/source-loader/-/source-loader-6.5.10.tgz", - "integrity": "sha512-1RxxRumpjs8VUUwES9LId+cuNQnixhZAcwCxd6jaKkTZbjiQCtAhXX6DBTjJGV1u/JnCsqEp5b1wB8j/EioNHw==", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/source-loader/-/source-loader-6.5.12.tgz", + "integrity": "sha512-4iuILFsKNV70sEyjzIkOqgzgQx7CJ8kTEFz590vkmWXQNKz7YQzjgISIwL7GBw/myJgeb04bl5psVgY0cbG5vg==", "dev": true, "dependencies": { - "@storybook/addons": "6.5.10", - "@storybook/client-logger": "6.5.10", + "@storybook/addons": "6.5.12", + "@storybook/client-logger": "6.5.12", "@storybook/csf": "0.0.2--canary.4566f4d.1", "core-js": "^3.8.2", "estraverse": "^5.2.0", @@ -8914,14 +8970,14 @@ } }, "node_modules/@storybook/store": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/store/-/store-6.5.10.tgz", - "integrity": "sha512-RswrSYh2IiKkytFPxP9AvP+hekjrvHK2ILvyDk2ZgduCN4n5ivsekOb+N3M2t+dq1eLuW9or5n2T4OWwAwjxxQ==", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/store/-/store-6.5.12.tgz", + "integrity": "sha512-SMQOr0XvV0mhTuqj3XOwGGc4kTPVjh3xqrG1fqkj9RGs+2jRdmO6mnwzda5gPwUmWNTorZ7FxZ1iEoyfYNtuiQ==", "dev": true, "dependencies": { - "@storybook/addons": "6.5.10", - "@storybook/client-logger": "6.5.10", - "@storybook/core-events": "6.5.10", + "@storybook/addons": "6.5.12", + "@storybook/client-logger": "6.5.12", + "@storybook/core-events": "6.5.12", "@storybook/csf": "0.0.2--canary.4566f4d.1", "core-js": "^3.8.2", "fast-deep-equal": "^3.1.3", @@ -8945,13 +9001,13 @@ } }, "node_modules/@storybook/telemetry": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/telemetry/-/telemetry-6.5.10.tgz", - "integrity": "sha512-+M5HILDFS8nDumLxeSeAwi1MTzIuV6UWzV4yB2wcsEXOBTdplcl9oYqFKtlst78oOIdGtpPYxYfivDlqxC2K4g==", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/telemetry/-/telemetry-6.5.12.tgz", + "integrity": "sha512-mCHxx7NmQ3n7gx0nmblNlZE5ZgrjQm6B08mYeWg6Y7r4GZnqS6wZbvAwVhZZ3Gg/9fdqaBApHsdAXp0d5BrlxA==", "dev": true, "dependencies": { - "@storybook/client-logger": "6.5.10", - "@storybook/core-common": "6.5.10", + "@storybook/client-logger": "6.5.12", + "@storybook/core-common": "6.5.12", "chalk": "^4.1.0", "core-js": "^3.8.2", "detect-package-manager": "^2.0.1", @@ -9039,12 +9095,12 @@ } }, "node_modules/@storybook/theming": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-6.5.10.tgz", - "integrity": "sha512-BvTQBBcSEwKKcsVmF+Ol6v0RIQUr+bxP7gb10wtfBd23mZTEFA0C1N5FnZr/dDeiBKG1pvf1UKvoYA731y0BsA==", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-6.5.12.tgz", + "integrity": "sha512-uWOo84qMQ2R6c1C0faZ4Q0nY01uNaX7nXoJKieoiJ6ZqY9PSYxJl1kZLi3uPYnrxLZjzjVyXX8MgdxzbppYItA==", "dev": true, "dependencies": { - "@storybook/client-logger": "6.5.10", + "@storybook/client-logger": "6.5.12", "core-js": "^3.8.2", "memoizerific": "^1.11.3", "regenerator-runtime": "^0.13.7" @@ -9059,20 +9115,20 @@ } }, "node_modules/@storybook/ui": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/ui/-/ui-6.5.10.tgz", - "integrity": "sha512-6iaoaRAiTqB1inTw35vao+5hjcDE0Qa0A3a9ZIeNa6yHvpB1k0lO/N/0PMrRdVvySYpXVD1iry4z4QYdo1rU+w==", - "dev": true, - "dependencies": { - "@storybook/addons": "6.5.10", - "@storybook/api": "6.5.10", - "@storybook/channels": "6.5.10", - "@storybook/client-logger": "6.5.10", - "@storybook/components": "6.5.10", - "@storybook/core-events": "6.5.10", - "@storybook/router": "6.5.10", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/ui/-/ui-6.5.12.tgz", + "integrity": "sha512-P7+ARI5NvaEYkrbIciT/UMgy3kxMt4WCtHMXss2T01UMCIWh1Ws4BJaDNqtQSpKuwjjS4eqZL3aQWhlUpYAUEg==", + "dev": true, + "dependencies": { + "@storybook/addons": "6.5.12", + "@storybook/api": "6.5.12", + "@storybook/channels": "6.5.12", + "@storybook/client-logger": "6.5.12", + "@storybook/components": "6.5.12", + "@storybook/core-events": "6.5.12", + "@storybook/router": "6.5.12", "@storybook/semver": "^7.3.2", - "@storybook/theming": "6.5.10", + "@storybook/theming": "6.5.12", "core-js": "^3.8.2", "memoizerific": "^1.11.3", "qs": "^6.10.0", @@ -9441,9 +9497,9 @@ } }, "node_modules/@svgr/webpack/node_modules/@svgr/babel-preset": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-6.3.1.tgz", - "integrity": "sha512-tQtWtzuMMQ3opH7je+MpwfuRA1Hf3cKdSgTtAYwOBDfmhabP7rcTfBi3E7V3MuwJNy/Y02/7/RutvwS1W4Qv9g==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-6.4.0.tgz", + "integrity": "sha512-Ytuh7N282fv2Cy1JePf6HZ29/G5Hb8mQAjx4iykPjvfFl9NK6o5lZavmewgjOGT8kNPtwgvheuOQn4CifHRUhQ==", "dev": true, "dependencies": { "@svgr/babel-plugin-add-jsx-attribute": "^6.3.1", @@ -9467,12 +9523,13 @@ } }, "node_modules/@svgr/webpack/node_modules/@svgr/core": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-6.3.1.tgz", - "integrity": "sha512-Sm3/7OdXbQreemf9aO25keerZSbnKMpGEfmH90EyYpj1e8wMD4TuwJIb3THDSgRMWk1kYJfSRulELBy4gVgZUA==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-6.4.0.tgz", + "integrity": "sha512-wU9uyF6BUnwAqG7fDOowmDQzmbvovj1uq/iETfMK9xwQNaT+e7yN7SmDDcETXC72dnOrMcRuEWw0JEvpJha+yg==", "dev": true, "dependencies": { - "@svgr/plugin-jsx": "^6.3.1", + "@svgr/babel-preset": "^6.4.0", + "@svgr/plugin-jsx": "^6.4.0", "camelcase": "^6.2.0", "cosmiconfig": "^7.0.1" }, @@ -9485,9 +9542,9 @@ } }, "node_modules/@svgr/webpack/node_modules/@svgr/hast-util-to-babel-ast": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.3.1.tgz", - "integrity": "sha512-NgyCbiTQIwe3wHe/VWOUjyxmpUmsrBjdoIxKpXt3Nqc3TN30BpJG22OxBvVzsAh9jqep0w0/h8Ywvdk3D9niNQ==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.4.0.tgz", + "integrity": "sha512-PjcU8jCneKXJnrREycsgfgQ/bzR1ogSKC5MBeUu2wmEoJIjzXX7X14DDktUjU9bkBy26yMDiVHn46Nl82P3WEg==", "dev": true, "dependencies": { "@babel/types": "^7.18.4", @@ -9502,14 +9559,14 @@ } }, "node_modules/@svgr/webpack/node_modules/@svgr/plugin-jsx": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.3.1.tgz", - "integrity": "sha512-r9+0mYG3hD4nNtUgsTXWGYJomv/bNd7kC16zvsM70I/bGeoCi/3lhTmYqeN6ChWX317OtQCSZZbH4wq9WwoXbw==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.4.0.tgz", + "integrity": "sha512-gu6E7v8qRAtCxbymI1et3G7athogvKvzsJkSWiHVZsuVZbyx5O2b7+DIkKvAGh2RvEzgSvfGf8QD1BaHal2vBw==", "dev": true, "dependencies": { "@babel/core": "^7.18.5", - "@svgr/babel-preset": "^6.3.1", - "@svgr/hast-util-to-babel-ast": "^6.3.1", + "@svgr/babel-preset": "^6.4.0", + "@svgr/hast-util-to-babel-ast": "^6.4.0", "svg-parser": "^2.0.4" }, "engines": { @@ -9918,18 +9975,6 @@ "node": "^12.20.0 || >=14" } }, - "node_modules/@synthetixio/synpress/node_modules/eslint-config-prettier": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", - "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", - "dev": true, - "bin": { - "eslint-config-prettier": "bin/cli.js" - }, - "peerDependencies": { - "eslint": ">=7.0.0" - } - }, "node_modules/@synthetixio/synpress/node_modules/eslint-plugin-prettier": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.0.0.tgz", @@ -10055,9 +10100,9 @@ } }, "node_modules/@testing-library/dom": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.17.1.tgz", - "integrity": "sha512-KnH2MnJUzmFNPW6RIKfd+zf2Wue8mEKX0M3cpX6aKl5ZXrJM1/c/Pc8c2xDNYQCnJO48Sm5ITbMXgqTr3h4jxQ==", + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.19.0.tgz", + "integrity": "sha512-6YWYPPpxG3e/xOo6HIWwB/58HukkwIVTOaZ0VwdMVjhRUX/01E4FtQbck9GazOOj7MXHc5RBzMrU86iBJHbI+A==", "dev": true, "dependencies": { "@babel/code-frame": "^7.10.4", @@ -10309,18 +10354,18 @@ } }, "node_modules/@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", "dev": true, "engines": { - "node": ">= 6" + "node": ">= 10" } }, "node_modules/@truffle/abi-utils": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@truffle/abi-utils/-/abi-utils-0.3.1.tgz", - "integrity": "sha512-tieaDgwDm2IH1wJuVF/waREVFvzXHSF6AkQfd71DQwpwnrl/9I1iKu+1WpQyFqxu+6WMfCYhzMEbssQBt4Zniw==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@truffle/abi-utils/-/abi-utils-0.3.3.tgz", + "integrity": "sha512-/KpaaPi0daffnwLhFulMtwdQ7YfZZtj24J34kZJi7OQw9x0dSNSskGFTU5SEv9d3fOfHNYqCevsqtv1zek0+zg==", "dev": true, "optional": true, "dependencies": { @@ -10373,14 +10418,14 @@ "optional": true }, "node_modules/@truffle/codec": { - "version": "0.14.4", - "resolved": "https://registry.npmjs.org/@truffle/codec/-/codec-0.14.4.tgz", - "integrity": "sha512-il9dFzALUbd1JMPOVcxnIjTQ1fiJEPHfBYbqVQfWZfzAN0Kw+x1eaKunIU+NvrNRycvkXk4itWUTui5sMlXBBA==", + "version": "0.14.6", + "resolved": "https://registry.npmjs.org/@truffle/codec/-/codec-0.14.6.tgz", + "integrity": "sha512-0jPT2MCVTk+1OzkWj0h1Twyh7nP5VBdfqrFK6XjPJZggqmm0bLWexoRPeTrVlByjaKq7uih6bH8MnnoED1MMxQ==", "dev": true, "optional": true, "dependencies": { - "@truffle/abi-utils": "^0.3.1", - "@truffle/compile-common": "^0.8.0", + "@truffle/abi-utils": "^0.3.3", + "@truffle/compile-common": "^0.8.1", "big.js": "^6.0.3", "bn.js": "^5.1.3", "cbor": "^5.2.0", @@ -10444,9 +10489,9 @@ } }, "node_modules/@truffle/compile-common": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@truffle/compile-common/-/compile-common-0.8.0.tgz", - "integrity": "sha512-3mtEC73dQODTI3/ZwonunVHyPS2BGexXSBIv4pOgMrWwnZPcHlo2+IW2+m2At/DnZehL78bkF993Vti2pJfx6Q==", + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@truffle/compile-common/-/compile-common-0.8.1.tgz", + "integrity": "sha512-7mzzG9Cfrn+fDT5Sqi7B6pccvIIV5w/GM8/56YgnjysbDzy5aZ6mv0fe37ZbcznEVQ35NJjBy+lEr/ozOGXwQA==", "dev": true, "optional": true, "dependencies": { @@ -10455,18 +10500,18 @@ } }, "node_modules/@truffle/contract": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@truffle/contract/-/contract-4.6.0.tgz", - "integrity": "sha512-FxSR7WtV1q+1AKHhJmsbd360qFFjtkGPQeJfaDcn7wlOPG+axW9iLqLSUTlRpFkPKJnUILg2FujNM965rIQJtg==", + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/@truffle/contract/-/contract-4.6.3.tgz", + "integrity": "sha512-boiCnXxYUr+9Iy8hiJN8b6pZfTlwnBCTKjqs8dqrLbA3QTlqTmsxkMMLZrqdIY+WuAU3yT6ah/EWGqf1rMvbqQ==", "dev": true, "optional": true, "dependencies": { "@ensdomains/ensjs": "^2.1.0", "@truffle/blockchain-utils": "^0.1.4", - "@truffle/contract-schema": "^3.4.9", - "@truffle/debug-utils": "^6.0.34", + "@truffle/contract-schema": "^3.4.10", + "@truffle/debug-utils": "^6.0.36", "@truffle/error": "^0.1.1", - "@truffle/interface-adapter": "^0.5.21", + "@truffle/interface-adapter": "^0.5.23", "bignumber.js": "^7.2.1", "debug": "^4.3.1", "ethers": "^4.0.32", @@ -10478,9 +10523,9 @@ } }, "node_modules/@truffle/contract-schema": { - "version": "3.4.9", - "resolved": "https://registry.npmjs.org/@truffle/contract-schema/-/contract-schema-3.4.9.tgz", - "integrity": "sha512-nhYMXWbUs6dMYHL1f8DTkRk/uo1sADK0yeSYXo/p/7nqnjlHzqrr75BBsKbB7OFIVT05des+GFNQJqBaRZVdxQ==", + "version": "3.4.10", + "resolved": "https://registry.npmjs.org/@truffle/contract-schema/-/contract-schema-3.4.10.tgz", + "integrity": "sha512-BhRNRoRvlj2th6E5RNS0BnS0ZxQe01JJz8I7MjkGqdeXSvrn6qDCAnbmvhNgUv0l5h8w5+gBOQhAJhILf1shdQ==", "dev": true, "optional": true, "dependencies": { @@ -11083,13 +11128,13 @@ } }, "node_modules/@truffle/debug-utils": { - "version": "6.0.34", - "resolved": "https://registry.npmjs.org/@truffle/debug-utils/-/debug-utils-6.0.34.tgz", - "integrity": "sha512-GbGnC9ESJXYHjzQKOV6yeFzvXDnW1yIvpfHXyc4PMDnnFoqX2OxP8mGmMzFKW2Uhqg89wl4GMPLuxycMkodWrw==", + "version": "6.0.36", + "resolved": "https://registry.npmjs.org/@truffle/debug-utils/-/debug-utils-6.0.36.tgz", + "integrity": "sha512-oxqVAJOXLUsSpGK3ez0JLTgPoVUhGrvdkYKIfYVkED10lhCgh0HlJ/AbRkUPUV7KR9SKXK5BCDsTJlVbdqtMXA==", "dev": true, "optional": true, "dependencies": { - "@truffle/codec": "^0.14.4", + "@truffle/codec": "^0.14.6", "@trufflesuite/chromafi": "^3.0.0", "bn.js": "^5.1.3", "chalk": "^2.4.2", @@ -11105,9 +11150,9 @@ "optional": true }, "node_modules/@truffle/interface-adapter": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/@truffle/interface-adapter/-/interface-adapter-0.5.21.tgz", - "integrity": "sha512-2ltbu3upsWS0TAQu1kLQc048XlXNmDkCzH6iebX4dg3VBB+l7oG/pu5+/kl8t+LRfzGoEMLKwOQt7vk0Vm3PNA==", + "version": "0.5.23", + "resolved": "https://registry.npmjs.org/@truffle/interface-adapter/-/interface-adapter-0.5.23.tgz", + "integrity": "sha512-nU8kChKgcUP+tELId1PMgHnmd2KcBdBer59TxfVqAZXRmt6blm2tpBbGYtKzTIdZlf6kMqVbZXdB6u1CJDqfxg==", "dev": true, "optional": true, "dependencies": { @@ -11816,9 +11861,9 @@ } }, "node_modules/@types/babel__traverse": { - "version": "7.18.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.1.tgz", - "integrity": "sha512-FSdLaZh2UxaMuLp9lixWaHq/golWTRWOnRsAXzDTDSDOQLuZb1nsdCt6pJSPWSEQt2eFZ2YVk3oYhn+1kLMeMA==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.2.tgz", + "integrity": "sha512-FcFaxOr2V5KZCviw1TnutEMVUVsGt4D2hP1TAfXZAMKuHYW3xQhe3jTxNPWutgCJ3/X1c5yX8ZoGVEItxKbwBg==", "dev": true, "dependencies": { "@babel/types": "^7.3.0" @@ -11927,9 +11972,9 @@ } }, "node_modules/@types/har-format": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@types/har-format/-/har-format-1.2.8.tgz", - "integrity": "sha512-OP6L9VuZNdskgNN3zFQQ54ceYD8OLq5IbqO4VK91ORLfOm7WdT/CiT/pHEBSQEqCInJ2y3O6iCm/zGtPElpgJQ==" + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/@types/har-format/-/har-format-1.2.9.tgz", + "integrity": "sha512-rffW6MhQ9yoa75bdNi+rjZBAvu2HhehWJXlhuWXnWdENeuKe82wUgAwxYOb7KRKKmxYN+D/iRKd2NDQMLqlUmg==" }, "node_modules/@types/hast": { "version": "2.3.4", @@ -12002,6 +12047,23 @@ "pretty-format": "^27.0.0" } }, + "node_modules/@types/jsdom": { + "version": "16.2.15", + "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-16.2.15.tgz", + "integrity": "sha512-nwF87yjBKuX/roqGYerZZM0Nv1pZDMAT5YhOHYeM/72Fic+VEqJh4nyoqoapzJnW3pUlfxPY5FhgsJtM+dRnQQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/parse5": "^6.0.3", + "@types/tough-cookie": "*" + } + }, + "node_modules/@types/jsdom/node_modules/@types/parse5": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.3.tgz", + "integrity": "sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==", + "dev": true + }, "node_modules/@types/json-schema": { "version": "7.0.11", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", @@ -12091,9 +12153,9 @@ } }, "node_modules/@types/prettier": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.0.tgz", - "integrity": "sha512-RI1L7N4JnW5gQw2spvL7Sllfuf1SaHdrZpCHiBlCXjIlufi1SMNnbu2teze3/QE67Fg2tBlH7W+mi4hVNk4p0A==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ri0UmynRRvZiiUJdiz38MmIblKK+oH30MztdBVR95dv/Ubw6neWSb8u1XpRb72L4qsZOhz+L+z9JD40SJmfWow==", "dev": true }, "node_modules/@types/pretty-hrtime": { @@ -12108,9 +12170,9 @@ "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" }, "node_modules/@types/puppeteer": { - "version": "5.4.6", - "resolved": "https://registry.npmjs.org/@types/puppeteer/-/puppeteer-5.4.6.tgz", - "integrity": "sha512-98Kghehs7+/GD9b56qryhqdqVCXUTbetTv3PlvDnmFRTHQH0j9DIp1f7rkAW3BAj4U3yoeSEQnKgdW8bDq0Y0Q==", + "version": "5.4.7", + "resolved": "https://registry.npmjs.org/@types/puppeteer/-/puppeteer-5.4.7.tgz", + "integrity": "sha512-JdGWZZYL0vKapXF4oQTC5hLVNfOgdPrqeZ1BiQnGk5cB7HeE91EWUiTdVSdQPobRN8rIcdffjiOgCYJ/S8QrnQ==", "dev": true, "dependencies": { "@types/node": "*" @@ -12150,9 +12212,9 @@ } }, "node_modules/@types/react-dom/node_modules/@types/react": { - "version": "17.0.49", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.49.tgz", - "integrity": "sha512-CCBPMZaPhcKkYUTqFs/hOWqKjPxhTEmnZWjlHHgIMop67DsXywf9B5Os9Hz8KSacjNOgIdnZVJamwl232uxoPg==", + "version": "17.0.50", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.50.tgz", + "integrity": "sha512-ZCBHzpDb5skMnc1zFXAXnL3l1FAdi+xZvwxK+PkglMmBrwjpp9nKaWuEvrGnSifCJmBFGxZOOFuwC6KH/s0NuA==", "dev": true, "dependencies": { "@types/prop-types": "*", @@ -12161,9 +12223,9 @@ } }, "node_modules/@types/react-dom/node_modules/csstype": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz", - "integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==", "dev": true }, "node_modules/@types/react-input-autosize": { @@ -12176,9 +12238,9 @@ } }, "node_modules/@types/react-native": { - "version": "0.69.8", - "resolved": "https://registry.npmjs.org/@types/react-native/-/react-native-0.69.8.tgz", - "integrity": "sha512-KW5KQdg4vjG7Mo2muCTRSe3CwVNEROa4Hlh7wIkfv+be92jdFwq6tf+i1q7dD3wDnUinc/cVi/6/PJbGpbshEA==", + "version": "0.70.4", + "resolved": "https://registry.npmjs.org/@types/react-native/-/react-native-0.70.4.tgz", + "integrity": "sha512-z5tKfblHLG6jts2AQcioDw4N+F2EzflO9n495yNyqyMYRkSIVTLX64MHBeqMp5wfOY5mshy0GsOgnFSXrXKQSg==", "dev": true, "dependencies": { "@types/react": "*" @@ -12250,9 +12312,9 @@ } }, "node_modules/@types/react/node_modules/csstype": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz", - "integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" }, "node_modules/@types/responselike": { "version": "1.0.0", @@ -12277,6 +12339,12 @@ "@types/node": "*" } }, + "node_modules/@types/semver": { + "version": "7.3.12", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.12.tgz", + "integrity": "sha512-WwA1MW0++RfXmCr12xeYOOC5baSC9mSb0ZqCquFzKhcoF4TvHu5MKOuXsncgZcpVFhB1pXd5hZmM0ryAoCp12A==", + "dev": true + }, "node_modules/@types/sinonjs__fake-timers": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz", @@ -12314,9 +12382,9 @@ } }, "node_modules/@types/styled-components/node_modules/csstype": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz", - "integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==", "dev": true }, "node_modules/@types/tapable": { @@ -12467,6 +12535,12 @@ "@types/jest": "*" } }, + "node_modules/@types/tough-cookie": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.2.tgz", + "integrity": "sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==", + "dev": true + }, "node_modules/@types/uglify-js": { "version": "3.17.0", "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.17.0.tgz", @@ -12561,30 +12635,30 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz", - "integrity": "sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg==", + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.40.1.tgz", + "integrity": "sha512-FsWboKkWdytGiXT5O1/R9j37YgcjO8MKHSUmWnIEjVaz0krHkplPnYi7mwdb+5+cs0toFNQb0HIrN7zONdIEWg==", "dev": true, "dependencies": { - "@typescript-eslint/experimental-utils": "4.33.0", - "@typescript-eslint/scope-manager": "4.33.0", - "debug": "^4.3.1", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.1.8", - "regexpp": "^3.1.0", - "semver": "^7.3.5", + "@typescript-eslint/scope-manager": "5.40.1", + "@typescript-eslint/type-utils": "5.40.1", + "@typescript-eslint/utils": "5.40.1", + "debug": "^4.3.4", + "ignore": "^5.2.0", + "regexpp": "^3.2.0", + "semver": "^7.3.7", "tsutils": "^3.21.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^4.0.0", - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -12592,10 +12666,36 @@ } } }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/utils": { + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.40.1.tgz", + "integrity": "sha512-a2TAVScoX9fjryNrW6BZRnreDUszxqm9eQ9Esv8n5nXApMW0zeANUYlwh/DED04SC/ifuBvXgZpIK5xeJHQ3aw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.40.1", + "@typescript-eslint/types": "5.40.1", + "@typescript-eslint/typescript-estree": "5.40.1", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -12607,50 +12707,70 @@ "node": ">=10" } }, - "node_modules/@typescript-eslint/experimental-utils": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz", - "integrity": "sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q==", + "node_modules/@typescript-eslint/parser": { + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.40.1.tgz", + "integrity": "sha512-IK6x55va5w4YvXd4b3VrXQPldV9vQTxi5ov+g4pMANsXPTXOcfjx08CRR1Dfrcc51syPtXHF5bgLlMHYFrvQtg==", "dev": true, "dependencies": { - "@types/json-schema": "^7.0.7", - "@typescript-eslint/scope-manager": "4.33.0", - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/typescript-estree": "4.33.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" + "@typescript-eslint/scope-manager": "5.40.1", + "@typescript-eslint/types": "5.40.1", + "@typescript-eslint/typescript-estree": "5.40.1", + "debug": "^4.3.4" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "*" + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@typescript-eslint/parser": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.33.0.tgz", - "integrity": "sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA==", + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.40.1.tgz", + "integrity": "sha512-jkn4xsJiUQucI16OLCXrLRXDZ3afKhOIqXs4R3O+M00hdQLKR58WuyXPZZjhKLFCEP2g+TXdBRtLQ33UfAdRUg==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "4.33.0", - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/typescript-estree": "4.33.0", - "debug": "^4.3.1" + "@typescript-eslint/types": "5.40.1", + "@typescript-eslint/visitor-keys": "5.40.1" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.40.1.tgz", + "integrity": "sha512-DLAs+AHQOe6n5LRraXiv27IYPhleF0ldEmx6yBqBgBLaNRKTkffhV1RPsjoJBhVup2zHxfaRtan8/YRBgYhU9Q==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "5.40.1", + "@typescript-eslint/utils": "5.40.1", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" + "eslint": "*" }, "peerDependenciesMeta": { "typescript": { @@ -12658,30 +12778,54 @@ } } }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz", - "integrity": "sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==", + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/utils": { + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.40.1.tgz", + "integrity": "sha512-a2TAVScoX9fjryNrW6BZRnreDUszxqm9eQ9Esv8n5nXApMW0zeANUYlwh/DED04SC/ifuBvXgZpIK5xeJHQ3aw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0" + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.40.1", + "@typescript-eslint/types": "5.40.1", + "@typescript-eslint/typescript-estree": "5.40.1", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0", + "semver": "^7.3.7" }, "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, "node_modules/@typescript-eslint/types": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz", - "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==", + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.40.1.tgz", + "integrity": "sha512-Icg9kiuVJSwdzSQvtdGspOlWNjVDnF3qVIKXdJ103o36yRprdl3Ge5cABQx+csx960nuMF21v8qvO31v9t3OHw==", "dev": true, "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", @@ -12689,21 +12833,21 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz", - "integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==", + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.40.1.tgz", + "integrity": "sha512-5QTP/nW5+60jBcEPfXy/EZL01qrl9GZtbgDZtDPlfW5zj/zjNrdI2B5zMUHmOsfvOr2cWqwVdWjobCiHcedmQA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0", - "debug": "^4.3.1", - "globby": "^11.0.3", - "is-glob": "^4.0.1", - "semver": "^7.3.5", + "@typescript-eslint/types": "5.40.1", + "@typescript-eslint/visitor-keys": "5.40.1", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", "tsutils": "^3.21.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", @@ -12716,9 +12860,9 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -12731,17 +12875,18 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "5.36.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.36.2.tgz", - "integrity": "sha512-uNcopWonEITX96v9pefk9DC1bWMdkweeSsewJ6GeC7L6j2t0SJywisgkr9wUTtXk90fi2Eljj90HSHm3OGdGRg==", + "version": "5.40.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.40.0.tgz", + "integrity": "sha512-MO0y3T5BQ5+tkkuYZJBjePewsY+cQnfkYeRqS6tPh28niiIwPnQ1t59CSRcs1ZwJJNOdWw7rv9pF8aP58IMihA==", "dev": true, "dependencies": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.36.2", - "@typescript-eslint/types": "5.36.2", - "@typescript-eslint/typescript-estree": "5.36.2", + "@typescript-eslint/scope-manager": "5.40.0", + "@typescript-eslint/types": "5.40.0", + "@typescript-eslint/typescript-estree": "5.40.0", "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" + "eslint-utils": "^3.0.0", + "semver": "^7.3.7" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -12755,13 +12900,13 @@ } }, "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/scope-manager": { - "version": "5.36.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.36.2.tgz", - "integrity": "sha512-cNNP51L8SkIFSfce8B1NSUBTJTu2Ts4nWeWbFrdaqjmn9yKrAaJUBHkyTZc0cL06OFHpb+JZq5AUHROS398Orw==", + "version": "5.40.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.40.0.tgz", + "integrity": "sha512-d3nPmjUeZtEWRvyReMI4I1MwPGC63E8pDoHy0BnrYjnJgilBD3hv7XOiETKLY/zTwI7kCnBDf2vWTRUVpYw0Uw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.36.2", - "@typescript-eslint/visitor-keys": "5.36.2" + "@typescript-eslint/types": "5.40.0", + "@typescript-eslint/visitor-keys": "5.40.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -12772,9 +12917,9 @@ } }, "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": { - "version": "5.36.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.36.2.tgz", - "integrity": "sha512-9OJSvvwuF1L5eS2EQgFUbECb99F0mwq501w0H0EkYULkhFa19Qq7WFbycdw1PexAc929asupbZcgjVIe6OK/XQ==", + "version": "5.40.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.40.0.tgz", + "integrity": "sha512-V1KdQRTXsYpf1Y1fXCeZ+uhjW48Niiw0VGt4V8yzuaDTU8Z1Xl7yQDyQNqyAFcVhpYXIVCEuxSIWTsLDpHgTbw==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -12785,13 +12930,13 @@ } }, "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "5.36.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.36.2.tgz", - "integrity": "sha512-8fyH+RfbKc0mTspfuEjlfqA4YywcwQK2Amcf6TDOwaRLg7Vwdu4bZzyvBZp4bjt1RRjQ5MDnOZahxMrt2l5v9w==", + "version": "5.40.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.40.0.tgz", + "integrity": "sha512-b0GYlDj8TLTOqwX7EGbw2gL5EXS2CPEWhF9nGJiGmEcmlpNBjyHsTwbqpyIEPVpl6br4UcBOYlcI2FJVtJkYhg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.36.2", - "@typescript-eslint/visitor-keys": "5.36.2", + "@typescript-eslint/types": "5.40.0", + "@typescript-eslint/visitor-keys": "5.40.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -12812,12 +12957,12 @@ } }, "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/visitor-keys": { - "version": "5.36.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.36.2.tgz", - "integrity": "sha512-BtRvSR6dEdrNt7Net2/XDjbYKU5Ml6GqJgVfXT0CxTCJlnIqK7rAGreuWKMT2t8cFUT2Msv5oxw0GMRD7T5J7A==", + "version": "5.40.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.40.0.tgz", + "integrity": "sha512-ijJ+6yig+x9XplEpG2K6FUdJeQGGj/15U3S56W9IqXKJqleuD7zJ2AX/miLezwxpd7ZxDAqO87zWufKg+RPZyQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.36.2", + "@typescript-eslint/types": "5.40.0", "eslint-visitor-keys": "^3.3.0" }, "engines": { @@ -12838,9 +12983,9 @@ } }, "node_modules/@typescript-eslint/utils/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -12853,22 +12998,31 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz", - "integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==", + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.40.1.tgz", + "integrity": "sha512-A2DGmeZ+FMja0geX5rww+DpvILpwo1OsiQs0M+joPWJYsiEFBLsH0y1oFymPNul6Z5okSmHpP4ivkc2N0Cgfkw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "4.33.0", - "eslint-visitor-keys": "^2.0.0" + "@typescript-eslint/types": "5.40.1", + "eslint-visitor-keys": "^3.3.0" }, "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, "node_modules/@vanilla-extract/css": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/@vanilla-extract/css/-/css-1.7.0.tgz", @@ -12933,9 +13087,9 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/@vanilla-extract/css/node_modules/csstype": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz", - "integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" }, "node_modules/@vanilla-extract/css/node_modules/has-flag": { "version": "4.0.0", @@ -12978,9 +13132,9 @@ } }, "node_modules/@wagmi/core": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/@wagmi/core/-/core-0.5.5.tgz", - "integrity": "sha512-AZsO9IK+Gu5S+s48ZARmyOo59JfV4l2w3P8XtAPOSKnr8aRYK9t71V+bAgfkMxz5xArmkx4qEpnhlAWFCax+KA==", + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/@wagmi/core/-/core-0.5.8.tgz", + "integrity": "sha512-1mABf1bXyn3AOHyQkios4FTGqoARa8y1tf7GMH6t1c7q0nAMSbpXoTDdjEidUHy8qhWoG0y3Ez4PjCi8WQnmMg==", "funding": [ { "type": "gitcoin", @@ -13717,9 +13871,9 @@ "dev": true }, "node_modules/abi-coder": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/abi-coder/-/abi-coder-4.0.0.tgz", - "integrity": "sha512-kR3+QqAbvG+nBR3dE6tgxiaxyu9dJl40y7WXwmMqAaatg0E8xn37XkS/bBUozQ45KWqQnUHt4TtLcvad+X9Z5g==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/abi-coder/-/abi-coder-4.1.1.tgz", + "integrity": "sha512-CVEKpbWSIrb6JxLPsAuXrrtL8ml2MnEEcINgxOp7gR2u4GUFEKO4e0raAD1+c6UdFJ2QtX2NRoYol9k1B3TxHw==", "dependencies": { "@ethersproject/abi": "^5.0.0", "@ethersproject/keccak256": "^5.0.0", @@ -13736,9 +13890,9 @@ } }, "node_modules/abortcontroller-polyfill": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.3.tgz", - "integrity": "sha512-zetDJxd89y3X99Kvo4qFx8GKlt6GsvN3UcRZHwU6iFA/0KiOmhkTVhe8oRoTBiTVPZu09x3vCra47+w8Yz1+2Q==", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.5.tgz", + "integrity": "sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ==", "dev": true }, "node_modules/abstract-leveldown": { @@ -13815,9 +13969,9 @@ } }, "node_modules/address": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/address/-/address-1.2.0.tgz", - "integrity": "sha512-tNEZYz5G/zYunxFm7sfhAxkXEuLj3K6BKwv6ZURlsF6yiUQ65z0Q2wZW9L5cPUl9ocofGvXOdFYbFHp0+6MOig==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/address/-/address-1.2.1.tgz", + "integrity": "sha512-B+6bi5D34+fDYENiH5qOlA0cV2rAGKuWZ9LeyUUehbXy8e0VS9e498yO0Jeeh+iM+6KbfudHTFjXw2MmJD4QRA==", "dev": true, "engines": { "node": ">= 10.0.0" @@ -14965,73 +15119,73 @@ } }, "node_modules/babel-jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", - "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-28.1.3.tgz", + "integrity": "sha512-epUaPOEWMk3cWX0M/sPvCHHCe9fMFAa/9hXEgKP8nFfNl/jlGkE9ucq9NqkZGXLDduCJYS0UvSlPUwC0S+rH6Q==", "dev": true, "dependencies": { - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/transform": "^28.1.3", "@types/babel__core": "^7.1.14", "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^27.5.1", + "babel-preset-jest": "^28.1.3", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "slash": "^3.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" }, "peerDependencies": { "@babel/core": "^7.8.0" } }, "node_modules/babel-jest/node_modules/@jest/transform": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", - "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-28.1.3.tgz", + "integrity": "sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA==", "dev": true, "dependencies": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.5.1", + "@babel/core": "^7.11.6", + "@jest/types": "^28.1.3", + "@jridgewell/trace-mapping": "^0.3.13", "babel-plugin-istanbul": "^6.1.1", "chalk": "^4.0.0", "convert-source-map": "^1.4.0", "fast-json-stable-stringify": "^2.0.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-util": "^27.5.1", + "jest-haste-map": "^28.1.3", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.1.3", "micromatch": "^4.0.4", "pirates": "^4.0.4", "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" + "write-file-atomic": "^4.0.1" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/babel-jest/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", "dev": true, "dependencies": { + "@jest/schemas": "^28.1.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^16.0.0", + "@types/yargs": "^17.0.8", "chalk": "^4.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/babel-jest/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -15096,60 +15250,46 @@ } }, "node_modules/babel-jest/node_modules/jest-haste-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", - "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz", + "integrity": "sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", - "@types/graceful-fs": "^4.1.2", + "@jest/types": "^28.1.3", + "@types/graceful-fs": "^4.1.3", "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.1.3", + "jest-worker": "^28.1.3", "micromatch": "^4.0.4", - "walker": "^1.0.7" + "walker": "^1.0.8" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" }, "optionalDependencies": { "fsevents": "^2.3.2" } }, "node_modules/babel-jest/node_modules/jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", "dev": true, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/babel-jest/node_modules/jest-serializer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", - "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", - "dev": true, - "dependencies": { - "@types/node": "*", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/babel-jest/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", + "@jest/types": "^28.1.3", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -15157,7 +15297,7 @@ "picomatch": "^2.2.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/babel-jest/node_modules/supports-color": { @@ -15172,6 +15312,19 @@ "node": ">=8" } }, + "node_modules/babel-jest/node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, "node_modules/babel-loader": { "version": "8.2.5", "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.5.tgz", @@ -15403,18 +15556,18 @@ } }, "node_modules/babel-plugin-jest-hoist": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", - "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.1.3.tgz", + "integrity": "sha512-Ys3tUKAmfnkRUpPdpa98eYrAR0nV+sSFUZZEGuQ2EbFd1y4SOLtD5QDNHAq+bb9a+bbXvYQC4b+ID/THIMcU6Q==", "dev": true, "dependencies": { "@babel/template": "^7.3.3", "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", + "@types/babel__core": "^7.1.14", "@types/babel__traverse": "^7.0.6" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/babel-plugin-macros": { @@ -15432,12 +15585,12 @@ } }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.2.tgz", - "integrity": "sha512-LPnodUl3lS0/4wN3Rb+m+UK8s7lj2jcLRrjho4gLw+OJs+I4bvGXshINesY5xx/apM+biTnQ9reDI8yj+0M5+Q==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", + "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", "dependencies": { "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.3.2", + "@babel/helper-define-polyfill-provider": "^0.3.3", "semver": "^6.1.1" }, "peerDependencies": { @@ -15445,23 +15598,23 @@ } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.3.tgz", - "integrity": "sha512-zKsXDh0XjnrUEW0mxIHLfjBfnXSMr5Q/goMe/fxpQnLm07mcOZiIZHBNWCMx60HmdvjxfXcalac0tfFg0wqxyw==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", + "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.2", - "core-js-compat": "^3.21.0" + "@babel/helper-define-polyfill-provider": "^0.3.3", + "core-js-compat": "^3.25.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.0.tgz", - "integrity": "sha512-RW1cnryiADFeHmfLS+WW/G431p1PsW5qdRdz0SDRi7TKcUgc7Oh/uXkT7MZ/+tGsT1BkczEAmD5XjUyJ5SWDTw==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", + "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.2" + "@babel/helper-define-polyfill-provider": "^0.3.3" }, "peerDependencies": { "@babel/core": "^7.0.0-0" @@ -15963,16 +16116,16 @@ } }, "node_modules/babel-preset-jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", - "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-28.1.3.tgz", + "integrity": "sha512-L+fupJvlWAHbQfn74coNX3zf60LXMJsezNvvx8eIh7iOR1luJ1poxYgQk1F8PYtNq/6QODDHCqsSnTFSWC491A==", "dev": true, "dependencies": { - "babel-plugin-jest-hoist": "^27.5.1", + "babel-plugin-jest-hoist": "^28.1.3", "babel-preset-current-node-syntax": "^1.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" }, "peerDependencies": { "@babel/core": "^7.0.0" @@ -17047,9 +17200,9 @@ "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" }, "node_modules/body-parser": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", - "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", "dev": true, "dependencies": { "bytes": "3.1.2", @@ -17060,7 +17213,7 @@ "http-errors": "2.0.0", "iconv-lite": "0.4.24", "on-finished": "2.4.1", - "qs": "6.10.3", + "qs": "6.11.0", "raw-body": "2.5.1", "type-is": "~1.6.18", "unpipe": "1.0.0" @@ -17094,21 +17247,6 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, - "node_modules/body-parser/node_modules/qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", - "dev": true, - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", @@ -17465,9 +17603,9 @@ } }, "node_modules/browserslist": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz", - "integrity": "sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==", + "version": "4.21.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", + "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", "funding": [ { "type": "opencollective", @@ -17479,10 +17617,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001370", - "electron-to-chromium": "^1.4.202", + "caniuse-lite": "^1.0.30001400", + "electron-to-chromium": "^1.4.251", "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.5" + "update-browserslist-db": "^1.0.9" }, "bin": { "browserslist": "cli.js" @@ -17625,6 +17763,17 @@ "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", "dev": true }, + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, "node_modules/bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", @@ -17669,6 +17818,17 @@ "node": ">=10.12.0" } }, + "node_modules/c8/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, "node_modules/c8/node_modules/istanbul-lib-coverage": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", @@ -17678,18 +17838,22 @@ "node": ">=8" } }, - "node_modules/c8/node_modules/v8-to-istanbul": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz", - "integrity": "sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==", + "node_modules/c8/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0" + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" }, "engines": { - "node": ">=10.12.0" + "node": ">=10" } }, "node_modules/cacache": { @@ -17936,14 +18100,17 @@ } }, "node_modules/camelize": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz", - "integrity": "sha512-W2lPwkBkMZwFlPCXhIlYgxu+7gC/NUlCtdK652DAJ1JdgV0sTrvuPFshNPrFa1TY2JOkLhgdeEBplB4ezEa+xg==" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz", + "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/caniuse-lite": { - "version": "1.0.30001393", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001393.tgz", - "integrity": "sha512-N/od11RX+Gsk+1qY/jbPa0R6zJupEa0lxeBG598EbrtblxVCTJsQwbRBm6+V+rxpc5lHKdsXb9RY83cZIPLseA==", + "version": "1.0.30001419", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001419.tgz", + "integrity": "sha512-aFO1r+g6R7TW+PNQxKzjITwLOyDhVRLjW0LcwS/HCZGUUKTGNp9+IwLC4xyDSZBygVL/mxaFR3HIV6wEKQuSzw==", "funding": [ { "type": "opencollective", @@ -18490,9 +18657,9 @@ } }, "node_modules/ci-info": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", - "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.5.0.tgz", + "integrity": "sha512-yH4RezKOGlOhxkmhbeNuC4eYZKAUsEaGtBuBzDDP1eFUKiccDWzBABxBfOx31IDwDIXMTxWuwAxUGModvkbuVw==", "dev": true }, "node_modules/cids": { @@ -18660,9 +18827,9 @@ } }, "node_modules/classnames": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.1.tgz", - "integrity": "sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==" + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz", + "integrity": "sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==" }, "node_modules/clean-css": { "version": "4.2.4", @@ -18731,9 +18898,9 @@ } }, "node_modules/cli-table3": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.2.tgz", - "integrity": "sha512-QyavHCaIC80cMivimWu4aWHilIpiDpfm3hGmqAmXVL1UsnbLuBSMd21hTX6VY4ZSDSM73ESLeF8TOYId3rBTbw==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", + "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", "dev": true, "dependencies": { "string-width": "^4.2.0" @@ -18943,14 +19110,17 @@ } }, "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, "dependencies": { "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", + "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" } }, "node_modules/clone": { @@ -19451,17 +19621,9 @@ } }, "node_modules/convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dependencies": { - "safe-buffer": "~5.1.1" - } - }, - "node_modules/convert-source-map/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" }, "node_modules/cookie": { "version": "0.5.0", @@ -19545,9 +19707,9 @@ } }, "node_modules/core-js": { - "version": "3.25.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.25.1.tgz", - "integrity": "sha512-sr0FY4lnO1hkQ4gLDr24K0DGnweGO1QwSj5BpfQjpSJPdqWalja4cTps29Y/PJVG/P7FYlPDkH3hO+Tr0CvDgQ==", + "version": "3.25.5", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.25.5.tgz", + "integrity": "sha512-nbm6eZSjm+ZuBQxCUPQKQCoUEfFOXjUZ8dTTyikyKaWrTYmAVbykQfwsKE5dBK88u3QCkCrzsx/PPlKfhsvgpw==", "dev": true, "hasInstallScript": true, "funding": { @@ -19556,11 +19718,11 @@ } }, "node_modules/core-js-compat": { - "version": "3.25.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.25.1.tgz", - "integrity": "sha512-pOHS7O0i8Qt4zlPW/eIFjwp+NrTPx+wTL0ctgI2fHn31sZOq89rDsmtc/A2vAX7r6shl+bmVI+678He46jgBlw==", + "version": "3.25.5", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.25.5.tgz", + "integrity": "sha512-ovcyhs2DEBUIE0MGEKHP4olCUW/XYte3Vroyxuh38rD1wAO4dHohsovUC4eAOuzFxE6b+RXvBU3UZ9o0YhUTkA==", "dependencies": { - "browserslist": "^4.21.3" + "browserslist": "^4.21.4" }, "funding": { "type": "opencollective", @@ -19568,9 +19730,9 @@ } }, "node_modules/core-js-pure": { - "version": "3.25.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.25.1.tgz", - "integrity": "sha512-7Fr74bliUDdeJCBMxkkIuQ4xfxn/SwrVg+HkJUAoNEXVqYLv55l6Af0dJ5Lq2YBUW9yKqSkLXaS5SYPK6MGa/A==", + "version": "3.25.5", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.25.5.tgz", + "integrity": "sha512-oml3M22pHM+igfWHDfdLVq2ShWmjM2V4L+dQEBs0DWVIqEm9WHCwGAlZ6BmyBQGy5sFrJmcx+856D9lVKyGWYg==", "dev": true, "hasInstallScript": true, "funding": { @@ -20313,9 +20475,9 @@ } }, "node_modules/cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", + "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", "dev": true }, "node_modules/cssstyle": { @@ -20337,9 +20499,9 @@ "dev": true }, "node_modules/csstype": { - "version": "2.6.20", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.20.tgz", - "integrity": "sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA==" + "version": "2.6.21", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.21.tgz", + "integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==" }, "node_modules/currently-unhandled": { "version": "0.4.1", @@ -20441,9 +20603,9 @@ "dev": true }, "node_modules/cypress/node_modules/@types/node": { - "version": "14.18.28", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.28.tgz", - "integrity": "sha512-CK2fnrQlIgKlCV3N2kM+Gznb5USlwA1KFX3rJVHmgVk6NJxFPuQ86pAcvKnu37IA4BGlSRz7sEE1lHL1aLZ/eQ==", + "version": "14.18.32", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.32.tgz", + "integrity": "sha512-Y6S38pFr04yb13qqHf8uk1nHE3lXgQ30WZbv1mLliV9pt0NjvqdWttLcrOYLnXbOafknVYRHZGoMSpR9UwfYow==", "dev": true }, "node_modules/cypress/node_modules/ansi-styles": { @@ -20550,9 +20712,9 @@ } }, "node_modules/cypress/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -20614,17 +20776,30 @@ } }, "node_modules/data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", + "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", "dev": true, "dependencies": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" + "abab": "^2.0.6", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0" }, "engines": { - "node": ">=10" + "node": ">=12" + } + }, + "node_modules/data-urls/node_modules/whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "dev": true, + "dependencies": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" } }, "node_modules/date-fns": { @@ -20678,9 +20853,9 @@ } }, "node_modules/decimal.js": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.0.tgz", - "integrity": "sha512-Nv6ENEzyPQ6AItkGwLE2PGKinZZ9g59vSh2BeH6NqPu0OTKZ5ruJsVqh/orbAnqXc9pBbgXAIrc2EyaCj8NpGg==", + "version": "10.4.2", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.2.tgz", + "integrity": "sha512-ic1yEvwT6GuvaYwBLLY6/aFFgjZdySKTE8en/fkU3QICTmRtgtSlFn0u0BXN06InZwtfCelR7j8LRiDI/02iGA==", "dev": true }, "node_modules/decode-uri-component": { @@ -20940,15 +21115,18 @@ } }, "node_modules/default-require-extensions": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.0.tgz", - "integrity": "sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.1.tgz", + "integrity": "sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw==", "dev": true, "dependencies": { "strip-bom": "^4.0.0" }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/defer-to-connect": { @@ -21004,10 +21182,13 @@ } }, "node_modules/defined": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", - "integrity": "sha512-Y2caI5+ZwS5c3RiNDJ6u53VhQHv+hHKwhkI1iHvceKUHw9Df6EK2zRLfjejRgMuCuxK7PfSWIMwWecceVvThjQ==", - "dev": true + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", + "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/delay": { "version": "5.0.0", @@ -21182,37 +21363,19 @@ } }, "node_modules/detect-port": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.3.0.tgz", - "integrity": "sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.5.1.tgz", + "integrity": "sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==", "dev": true, "dependencies": { "address": "^1.0.1", - "debug": "^2.6.0" + "debug": "4" }, "bin": { - "detect": "bin/detect-port", - "detect-port": "bin/detect-port" - }, - "engines": { - "node": ">= 4.2.1" + "detect": "bin/detect-port.js", + "detect-port": "bin/detect-port.js" } }, - "node_modules/detect-port/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/detect-port/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, "node_modules/detective": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", @@ -21315,9 +21478,9 @@ } }, "node_modules/dom-helpers/node_modules/csstype": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz", - "integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" }, "node_modules/dom-serializer": { "version": "1.4.1", @@ -21359,24 +21522,15 @@ ] }, "node_modules/domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", + "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", "dev": true, "dependencies": { - "webidl-conversions": "^5.0.0" + "webidl-conversions": "^7.0.0" }, "engines": { - "node": ">=8" - } - }, - "node_modules/domexception/node_modules/webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", - "dev": true, - "engines": { - "node": ">=8" + "node": ">=12" } }, "node_modules/domhandler": { @@ -21598,9 +21752,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.246", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.246.tgz", - "integrity": "sha512-/wFCHUE+Hocqr/LlVGsuKLIw4P2lBWwFIDcNMDpJGzyIysQV4aycpoOitAs32FT94EHKnNqDR/CVZJFbXEufJA==" + "version": "1.4.281", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.281.tgz", + "integrity": "sha512-yer0w5wCYdFoZytfmbNhwiGI/3cW06+RV7E23ln4490DVMxs7PvYpbsrSmAiBn/V6gode8wvJlST2YfWgvzWIg==" }, "node_modules/elliptic": { "version": "6.5.4", @@ -21628,12 +21782,12 @@ "dev": true }, "node_modules/emittery": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", - "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", + "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==", "dev": true, "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { "url": "https://github.com/sindresorhus/emittery?sponsor=1" @@ -21789,21 +21943,21 @@ } }, "node_modules/es-abstract": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.2.tgz", - "integrity": "sha512-XxXQuVNrySBNlEkTYJoDNFe5+s2yIOpzq80sUHEdPdQr0S5nTLz4ZPPPswNIpKseDDUS5yghX1gfLIHQZ1iNuQ==", + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz", + "integrity": "sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==", "dependencies": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.2", + "get-intrinsic": "^1.1.3", "get-symbol-description": "^1.0.0", "has": "^1.0.3", "has-property-descriptors": "^1.0.0", "has-symbols": "^1.0.3", "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", + "is-callable": "^1.2.7", "is-negative-zero": "^2.0.2", "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.2", @@ -21813,6 +21967,7 @@ "object-keys": "^1.1.1", "object.assign": "^4.1.4", "regexp.prototype.flags": "^1.4.3", + "safe-regex-test": "^1.0.0", "string.prototype.trimend": "^1.0.5", "string.prototype.trimstart": "^1.0.5", "unbox-primitive": "^1.0.2" @@ -22049,18 +22204,15 @@ } }, "node_modules/eslint-config-prettier": { - "version": "6.10.1", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.10.1.tgz", - "integrity": "sha512-svTy6zh1ecQojvpbJSgH3aei/Rt7C6i090l5f2WQ4aB05lYHeZIR1qL4wZyyILTbtmnbHP5Yn8MrsOJMGa8RkQ==", + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", + "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", "dev": true, - "dependencies": { - "get-stdin": "^6.0.0" - }, "bin": { - "eslint-config-prettier-check": "bin/cli.js" + "eslint-config-prettier": "bin/cli.js" }, "peerDependencies": { - "eslint": ">=3.14.1" + "eslint": ">=7.0.0" } }, "node_modules/eslint-config-react-app": { @@ -22482,9 +22634,9 @@ } }, "node_modules/eslint-plugin-testing-library": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.6.2.tgz", - "integrity": "sha512-imakD/MY+8Rp3r69G7Pt1egmLZscSWoIhrxgdVR3kr2nlHImRRh7LeFcoqfAA5CK1rzFFV6rBEp3GTfOEYMpNw==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.7.2.tgz", + "integrity": "sha512-0ZmHeR/DUUgEzW8rwUBRWxuqntipDtpvxK0hymdHnLlABryJkzd+CAHr+XnISaVsTisZ5MLHp6nQF+8COHLLTA==", "dev": true, "dependencies": { "@typescript-eslint/utils": "^5.13.0" @@ -22514,12 +22666,12 @@ } }, "node_modules/eslint-plugin-ui-testing/node_modules/@typescript-eslint/experimental-utils": { - "version": "5.36.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.36.2.tgz", - "integrity": "sha512-JtRmWb31KQoxGV6CHz8cI+9ki6cC7ciZepXYpCLxsdAtQlBrRBxh5Qpe/ZHyJFOT9j7gyXE+W0shWzRLPfuAFQ==", + "version": "5.40.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.40.0.tgz", + "integrity": "sha512-wDYn3NYqVOmJI4iSkyWxXUu8Xoa4+OCh97YOXZecMCuXFIgCuxOCOlkR4kZyeXWNrulFyXPcXSbs4USb5IwI8g==", "dev": true, "dependencies": { - "@typescript-eslint/utils": "5.36.2" + "@typescript-eslint/utils": "5.40.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -22564,9 +22716,9 @@ } }, "node_modules/eslint-plugin-unicorn/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -22760,9 +22912,9 @@ } }, "node_modules/eslint/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -23367,11 +23519,11 @@ "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==" }, "node_modules/ethereum-block-by-date": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/ethereum-block-by-date/-/ethereum-block-by-date-1.4.5.tgz", - "integrity": "sha512-mxDUx+yxIGPgKz82HjijFDCoZLT+in+p3tHJ82JDQTLDUl92uNDCNF85PPvchgzrhRlwDM4F0q7/qed5MeJKNw==", + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/ethereum-block-by-date/-/ethereum-block-by-date-1.4.6.tgz", + "integrity": "sha512-MV7QAjeTl3zuVSeRfNdXeJQCfiwc4wCIXiLMnWqarmhyXzzUqq36+aDsqBFbV/D07WiW5JiuQ7KVtLLaqt6WQw==", "dependencies": { - "moment": "^2.29.2" + "moment": "^2.29.4" } }, "node_modules/ethereum-bloom-filters": { @@ -23703,6 +23855,83 @@ "@ethersproject/wordlists": "5.7.0" } }, + "node_modules/ethers/node_modules/@ethersproject/networks": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.0.tgz", + "integrity": "sha512-MG6oHSQHd4ebvJrleEQQ4HhVu8Ichr0RDYEfHzsVAVjHNM+w36x9wp9r+hf1JstMXtseXDtkiVoARAG6M959AA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/ethers/node_modules/@ethersproject/providers": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.0.tgz", + "integrity": "sha512-+TTrrINMzZ0aXtlwO/95uhAggKm4USLm1PbeCBR/3XZ7+Oey+3pMyddzZEyRhizHpy1HXV0FRWRMI1O3EGYibA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/base64": "^5.7.0", + "@ethersproject/basex": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/networks": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/random": "^5.7.0", + "@ethersproject/rlp": "^5.7.0", + "@ethersproject/sha2": "^5.7.0", + "@ethersproject/strings": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/web": "^5.7.0", + "bech32": "1.1.4", + "ws": "7.4.6" + } + }, + "node_modules/ethers/node_modules/@ethersproject/web": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.0.tgz", + "integrity": "sha512-ApHcbbj+muRASVDSCl/tgxaH2LBkRMEYfLOLVa0COipx0+nlu0QKet7U2lEg0vdkh8XRSLf2nd1f1Uk9SrVSGA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/base64": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, "node_modules/etherscan-api": { "version": "10.0.5", "resolved": "https://registry.npmjs.org/etherscan-api/-/etherscan-api-10.0.5.tgz", @@ -23798,9 +24027,9 @@ } }, "node_modules/eventemitter2": { - "version": "6.4.8", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.8.tgz", - "integrity": "sha512-pAJurPyD+Nj/pfz8m0usKF1RW0E9gfY4Dfdem2l6jZbqcZlK8SP93qUMCv9V9FgOn+GSZEW6qeaglpf/vQ9D5A==", + "version": "6.4.9", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.9.tgz", + "integrity": "sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg==", "dev": true }, "node_modules/eventemitter3": { @@ -24154,40 +24383,42 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/expect": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", - "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/expect/-/expect-28.1.3.tgz", + "integrity": "sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1" + "@jest/expect-utils": "^28.1.3", + "jest-get-type": "^28.0.2", + "jest-matcher-utils": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-util": "^28.1.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/expect/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", "dev": true, "dependencies": { + "@jest/schemas": "^28.1.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^16.0.0", + "@types/yargs": "^17.0.8", "chalk": "^4.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/expect/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -24251,6 +24482,23 @@ "node": ">=8" } }, + "node_modules/expect/node_modules/jest-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", + "dev": true, + "dependencies": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/expect/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -24264,14 +24512,14 @@ } }, "node_modules/express": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", - "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", "dev": true, "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.0", + "body-parser": "1.20.1", "content-disposition": "0.5.4", "content-type": "~1.0.4", "cookie": "0.5.0", @@ -24290,7 +24538,7 @@ "parseurl": "~1.3.3", "path-to-regexp": "0.1.7", "proxy-addr": "~2.0.7", - "qs": "6.10.3", + "qs": "6.11.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", "send": "0.18.0", @@ -24320,21 +24568,6 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, - "node_modules/express/node_modules/qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", - "dev": true, - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/ext": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", @@ -24640,9 +24873,9 @@ } }, "node_modules/fb-watchman": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", "dev": true, "dependencies": { "bser": "2.1.1" @@ -25228,9 +25461,9 @@ } }, "node_modules/focus-lock": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/focus-lock/-/focus-lock-0.11.2.tgz", - "integrity": "sha512-pZ2bO++NWLHhiKkgP1bEXHhR1/OjVcSvlCJ98aNJDFeb7H5OOQaO+SKOZle6041O9rv2tmbrO4JzClAvDUHf0g==", + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/focus-lock/-/focus-lock-0.11.3.tgz", + "integrity": "sha512-4n0pYcPTa/uI7Q66BZna61nRT7lDhnuJ9PJr6wiDjx4uStg491ks41y7uOG+s0umaaa+hulNKSldU9aTg9/yVg==", "dependencies": { "tslib": "^2.0.3" }, @@ -25239,9 +25472,9 @@ } }, "node_modules/follow-redirects": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", - "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", "funding": [ { "type": "individual", @@ -25427,9 +25660,9 @@ } }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -25693,9 +25926,9 @@ } }, "node_modules/get-intrinsic": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", - "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", + "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -25733,15 +25966,6 @@ "node": ">=4" } }, - "node_modules/get-stdin": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", - "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/get-stream": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", @@ -26602,15 +26826,15 @@ "dev": true }, "node_modules/html-encoding-sniffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", - "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", "dev": true, "dependencies": { - "whatwg-encoding": "^1.0.5" + "whatwg-encoding": "^2.0.0" }, "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/html-entities": { @@ -26805,12 +27029,12 @@ "dev": true }, "node_modules/http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", "dev": true, "dependencies": { - "@tootallnate/once": "1", + "@tootallnate/once": "2", "agent-base": "6", "debug": "4" }, @@ -28108,9 +28332,9 @@ } }, "node_modules/is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "engines": { "node": ">= 0.4" }, @@ -28735,9 +28959,9 @@ } }, "node_modules/istanbul-lib-instrument": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz", - "integrity": "sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", "dev": true, "dependencies": { "@babel/core": "^7.12.3", @@ -28933,20 +29157,20 @@ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, "node_modules/jest": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.3.1.tgz", - "integrity": "sha512-U2AX0AgQGd5EzMsiZpYt8HyZ+nSVIh5ujQ9CPp9EQZJMjXIiSZpJNweZl0swatKRoqHWgGKM3zaSwm4Zaz87ng==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-28.1.0.tgz", + "integrity": "sha512-TZR+tHxopPhzw3c3560IJXZWLNHgpcz1Zh0w5A65vynLGNcg/5pZ+VildAd7+XGOu6jd58XMY/HNn0IkZIXVXg==", "dev": true, "dependencies": { - "@jest/core": "^27.3.1", + "@jest/core": "^28.1.0", "import-local": "^3.0.2", - "jest-cli": "^27.3.1" + "jest-cli": "^28.1.0" }, "bin": { "jest": "bin/jest.js" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" @@ -28958,93 +29182,18 @@ } }, "node_modules/jest-changed-files": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", - "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-28.1.3.tgz", + "integrity": "sha512-esaOfUWJXk2nfZt9SPyC8gA1kNfdKLkQWyzsMlqq8msYSlNKfmZxfRgZn4Cd4MGVUF+7v6dBs0d5TOAKa7iIiA==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", "execa": "^5.0.0", - "throat": "^6.0.1" + "p-limit": "^3.1.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/jest-changed-files/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-changed-files/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-changed-files/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-changed-files/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-changed-files/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-changed-files/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "node_modules/jest-changed-files/node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -29080,15 +29229,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-changed-files/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-changed-files/node_modules/human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", @@ -29098,68 +29238,57 @@ "node": ">=10.17.0" } }, - "node_modules/jest-changed-files/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-circus": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", - "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-28.1.3.tgz", + "integrity": "sha512-cZ+eS5zc79MBwt+IhQhiEp0OeBddpc1n8MBo1nMB8A7oPMKEO+Sre+wHaLJexQUj9Ya/8NOBY0RESUgYjB6fow==", "dev": true, "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/environment": "^28.1.3", + "@jest/expect": "^28.1.3", + "@jest/test-result": "^28.1.3", + "@jest/types": "^28.1.3", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", "dedent": "^0.7.0", - "expect": "^27.5.1", "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", + "jest-each": "^28.1.3", + "jest-matcher-utils": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-runtime": "^28.1.3", + "jest-snapshot": "^28.1.3", + "jest-util": "^28.1.3", + "p-limit": "^3.1.0", + "pretty-format": "^28.1.3", "slash": "^3.0.0", - "stack-utils": "^2.0.3", - "throat": "^6.0.1" + "stack-utils": "^2.0.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-circus/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", "dev": true, "dependencies": { + "@jest/schemas": "^28.1.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^16.0.0", + "@types/yargs": "^17.0.8", "chalk": "^4.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-circus/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -29224,12 +29353,12 @@ } }, "node_modules/jest-circus/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", + "@jest/types": "^28.1.3", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -29237,7 +29366,34 @@ "picomatch": "^2.2.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-circus/node_modules/pretty-format": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", + "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.1.3", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-circus/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/jest-circus/node_modules/supports-color": { @@ -29253,29 +29409,29 @@ } }, "node_modules/jest-cli": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", - "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-28.1.3.tgz", + "integrity": "sha512-roY3kvrv57Azn1yPgdTebPAXvdR2xfezaKKYzVxZ6It/5NCxzJym6tUI5P1zkdWhfUYkxEI9uZWcQdaFLo8mJQ==", "dev": true, "dependencies": { - "@jest/core": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/core": "^28.1.3", + "@jest/test-result": "^28.1.3", + "@jest/types": "^28.1.3", "chalk": "^4.0.0", "exit": "^0.1.2", "graceful-fs": "^4.2.9", "import-local": "^3.0.2", - "jest-config": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", + "jest-config": "^28.1.3", + "jest-util": "^28.1.3", + "jest-validate": "^28.1.3", "prompts": "^2.0.1", - "yargs": "^16.2.0" + "yargs": "^17.3.1" }, "bin": { "jest": "bin/jest.js" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" @@ -29287,25 +29443,26 @@ } }, "node_modules/jest-cli/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", "dev": true, "dependencies": { + "@jest/schemas": "^28.1.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^16.0.0", + "@types/yargs": "^17.0.8", "chalk": "^4.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-cli/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -29370,12 +29527,12 @@ } }, "node_modules/jest-cli/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", + "@jest/types": "^28.1.3", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -29383,7 +29540,7 @@ "picomatch": "^2.2.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-cli/node_modules/supports-color": { @@ -29399,68 +29556,71 @@ } }, "node_modules/jest-config": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", - "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-28.1.3.tgz", + "integrity": "sha512-MG3INjByJ0J4AsNBm7T3hsuxKQqFIiRo/AUqb1q9LRKI5UU6Aar9JHbr9Ivn1TVwfUD9KirRoM/T6u8XlcQPHQ==", "dev": true, "dependencies": { - "@babel/core": "^7.8.0", - "@jest/test-sequencer": "^27.5.1", - "@jest/types": "^27.5.1", - "babel-jest": "^27.5.1", + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^28.1.3", + "@jest/types": "^28.1.3", + "babel-jest": "^28.1.3", "chalk": "^4.0.0", "ci-info": "^3.2.0", "deepmerge": "^4.2.2", - "glob": "^7.1.1", + "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-circus": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-jasmine2": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", + "jest-circus": "^28.1.3", + "jest-environment-node": "^28.1.3", + "jest-get-type": "^28.0.2", + "jest-regex-util": "^28.0.2", + "jest-resolve": "^28.1.3", + "jest-runner": "^28.1.3", + "jest-util": "^28.1.3", + "jest-validate": "^28.1.3", "micromatch": "^4.0.4", "parse-json": "^5.2.0", - "pretty-format": "^27.5.1", + "pretty-format": "^28.1.3", "slash": "^3.0.0", "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" }, "peerDependencies": { + "@types/node": "*", "ts-node": ">=9.0.0" }, "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, "ts-node": { "optional": true } } }, "node_modules/jest-config/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", "dev": true, "dependencies": { + "@jest/schemas": "^28.1.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^16.0.0", + "@types/yargs": "^17.0.8", "chalk": "^4.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-config/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -29525,21 +29685,21 @@ } }, "node_modules/jest-config/node_modules/jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", "dev": true, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-config/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", + "@jest/types": "^28.1.3", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -29547,7 +29707,34 @@ "picomatch": "^2.2.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-config/node_modules/pretty-format": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", + "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.1.3", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-config/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/jest-config/node_modules/supports-color": { @@ -29635,6 +29822,15 @@ "node": ">=8" } }, + "node_modules/jest-diff/node_modules/jest-get-type": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, "node_modules/jest-diff/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -29648,53 +29844,54 @@ } }, "node_modules/jest-docblock": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", - "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-28.1.1.tgz", + "integrity": "sha512-3wayBVNiOYx0cwAbl9rwm5kKFP8yHH3d/fkEaL02NPTkDojPtheGB7HZSFY4wzX+DxyrvhXz0KSCVksmCknCuA==", "dev": true, "dependencies": { "detect-newline": "^3.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-each": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", - "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-28.1.3.tgz", + "integrity": "sha512-arT1z4sg2yABU5uogObVPvSlSMQlDA48owx07BDPAiasW0yYpYHYOo4HHLz9q0BVzDVU4hILFjzJw0So9aCL/g==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", + "@jest/types": "^28.1.3", "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1" + "jest-get-type": "^28.0.2", + "jest-util": "^28.1.3", + "pretty-format": "^28.1.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-each/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", "dev": true, "dependencies": { + "@jest/schemas": "^28.1.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^16.0.0", + "@types/yargs": "^17.0.8", "chalk": "^4.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-each/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -29759,12 +29956,12 @@ } }, "node_modules/jest-each/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", + "@jest/types": "^28.1.3", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -29772,7 +29969,34 @@ "picomatch": "^2.2.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-each/node_modules/pretty-format": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", + "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.1.3", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-each/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/jest-each/node_modules/supports-color": { @@ -29788,43 +30012,45 @@ } }, "node_modules/jest-environment-jsdom": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", - "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-28.1.0.tgz", + "integrity": "sha512-8n6P4xiDjNVqTWv6W6vJPuQdLx+ZiA3dbYg7YJ+DPzR+9B61K6pMVJrSs2IxfGRG4J7pyAUA5shQ9G0KEun78w==", "dev": true, "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/environment": "^28.1.0", + "@jest/fake-timers": "^28.1.0", + "@jest/types": "^28.1.0", + "@types/jsdom": "^16.2.4", "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1", - "jsdom": "^16.6.0" + "jest-mock": "^28.1.0", + "jest-util": "^28.1.0", + "jsdom": "^19.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-environment-jsdom/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", "dev": true, "dependencies": { + "@jest/schemas": "^28.1.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^16.0.0", + "@types/yargs": "^17.0.8", "chalk": "^4.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-environment-jsdom/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -29889,12 +30115,12 @@ } }, "node_modules/jest-environment-jsdom/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", + "@jest/types": "^28.1.3", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -29902,7 +30128,7 @@ "picomatch": "^2.2.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-environment-jsdom/node_modules/supports-color": { @@ -29918,42 +30144,43 @@ } }, "node_modules/jest-environment-node": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", - "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-28.1.3.tgz", + "integrity": "sha512-ugP6XOhEpjAEhGYvp5Xj989ns5cB1K6ZdjBYuS30umT4CQEETaxSiPcZ/E1kFktX4GkrcM4qu07IIlDYX1gp+A==", "dev": true, "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/environment": "^28.1.3", + "@jest/fake-timers": "^28.1.3", + "@jest/types": "^28.1.3", "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" + "jest-mock": "^28.1.3", + "jest-util": "^28.1.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-environment-node/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", "dev": true, "dependencies": { + "@jest/schemas": "^28.1.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^16.0.0", + "@types/yargs": "^17.0.8", "chalk": "^4.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-environment-node/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -30018,12 +30245,12 @@ } }, "node_modules/jest-environment-node/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", + "@jest/types": "^28.1.3", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -30031,7 +30258,7 @@ "picomatch": "^2.2.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-environment-node/node_modules/supports-color": { @@ -30047,12 +30274,12 @@ } }, "node_modules/jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", + "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", "dev": true, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-haste-map": { @@ -30117,60 +30344,62 @@ "node": ">=8" } }, - "node_modules/jest-jasmine2": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", - "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==", + "node_modules/jest-leak-detector": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-28.1.3.tgz", + "integrity": "sha512-WFVJhnQsiKtDEo5lG2mM0v40QWnBM+zMdHHyJs8AWZ7J0QZJS59MsyKeJHWhpBZBH32S48FOVvGyOFT1h0DlqA==", "dev": true, "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^27.5.1", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", - "throat": "^6.0.1" + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/jest-jasmine2/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "node_modules/jest-leak-detector/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-leak-detector/node_modules/pretty-format": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", + "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", "dev": true, "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" + "@jest/schemas": "^28.1.3", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/jest-jasmine2/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "node_modules/jest-matcher-utils": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz", + "integrity": "sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw==", "dev": true, "dependencies": { - "@types/yargs-parser": "*" + "chalk": "^4.0.0", + "jest-diff": "^28.1.3", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/jest-jasmine2/node_modules/ansi-styles": { + "node_modules/jest-matcher-utils/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", @@ -30185,7 +30414,7 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-jasmine2/node_modules/chalk": { + "node_modules/jest-matcher-utils/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", @@ -30201,7 +30430,7 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-jasmine2/node_modules/color-convert": { + "node_modules/jest-matcher-utils/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", @@ -30213,134 +30442,70 @@ "node": ">=7.0.0" } }, - "node_modules/jest-jasmine2/node_modules/color-name": { + "node_modules/jest-matcher-utils/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/jest-jasmine2/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/jest-matcher-utils/node_modules/diff-sequences": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz", + "integrity": "sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==", "dev": true, "engines": { - "node": ">=8" - } - }, - "node_modules/jest-jasmine2/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/jest-jasmine2/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/jest-matcher-utils/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, "engines": { "node": ">=8" } }, - "node_modules/jest-leak-detector": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", - "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", - "dev": true, - "dependencies": { - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-matcher-utils": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", - "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", + "node_modules/jest-matcher-utils/node_modules/jest-diff": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.3.tgz", + "integrity": "sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw==", "dev": true, "dependencies": { "chalk": "^4.0.0", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" + "diff-sequences": "^28.1.1", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/jest-matcher-utils/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/jest-matcher-utils/node_modules/pretty-format": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", + "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "@jest/schemas": "^28.1.3", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/jest-matcher-utils/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/jest-matcher-utils/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-matcher-utils/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-matcher-utils/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-matcher-utils/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/jest-matcher-utils/node_modules/supports-color": { @@ -30356,45 +30521,46 @@ } }, "node_modules/jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", + "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", "dev": true, "dependencies": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", + "@jest/types": "^28.1.3", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", + "pretty-format": "^28.1.3", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-message-util/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", "dev": true, "dependencies": { + "@jest/schemas": "^28.1.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^16.0.0", + "@types/yargs": "^17.0.8", "chalk": "^4.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-message-util/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -30458,6 +30624,33 @@ "node": ">=8" } }, + "node_modules/jest-message-util/node_modules/pretty-format": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", + "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.1.3", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-message-util/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/jest-message-util/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -30471,38 +30664,39 @@ } }, "node_modules/jest-mock": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", - "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.3.tgz", + "integrity": "sha512-o3J2jr6dMMWYVH4Lh/NKmDXdosrsJgi4AviS8oXLujcjpCMBb1FMsblDnOXKZKfSiHLxYub1eS0IHuRXsio9eA==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", + "@jest/types": "^28.1.3", "@types/node": "*" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-mock/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", "dev": true, "dependencies": { + "@jest/schemas": "^28.1.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^16.0.0", + "@types/yargs": "^17.0.8", "chalk": "^4.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-mock/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -30605,164 +30799,68 @@ } }, "node_modules/jest-resolve": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", - "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-28.1.3.tgz", + "integrity": "sha512-Z1W3tTjE6QaNI90qo/BJpfnvpxtaFTFw5CDgwpyE/Kz8U/06N1Hjf4ia9quUhCh39qIGWF1ZuxFiBiJQwSEYKQ==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", + "jest-haste-map": "^28.1.3", "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", + "jest-util": "^28.1.3", + "jest-validate": "^28.1.3", "resolve": "^1.20.0", "resolve.exports": "^1.1.0", "slash": "^3.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-resolve-dependencies": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", - "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", - "dev": true, - "dependencies": { - "@jest/types": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-snapshot": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-resolve-dependencies/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-resolve-dependencies/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-resolve-dependencies/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-resolve-dependencies/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.3.tgz", + "integrity": "sha512-qa0QO2Q0XzQoNPouMbCc7Bvtsem8eQgVPNkwn9LnS+R2n8DaVDPL/U1gngC0LTl1RYXJU0uJa2BMC2DbTfFrHA==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" + "jest-regex-util": "^28.0.2", + "jest-snapshot": "^28.1.3" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-resolve-dependencies/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-resolve-dependencies/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-resolve-dependencies/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, "engines": { - "node": ">=8" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-resolve-dependencies/node_modules/jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", "dev": true, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-resolve-dependencies/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-resolve/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", "dev": true, "dependencies": { + "@jest/schemas": "^28.1.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^16.0.0", + "@types/yargs": "^17.0.8", "chalk": "^4.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-resolve/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -30827,60 +30925,46 @@ } }, "node_modules/jest-resolve/node_modules/jest-haste-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", - "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz", + "integrity": "sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", - "@types/graceful-fs": "^4.1.2", + "@jest/types": "^28.1.3", + "@types/graceful-fs": "^4.1.3", "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.1.3", + "jest-worker": "^28.1.3", "micromatch": "^4.0.4", - "walker": "^1.0.7" + "walker": "^1.0.8" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" }, "optionalDependencies": { "fsevents": "^2.3.2" } }, "node_modules/jest-resolve/node_modules/jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", "dev": true, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-resolve/node_modules/jest-serializer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", - "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", - "dev": true, - "dependencies": { - "@types/node": "*", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-resolve/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", + "@jest/types": "^28.1.3", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -30888,7 +30972,7 @@ "picomatch": "^2.2.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-resolve/node_modules/supports-color": { @@ -30904,83 +30988,84 @@ } }, "node_modules/jest-runner": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", - "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-28.1.3.tgz", + "integrity": "sha512-GkMw4D/0USd62OVO0oEgjn23TM+YJa2U2Wu5zz9xsQB1MxWKDOlrnykPxnMsN0tnJllfLPinHTka61u0QhaxBA==", "dev": true, "dependencies": { - "@jest/console": "^27.5.1", - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/console": "^28.1.3", + "@jest/environment": "^28.1.3", + "@jest/test-result": "^28.1.3", + "@jest/transform": "^28.1.3", + "@jest/types": "^28.1.3", "@types/node": "*", "chalk": "^4.0.0", - "emittery": "^0.8.1", + "emittery": "^0.10.2", "graceful-fs": "^4.2.9", - "jest-docblock": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-leak-detector": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "source-map-support": "^0.5.6", - "throat": "^6.0.1" + "jest-docblock": "^28.1.1", + "jest-environment-node": "^28.1.3", + "jest-haste-map": "^28.1.3", + "jest-leak-detector": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-resolve": "^28.1.3", + "jest-runtime": "^28.1.3", + "jest-util": "^28.1.3", + "jest-watcher": "^28.1.3", + "jest-worker": "^28.1.3", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-runner/node_modules/@jest/transform": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", - "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-28.1.3.tgz", + "integrity": "sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA==", "dev": true, "dependencies": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.5.1", + "@babel/core": "^7.11.6", + "@jest/types": "^28.1.3", + "@jridgewell/trace-mapping": "^0.3.13", "babel-plugin-istanbul": "^6.1.1", "chalk": "^4.0.0", "convert-source-map": "^1.4.0", "fast-json-stable-stringify": "^2.0.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-util": "^27.5.1", + "jest-haste-map": "^28.1.3", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.1.3", "micromatch": "^4.0.4", "pirates": "^4.0.4", "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" + "write-file-atomic": "^4.0.1" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-runner/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", "dev": true, "dependencies": { + "@jest/schemas": "^28.1.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^16.0.0", + "@types/yargs": "^17.0.8", "chalk": "^4.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-runner/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -31045,60 +31130,46 @@ } }, "node_modules/jest-runner/node_modules/jest-haste-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", - "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz", + "integrity": "sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", - "@types/graceful-fs": "^4.1.2", + "@jest/types": "^28.1.3", + "@types/graceful-fs": "^4.1.3", "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.1.3", + "jest-worker": "^28.1.3", "micromatch": "^4.0.4", - "walker": "^1.0.7" + "walker": "^1.0.8" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" }, "optionalDependencies": { "fsevents": "^2.3.2" } }, "node_modules/jest-runner/node_modules/jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", - "dev": true, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-runner/node_modules/jest-serializer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", - "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", "dev": true, - "dependencies": { - "@types/node": "*", - "graceful-fs": "^4.2.9" - }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-runner/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", + "@jest/types": "^28.1.3", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -31106,7 +31177,17 @@ "picomatch": "^2.2.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-runner/node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, "node_modules/jest-runner/node_modules/supports-color": { @@ -31121,85 +31202,99 @@ "node": ">=8" } }, - "node_modules/jest-runtime": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", - "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", + "node_modules/jest-runner/node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", "dev": true, "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/globals": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/jest-runtime": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-28.1.3.tgz", + "integrity": "sha512-NU+881ScBQQLc1JHG5eJGU7Ui3kLKrmwCPPtYsJtBykixrM2OhVQlpMmFWJjMyDfdkGgBMNjXCGB/ebzsgNGQw==", + "dev": true, + "dependencies": { + "@jest/environment": "^28.1.3", + "@jest/fake-timers": "^28.1.3", + "@jest/globals": "^28.1.3", + "@jest/source-map": "^28.1.2", + "@jest/test-result": "^28.1.3", + "@jest/transform": "^28.1.3", + "@jest/types": "^28.1.3", "chalk": "^4.0.0", "cjs-module-lexer": "^1.0.0", "collect-v8-coverage": "^1.0.0", "execa": "^5.0.0", "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", + "jest-haste-map": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-mock": "^28.1.3", + "jest-regex-util": "^28.0.2", + "jest-resolve": "^28.1.3", + "jest-snapshot": "^28.1.3", + "jest-util": "^28.1.3", "slash": "^3.0.0", "strip-bom": "^4.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-runtime/node_modules/@jest/transform": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", - "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-28.1.3.tgz", + "integrity": "sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA==", "dev": true, "dependencies": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.5.1", + "@babel/core": "^7.11.6", + "@jest/types": "^28.1.3", + "@jridgewell/trace-mapping": "^0.3.13", "babel-plugin-istanbul": "^6.1.1", "chalk": "^4.0.0", "convert-source-map": "^1.4.0", "fast-json-stable-stringify": "^2.0.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-util": "^27.5.1", + "jest-haste-map": "^28.1.3", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.1.3", "micromatch": "^4.0.4", "pirates": "^4.0.4", "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" + "write-file-atomic": "^4.0.1" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-runtime/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", "dev": true, "dependencies": { + "@jest/schemas": "^28.1.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^16.0.0", + "@types/yargs": "^17.0.8", "chalk": "^4.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-runtime/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -31308,60 +31403,46 @@ } }, "node_modules/jest-runtime/node_modules/jest-haste-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", - "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz", + "integrity": "sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", - "@types/graceful-fs": "^4.1.2", + "@jest/types": "^28.1.3", + "@types/graceful-fs": "^4.1.3", "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.1.3", + "jest-worker": "^28.1.3", "micromatch": "^4.0.4", - "walker": "^1.0.7" + "walker": "^1.0.8" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" }, "optionalDependencies": { "fsevents": "^2.3.2" } }, "node_modules/jest-runtime/node_modules/jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", "dev": true, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-runtime/node_modules/jest-serializer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", - "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", - "dev": true, - "dependencies": { - "@types/node": "*", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-runtime/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", + "@jest/types": "^28.1.3", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -31369,7 +31450,7 @@ "picomatch": "^2.2.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-runtime/node_modules/supports-color": { @@ -31384,6 +31465,19 @@ "node": ">=8" } }, + "node_modules/jest-runtime/node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, "node_modules/jest-serializer": { "version": "26.6.2", "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", @@ -31398,84 +31492,86 @@ } }, "node_modules/jest-snapshot": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", - "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-28.1.3.tgz", + "integrity": "sha512-4lzMgtiNlc3DU/8lZfmqxN3AYD6GGLbl+72rdBpXvcV+whX7mDrREzkPdp2RnmfIiWBg1YbuFSkXduF2JcafJg==", "dev": true, "dependencies": { - "@babel/core": "^7.7.2", + "@babel/core": "^7.11.6", "@babel/generator": "^7.7.2", "@babel/plugin-syntax-typescript": "^7.7.2", "@babel/traverse": "^7.7.2", - "@babel/types": "^7.0.0", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/babel__traverse": "^7.0.4", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^28.1.3", + "@jest/transform": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/babel__traverse": "^7.0.6", "@types/prettier": "^2.1.5", "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", - "expect": "^27.5.1", + "expect": "^28.1.3", "graceful-fs": "^4.2.9", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", + "jest-diff": "^28.1.3", + "jest-get-type": "^28.0.2", + "jest-haste-map": "^28.1.3", + "jest-matcher-utils": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-util": "^28.1.3", "natural-compare": "^1.4.0", - "pretty-format": "^27.5.1", - "semver": "^7.3.2" + "pretty-format": "^28.1.3", + "semver": "^7.3.5" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-snapshot/node_modules/@jest/transform": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", - "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-28.1.3.tgz", + "integrity": "sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA==", "dev": true, "dependencies": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.5.1", + "@babel/core": "^7.11.6", + "@jest/types": "^28.1.3", + "@jridgewell/trace-mapping": "^0.3.13", "babel-plugin-istanbul": "^6.1.1", "chalk": "^4.0.0", "convert-source-map": "^1.4.0", "fast-json-stable-stringify": "^2.0.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-util": "^27.5.1", + "jest-haste-map": "^28.1.3", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.1.3", "micromatch": "^4.0.4", "pirates": "^4.0.4", "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" + "write-file-atomic": "^4.0.1" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-snapshot/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", "dev": true, "dependencies": { + "@jest/schemas": "^28.1.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^16.0.0", + "@types/yargs": "^17.0.8", "chalk": "^4.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-snapshot/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -31530,6 +31626,15 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "node_modules/jest-snapshot/node_modules/diff-sequences": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz", + "integrity": "sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/jest-snapshot/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -31539,75 +31644,103 @@ "node": ">=8" } }, + "node_modules/jest-snapshot/node_modules/jest-diff": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.3.tgz", + "integrity": "sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^28.1.1", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/jest-snapshot/node_modules/jest-haste-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", - "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz", + "integrity": "sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", - "@types/graceful-fs": "^4.1.2", + "@jest/types": "^28.1.3", + "@types/graceful-fs": "^4.1.3", "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.1.3", + "jest-worker": "^28.1.3", "micromatch": "^4.0.4", - "walker": "^1.0.7" + "walker": "^1.0.8" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" }, "optionalDependencies": { "fsevents": "^2.3.2" } }, "node_modules/jest-snapshot/node_modules/jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", "dev": true, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/jest-snapshot/node_modules/jest-serializer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", - "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", + "node_modules/jest-snapshot/node_modules/jest-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", "dev": true, "dependencies": { + "@jest/types": "^28.1.3", "@types/node": "*", - "graceful-fs": "^4.2.9" + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/jest-snapshot/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "node_modules/jest-snapshot/node_modules/pretty-format": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", + "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" + "@jest/schemas": "^28.1.3", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -31631,6 +31764,29 @@ "node": ">=8" } }, + "node_modules/jest-snapshot/node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/jest-transformer-svg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/jest-transformer-svg/-/jest-transformer-svg-2.0.0.tgz", + "integrity": "sha512-+f6er7UZTiHTeel9nma1i0NTAU8AjbEvhK2RYUoMxTNihwo98z2rrrDBIbppZI6ACDzeul3bhRmI9M6d25J/Nw==", + "dev": true, + "peerDependencies": { + "jest": "^28.1.0", + "react": "^17.0.0 || ^18.0.0" + } + }, "node_modules/jest-util": { "version": "26.6.2", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", @@ -31737,42 +31893,43 @@ } }, "node_modules/jest-validate": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", - "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-28.1.3.tgz", + "integrity": "sha512-SZbOGBWEsaTxBGCOpsRWlXlvNkvTkY0XxRfh7zYmvd8uL5Qzyg0CHAXiXKROflh801quA6+/DsT4ODDthOC/OA==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", + "@jest/types": "^28.1.3", "camelcase": "^6.2.0", "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", + "jest-get-type": "^28.0.2", "leven": "^3.1.0", - "pretty-format": "^27.5.1" + "pretty-format": "^28.1.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-validate/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", "dev": true, "dependencies": { + "@jest/schemas": "^28.1.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^16.0.0", + "@types/yargs": "^17.0.8", "chalk": "^4.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-validate/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -31836,6 +31993,33 @@ "node": ">=8" } }, + "node_modules/jest-validate/node_modules/pretty-format": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", + "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.1.3", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-validate/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/jest-validate/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -31849,43 +32033,45 @@ } }, "node_modules/jest-watcher": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", - "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz", + "integrity": "sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==", "dev": true, "dependencies": { - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/test-result": "^28.1.3", + "@jest/types": "^28.1.3", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "jest-util": "^27.5.1", + "emittery": "^0.10.2", + "jest-util": "^28.1.3", "string-length": "^4.0.1" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-watcher/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", "dev": true, "dependencies": { + "@jest/schemas": "^28.1.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^16.0.0", + "@types/yargs": "^17.0.8", "chalk": "^4.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-watcher/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", "dev": true, "dependencies": { "@types/yargs-parser": "*" @@ -31950,12 +32136,12 @@ } }, "node_modules/jest-watcher/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", "dev": true, "dependencies": { - "@jest/types": "^27.5.1", + "@jest/types": "^28.1.3", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -31963,7 +32149,7 @@ "picomatch": "^2.2.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-watcher/node_modules/supports-color": { @@ -31979,9 +32165,9 @@ } }, "node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", + "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", "dev": true, "dependencies": { "@types/node": "*", @@ -31989,7 +32175,7 @@ "supports-color": "^8.0.0" }, "engines": { - "node": ">= 10.13.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-worker/node_modules/has-flag": { @@ -32017,9 +32203,9 @@ } }, "node_modules/joi": { - "version": "17.6.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.6.0.tgz", - "integrity": "sha512-OX5dG6DTbcr/kbMFj0KGYxuew69HPcAE3K/sZpEV2nP6e/j/C0HV+HNiBPCASxdx5T7DMoa0s8UeHWMnb6n2zw==", + "version": "17.6.3", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.6.3.tgz", + "integrity": "sha512-YlQsIaS9MHYekzf1Qe11LjTkNzx9qhYluK3172z38RxYoAUf82XMX1p1DG1H4Wtk2ED/vPdSn9OggqtDu+aTow==", "dev": true, "dependencies": { "@hapi/hoek": "^9.0.0", @@ -32037,6 +32223,12 @@ "node": ">=0.10.0" } }, + "node_modules/js-sdsl": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.5.tgz", + "integrity": "sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==", + "dev": true + }, "node_modules/js-sha3": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", @@ -32085,23 +32277,23 @@ } }, "node_modules/jsdom": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", - "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-19.0.0.tgz", + "integrity": "sha512-RYAyjCbxy/vri/CfnjUWJQQtZ3LKlLnDqj+9XLNnJPgEGeirZs3hllKR20re8LUZ6o1b1X4Jat+Qd26zmP41+A==", "dev": true, "dependencies": { "abab": "^2.0.5", - "acorn": "^8.2.4", + "acorn": "^8.5.0", "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", + "cssom": "^0.5.0", "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", - "domexception": "^2.0.1", + "data-urls": "^3.0.1", + "decimal.js": "^10.3.1", + "domexception": "^4.0.0", "escodegen": "^2.0.0", - "form-data": "^3.0.0", - "html-encoding-sniffer": "^2.0.1", - "http-proxy-agent": "^4.0.1", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy-agent": "^5.0.0", "https-proxy-agent": "^5.0.0", "is-potential-custom-element-name": "^1.0.1", "nwsapi": "^2.2.0", @@ -32110,16 +32302,16 @@ "symbol-tree": "^3.2.4", "tough-cookie": "^4.0.0", "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.5.0", - "ws": "^7.4.6", - "xml-name-validator": "^3.0.0" + "w3c-xmlserializer": "^3.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^10.0.0", + "ws": "^8.2.3", + "xml-name-validator": "^4.0.0" }, "engines": { - "node": ">=10" + "node": ">=12" }, "peerDependencies": { "canvas": "^2.5.0" @@ -32142,6 +32334,20 @@ "node": ">=0.4.0" } }, + "node_modules/jsdom/node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/jsdom/node_modules/punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", @@ -32175,6 +32381,27 @@ "node": ">= 4.0.0" } }, + "node_modules/jsdom/node_modules/ws": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.9.0.tgz", + "integrity": "sha512-Ja7nszREasGaYUYCI2k4lCKIRTt+y7XuqVoHR44YpI49TtryyqbqvDMn5eqfW7e6HzTukDRIsXqzVHScqRcafg==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", @@ -32306,11 +32533,11 @@ } }, "node_modules/jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha512-trvBk1ki43VZptdBI5rIlG4YOzyeH/WefQt5rj1grasPn4iiZWKet8nkgc4GlsAylaztn0qZfUYOiTsASJFdNA==", - "engines": { - "node": "*" + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz", + "integrity": "sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==", + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/jsonparse": { @@ -32434,9 +32661,9 @@ } }, "node_modules/jss/node_modules/csstype": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz", - "integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" }, "node_modules/jsx-ast-utils": { "version": "3.3.3", @@ -32835,9 +33062,9 @@ "dev": true }, "node_modules/lint-staged/node_modules/commander": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.4.0.tgz", - "integrity": "sha512-sRPT+umqkz90UA8M1yqYfnHlZA7fF6nSphDtxeywPZ49ysjxDQybzk13CL+mXekDRG92skbcqCLVovuCusNmFw==", + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.4.1.tgz", + "integrity": "sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw==", "dev": true, "engines": { "node": "^12.20.0 || >=14" @@ -33047,9 +33274,9 @@ } }, "node_modules/lint-staged/node_modules/yaml": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.1.1.tgz", - "integrity": "sha512-o96x3OPo8GjWeSLF+wOAbrPfhFOGY0W00GNaxCDv+9hkcDJEnev1yh8S7pgHF0ik6zc8sQLuL8hjHjJULZp8bw==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.1.3.tgz", + "integrity": "sha512-AacA8nRULjKMX2DvWvOAdBZMOfQlypSFkjcOcu9FalllIDJ1kvlREzcdIZmidQUqqeMv7jorHjq2HlLv/+c2lg==", "dev": true, "engines": { "node": ">= 14" @@ -33169,6 +33396,46 @@ "node": ">=8" } }, + "node_modules/load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/load-json-file/node_modules/parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", + "dev": true, + "dependencies": { + "error-ex": "^1.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/load-json-file/node_modules/strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", + "dev": true, + "dependencies": { + "is-utf8": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/loader-runner": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", @@ -34023,34 +34290,6 @@ "node": ">=0.10.0" } }, - "node_modules/meow/node_modules/load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/meow/node_modules/parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", - "dev": true, - "dependencies": { - "error-ex": "^1.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/meow/node_modules/path-exists": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", @@ -34117,18 +34356,6 @@ "node": ">=0.10.0" } }, - "node_modules/meow/node_modules/strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", - "dev": true, - "dependencies": { - "is-utf8": "^0.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/meow/node_modules/strip-indent": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", @@ -34324,9 +34551,12 @@ } }, "node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/minipass": { "version": "3.3.4", @@ -34698,9 +34928,9 @@ "integrity": "sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==" }, "node_modules/nan": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz", - "integrity": "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==" + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", + "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==" }, "node_modules/nano-base32": { "version": "1.0.1", @@ -34963,6 +35193,16 @@ "webpack": "^3.0.0 || ^4.0.0" } }, + "node_modules/next-router-mock": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/next-router-mock/-/next-router-mock-0.7.4.tgz", + "integrity": "sha512-phYLFXOQ9klg6gxVRJJdH0QoD+5bAbAdDYM9O3YdGZ+IFEbvIoIns+o9SoSfTkCjzoU2R1ARoFc8WHp0+hnD8A==", + "dev": true, + "peerDependencies": { + "next": ">=10.0.0", + "react": ">=17.0.0" + } + }, "node_modules/next-tick": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", @@ -36845,9 +37085,9 @@ } }, "node_modules/postcss-loader/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -38097,9 +38337,9 @@ } }, "node_modules/react-remove-scroll-bar": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.3.tgz", - "integrity": "sha512-i9GMNWwpz8XpUpQ6QlevUtFjHGqnPG4Hxs+wlIJntu/xcsZVEpJcIV71K3ZkqNy2q3GfgvkD7y6t/Sv8ofYSbw==", + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.4.tgz", + "integrity": "sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==", "dependencies": { "react-style-singleton": "^2.2.1", "tslib": "^2.0.0" @@ -38468,9 +38708,9 @@ "dev": true }, "node_modules/regenerate-unicode-properties": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz", - "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", "dev": true, "dependencies": { "regenerate": "^1.4.2" @@ -38559,15 +38799,15 @@ } }, "node_modules/regexpu-core": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.1.0.tgz", - "integrity": "sha512-bb6hk+xWd2PEOkj5It46A16zFMs2mv86Iwpdu94la4S3sJ7C973h2dHpYKwIBGaWSO7cIRJ+UX0IeMaWcO4qwA==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.1.tgz", + "integrity": "sha512-HrnlNtpvqP1Xkb28tMhBUO2EbyUHdQlsnlAhzWcwHy8WJR53UWr7/MAvqrsQKMbV4qdpv03oTMG8iIhfsPFktQ==", "dev": true, "dependencies": { "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.0.1", - "regjsgen": "^0.6.0", - "regjsparser": "^0.8.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsgen": "^0.7.1", + "regjsparser": "^0.9.1", "unicode-match-property-ecmascript": "^2.0.0", "unicode-match-property-value-ecmascript": "^2.0.0" }, @@ -38598,15 +38838,15 @@ } }, "node_modules/regjsgen": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", - "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz", + "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==", "dev": true }, "node_modules/regjsparser": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz", - "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==", + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", "dev": true, "dependencies": { "jsesc": "~0.5.0" @@ -39219,9 +39459,9 @@ } }, "node_modules/rpc-websockets/node_modules/ws": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.8.1.tgz", - "integrity": "sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==", + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.9.0.tgz", + "integrity": "sha512-Ja7nszREasGaYUYCI2k4lCKIRTt+y7XuqVoHR44YpI49TtryyqbqvDMn5eqfW7e6HzTukDRIsXqzVHScqRcafg==", "engines": { "node": ">=10.0.0" }, @@ -39300,9 +39540,9 @@ "dev": true }, "node_modules/rxjs": { - "version": "7.5.6", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.6.tgz", - "integrity": "sha512-dnyv2/YsXhnm461G+R/Pe5bWP41Nm6LBXEYWI6eiFP4fiwx6WRI/CD0zbdVAudd9xwLEF2IDcKXLHit0FYjUzw==", + "version": "7.5.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.7.tgz", + "integrity": "sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA==", "dev": true, "dependencies": { "tslib": "^2.1.0" @@ -39350,6 +39590,19 @@ "regexp-tree": "~0.1.1" } }, + "node_modules/safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -40319,9 +40572,9 @@ } }, "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.0.tgz", - "integrity": "sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, "engines": { "node": ">=12" @@ -40665,36 +40918,6 @@ "graceful-fs": "^4.1.6" } }, - "node_modules/solc/node_modules/load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", - "dev": true, - "optional": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/solc/node_modules/parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", - "dev": true, - "optional": true, - "dependencies": { - "error-ex": "^1.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/solc/node_modules/path-exists": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", @@ -40820,19 +41043,6 @@ "node": ">=0.10.0" } }, - "node_modules/solc/node_modules/strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", - "dev": true, - "optional": true, - "dependencies": { - "is-utf8": "^0.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/solc/node_modules/which-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", @@ -41510,6 +41720,14 @@ "readable-stream": "^2.0.2" } }, + "node_modules/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/strict-uri-encode": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", @@ -42686,9 +42904,9 @@ } }, "node_modules/tape": { - "version": "4.16.0", - "resolved": "https://registry.npmjs.org/tape/-/tape-4.16.0.tgz", - "integrity": "sha512-mBlqYFr2mHysgCFXAuSarIQ+ffhielpb7a5/IbeOhMaLnQYhkJLUm6CwO1RszWeHRxnIpMessZ3xL2Cfo94BWw==", + "version": "4.16.1", + "resolved": "https://registry.npmjs.org/tape/-/tape-4.16.1.tgz", + "integrity": "sha512-U4DWOikL5gBYUrlzx+J0oaRedm2vKLFbtA/+BRAXboGWpXO7bMP8ddxlq3Cse2bvXFQ0jZMOj6kk3546mvCdFg==", "dev": true, "dependencies": { "call-bind": "~1.0.2", @@ -42709,6 +42927,9 @@ }, "bin": { "tape": "bin/tape" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/tape/node_modules/glob": { @@ -43115,9 +43336,9 @@ } }, "node_modules/terser-webpack-plugin/node_modules/terser": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.15.0.tgz", - "integrity": "sha512-L1BJiXVmheAQQy+as0oF3Pwtlo4s3Wi1X2zNZ2NxOB4wx9bdS9Vk67XQENLFdLYGCK/Z2di53mTj/hBafR+dTA==", + "version": "5.15.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.15.1.tgz", + "integrity": "sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw==", "dev": true, "dependencies": { "@jridgewell/source-map": "^0.3.2", @@ -43171,12 +43392,6 @@ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, - "node_modules/throat": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", - "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", - "dev": true - }, "node_modules/throttle-debounce": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-2.3.0.tgz", @@ -43399,15 +43614,15 @@ } }, "node_modules/tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", "dev": true, "dependencies": { "punycode": "^2.1.1" }, "engines": { - "node": ">=8" + "node": ">=12" } }, "node_modules/tr46/node_modules/punycode": { @@ -43874,9 +44089,9 @@ "dev": true }, "node_modules/uglify-js": { - "version": "3.17.0", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.0.tgz", - "integrity": "sha512-aTeNPVmgIMPpm1cxXr2Q/nEbvkmV8yq66F3om7X3P/cvOXQ0TMQ64Wk63iyT1gPlmdmGzjGpyLh1f3y8MZWXGg==", + "version": "3.17.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.3.tgz", + "integrity": "sha512-JmMFDME3iufZnBpyKL+uS78LRiC+mK55zWfM5f/pWBJfpOttXAqYfdDGRukYhJuyRinvPVAtUhvy7rlDybNtFg==", "dev": true, "optional": true, "bin": { @@ -43946,9 +44161,12 @@ "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==" }, "node_modules/undici": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.10.0.tgz", - "integrity": "sha512-c8HsD3IbwmjjbLvoZuRI26TZic+TSEe8FPMLLOkN1AfYRhdjnKBU6yL+IwcSCbdZiX4e5t0lfMDLDCqj4Sq70g==", + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.11.0.tgz", + "integrity": "sha512-oWjWJHzFet0Ow4YZBkyiJwiK5vWqEYoH7BINzJAJOLedZ++JpAlCbUktW2GQ2DS2FpKmxD/JMtWUUWl1BtghGw==", + "dependencies": { + "busboy": "^1.6.0" + }, "engines": { "node": ">=12.18" } @@ -44005,9 +44223,9 @@ } }, "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", - "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", "dev": true, "engines": { "node": ">=4" @@ -44313,9 +44531,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.7.tgz", - "integrity": "sha512-iN/XYesmZ2RmmWAiI4Z5rq0YqSiv0brj9Ce9CfhNE4xIW2h+MFxcgkxIzZ+ShkFPUkjU3gQ+3oypadD3RAMtrg==", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", "funding": [ { "type": "opencollective", @@ -44636,28 +44854,19 @@ "dev": true }, "node_modules/v8-to-istanbul": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", - "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz", + "integrity": "sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==", "dev": true, "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" + "convert-source-map": "^1.6.0" }, "engines": { "node": ">=10.12.0" } }, - "node_modules/v8-to-istanbul/node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, "node_modules/validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", @@ -44789,15 +44998,15 @@ } }, "node_modules/w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz", + "integrity": "sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==", "dev": true, "dependencies": { - "xml-name-validator": "^3.0.0" + "xml-name-validator": "^4.0.0" }, "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/wagmi": { @@ -45387,28 +45596,28 @@ } }, "node_modules/web3": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3/-/web3-1.7.5.tgz", - "integrity": "sha512-3jHZTWyXt975AOXgnZKayiSWDLpoSKk9fZtLk1hURQtt7AdSbXPT8AK9ooBCm0Dt3GYaOeNcHGaiHC3gtyqhLg==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/web3/-/web3-1.8.0.tgz", + "integrity": "sha512-sldr9stK/SALSJTgI/8qpnDuBJNMGjVR84hJ+AcdQ+MLBGLMGsCDNubCoyO6qgk1/Y9SQ7ignegOI/7BPLoiDA==", "dev": true, "hasInstallScript": true, "dependencies": { - "web3-bzz": "1.7.5", - "web3-core": "1.7.5", - "web3-eth": "1.7.5", - "web3-eth-personal": "1.7.5", - "web3-net": "1.7.5", - "web3-shh": "1.7.5", - "web3-utils": "1.7.5" + "web3-bzz": "1.8.0", + "web3-core": "1.8.0", + "web3-eth": "1.8.0", + "web3-eth-personal": "1.8.0", + "web3-net": "1.8.0", + "web3-shh": "1.8.0", + "web3-utils": "1.8.0" }, "engines": { "node": ">=8.0.0" } }, "node_modules/web3-bzz": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.7.5.tgz", - "integrity": "sha512-Z53sY0YK/losqjJncmL4vP0zZI9r6tiXg6o7R6e1JD2Iy7FH3serQvU+qXmPjqEBzsnhf8wTG+YcBPB3RHpr0Q==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.8.0.tgz", + "integrity": "sha512-caDtdKeLi7+2Vb+y+cq2yyhkNjnxkFzVW0j1DtemarBg3dycG1iEl75CVQMLNO6Wkg+HH9tZtRnUyFIe5LIUeQ==", "dev": true, "hasInstallScript": true, "dependencies": { @@ -45644,31 +45853,31 @@ } }, "node_modules/web3-core": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.7.5.tgz", - "integrity": "sha512-UgOWXZr1fR/3cUQJKWbfMwRxj1/N7o6RSd/dHqdXBlOD+62EjNZItFmLRg5veq5kp9YfXzrNw9bnDkXfsL+nKQ==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.8.0.tgz", + "integrity": "sha512-9sCA+Z02ci6zoY2bAquFiDjujRwmSKHiSGi4B8IstML8okSytnzXk1izHYSynE7ahIkguhjWAuXFvX76F5rAbA==", "dev": true, "dependencies": { "@types/bn.js": "^5.1.0", "@types/node": "^12.12.6", "bignumber.js": "^9.0.0", - "web3-core-helpers": "1.7.5", - "web3-core-method": "1.7.5", - "web3-core-requestmanager": "1.7.5", - "web3-utils": "1.7.5" + "web3-core-helpers": "1.8.0", + "web3-core-method": "1.8.0", + "web3-core-requestmanager": "1.8.0", + "web3-utils": "1.8.0" }, "engines": { "node": ">=8.0.0" } }, "node_modules/web3-core-helpers": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.7.5.tgz", - "integrity": "sha512-lDDjTks6Q6aNUO87RYrY2xub3UWTKr/RIWxpHJODEqkLxZS1dWdyliJ6aIx3031VQwsNT5HE7NvABe/t0p3iDQ==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.8.0.tgz", + "integrity": "sha512-nMAVwZB3rEp/khHI2BvFy0e/xCryf501p5NGjswmJtEM+Zrd3Biaw52JrB1qAZZIzCA8cmLKaOgdfamoDOpWdw==", "dev": true, "dependencies": { - "web3-eth-iban": "1.7.5", - "web3-utils": "1.7.5" + "web3-eth-iban": "1.8.0", + "web3-utils": "1.8.0" }, "engines": { "node": ">=8.0.0" @@ -45691,9 +45900,9 @@ } }, "node_modules/web3-core-helpers/node_modules/web3-utils": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.7.5.tgz", - "integrity": "sha512-9AqNOziQky4wNQadEwEfHiBdOZqopIHzQQVzmvvv6fJwDSMhP+khqmAZC7YTiGjs0MboyZ8tWNivqSO1699XQw==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.0.tgz", + "integrity": "sha512-7nUIl7UWpLVka2f09CMbKOSEvorvHnaugIabU4mj7zfMvm0tSByLcEu3eyV9qgS11qxxLuOkzBIwCstTflhmpQ==", "dev": true, "dependencies": { "bn.js": "^5.2.1", @@ -45709,16 +45918,16 @@ } }, "node_modules/web3-core-method": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.7.5.tgz", - "integrity": "sha512-ApTvq1Llzlbxmy0n4L7QaE6NodIsR80VJqk8qN4kLg30SGznt/pNJFebryLI2kpyDmxSgj1TjEWzmHJBp6FhYg==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.8.0.tgz", + "integrity": "sha512-c94RAzo3gpXwf2rf8rL8C77jOzNWF4mXUoUfZYYsiY35cJFd46jQDPI00CB5+ZbICTiA5mlVzMj4e7jAsTqiLA==", "dev": true, "dependencies": { "@ethersproject/transactions": "^5.6.2", - "web3-core-helpers": "1.7.5", - "web3-core-promievent": "1.7.5", - "web3-core-subscriptions": "1.7.5", - "web3-utils": "1.7.5" + "web3-core-helpers": "1.8.0", + "web3-core-promievent": "1.8.0", + "web3-core-subscriptions": "1.8.0", + "web3-utils": "1.8.0" }, "engines": { "node": ">=8.0.0" @@ -45741,9 +45950,9 @@ } }, "node_modules/web3-core-method/node_modules/web3-utils": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.7.5.tgz", - "integrity": "sha512-9AqNOziQky4wNQadEwEfHiBdOZqopIHzQQVzmvvv6fJwDSMhP+khqmAZC7YTiGjs0MboyZ8tWNivqSO1699XQw==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.0.tgz", + "integrity": "sha512-7nUIl7UWpLVka2f09CMbKOSEvorvHnaugIabU4mj7zfMvm0tSByLcEu3eyV9qgS11qxxLuOkzBIwCstTflhmpQ==", "dev": true, "dependencies": { "bn.js": "^5.2.1", @@ -45759,9 +45968,9 @@ } }, "node_modules/web3-core-promievent": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.7.5.tgz", - "integrity": "sha512-uZ1VRErVuhiLtHlyt3oEH/JSvAf6bWPndChHR9PG7i1Zfqm6ZVCeM91ICTPmiL8ddsGQOxASpnJk4vhApcTIww==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.8.0.tgz", + "integrity": "sha512-FGLyjAuOaAQ+ZhV6iuw9tg/9WvIkSZXKHQ4mdTyQ8MxVraOtFivOCbuLLsGgapfHYX+RPxsc1j1YzQjKoupagQ==", "dev": true, "dependencies": { "eventemitter3": "4.0.4" @@ -45777,16 +45986,16 @@ "dev": true }, "node_modules/web3-core-requestmanager": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.7.5.tgz", - "integrity": "sha512-3KpfxW/wVH4mgwWEsSJGHKrtRVoijWlDxtUrm17xgtqRNZ2mFolifKnHAUKa0fY48C9CrxmcCiMIi3W4G6WYRw==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.8.0.tgz", + "integrity": "sha512-2AoYCs3Owl5foWcf4uKPONyqFygSl9T54L8b581U16nsUirjhoTUGK/PBhMDVcLCmW4QQmcY5A8oPFpkQc1TTg==", "dev": true, "dependencies": { "util": "^0.12.0", - "web3-core-helpers": "1.7.5", - "web3-providers-http": "1.7.5", - "web3-providers-ipc": "1.7.5", - "web3-providers-ws": "1.7.5" + "web3-core-helpers": "1.8.0", + "web3-providers-http": "1.8.0", + "web3-providers-ipc": "1.8.0", + "web3-providers-ws": "1.8.0" }, "engines": { "node": ">=8.0.0" @@ -45807,13 +46016,13 @@ } }, "node_modules/web3-core-subscriptions": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.7.5.tgz", - "integrity": "sha512-YK6utQ7Wwjbe4XZOIA8quWGBPi1lFDS1A+jQYwxKKrCvm6BloBNc3FhvrcSYlDhLe/kOy8+2Je8i9amndgT4ww==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.8.0.tgz", + "integrity": "sha512-7lHVRzDdg0+Gcog55lG6Q3D8JV+jN+4Ly6F8cSn9xFUAwOkdbgdWsjknQG7t7CDWy21DQkvdiY2BJF8S68AqOA==", "dev": true, "dependencies": { "eventemitter3": "4.0.4", - "web3-core-helpers": "1.7.5" + "web3-core-helpers": "1.8.0" }, "engines": { "node": ">=8.0.0" @@ -45848,9 +46057,9 @@ } }, "node_modules/web3-core/node_modules/web3-utils": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.7.5.tgz", - "integrity": "sha512-9AqNOziQky4wNQadEwEfHiBdOZqopIHzQQVzmvvv6fJwDSMhP+khqmAZC7YTiGjs0MboyZ8tWNivqSO1699XQw==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.0.tgz", + "integrity": "sha512-7nUIl7UWpLVka2f09CMbKOSEvorvHnaugIabU4mj7zfMvm0tSByLcEu3eyV9qgS11qxxLuOkzBIwCstTflhmpQ==", "dev": true, "dependencies": { "bn.js": "^5.2.1", @@ -45866,35 +46075,35 @@ } }, "node_modules/web3-eth": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.7.5.tgz", - "integrity": "sha512-BucjvqZyDWYkGlsFX+OnOBub0YutlC1KZiNGibdmvtNX0NQK+8iw1uzAoL9yTTwCSszL7lnkFe8N+HCOl9B4Dw==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.8.0.tgz", + "integrity": "sha512-hist52os3OT4TQFB/GxPSMxTh3995sz6LPvQpPvj7ktSbpg9RNSFaSsPlCT63wUAHA3PZb1FemkAIeQM5t72Lw==", "dev": true, "dependencies": { - "web3-core": "1.7.5", - "web3-core-helpers": "1.7.5", - "web3-core-method": "1.7.5", - "web3-core-subscriptions": "1.7.5", - "web3-eth-abi": "1.7.5", - "web3-eth-accounts": "1.7.5", - "web3-eth-contract": "1.7.5", - "web3-eth-ens": "1.7.5", - "web3-eth-iban": "1.7.5", - "web3-eth-personal": "1.7.5", - "web3-net": "1.7.5", - "web3-utils": "1.7.5" + "web3-core": "1.8.0", + "web3-core-helpers": "1.8.0", + "web3-core-method": "1.8.0", + "web3-core-subscriptions": "1.8.0", + "web3-eth-abi": "1.8.0", + "web3-eth-accounts": "1.8.0", + "web3-eth-contract": "1.8.0", + "web3-eth-ens": "1.8.0", + "web3-eth-iban": "1.8.0", + "web3-eth-personal": "1.8.0", + "web3-net": "1.8.0", + "web3-utils": "1.8.0" }, "engines": { "node": ">=8.0.0" } }, "node_modules/web3-eth-abi": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.7.5.tgz", - "integrity": "sha512-qWHvF7sayxql9BD1yqK9sZRLBQ66eJzGeaU53Y1PRq2iFPrhY6NUWxQ3c3ps0rg+dyObvRbloviWpKXcS4RE/A==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.8.0.tgz", + "integrity": "sha512-xPeMb2hS9YLQK/Q5YZpkcmzoRGM+/R8bogSrYHhNC3hjZSSU0YRH+1ZKK0f9YF4qDZaPMI8tKWIMSCDIpjG6fg==", "dependencies": { "@ethersproject/abi": "^5.6.3", - "web3-utils": "1.7.5" + "web3-utils": "1.8.0" }, "engines": { "node": ">=8.0.0" @@ -45916,9 +46125,9 @@ } }, "node_modules/web3-eth-abi/node_modules/web3-utils": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.7.5.tgz", - "integrity": "sha512-9AqNOziQky4wNQadEwEfHiBdOZqopIHzQQVzmvvv6fJwDSMhP+khqmAZC7YTiGjs0MboyZ8tWNivqSO1699XQw==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.0.tgz", + "integrity": "sha512-7nUIl7UWpLVka2f09CMbKOSEvorvHnaugIabU4mj7zfMvm0tSByLcEu3eyV9qgS11qxxLuOkzBIwCstTflhmpQ==", "dependencies": { "bn.js": "^5.2.1", "ethereum-bloom-filters": "^1.0.6", @@ -45933,9 +46142,9 @@ } }, "node_modules/web3-eth-accounts": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.7.5.tgz", - "integrity": "sha512-AzMLoTj3RGwKpyp3x3TtHrEeU4VpR99iMOD6NKrWSDumS6QEi0lCo+y7QZhdTlINw3iIA3SFIdvbAOO4NCHSDg==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.8.0.tgz", + "integrity": "sha512-HQ/MDSv4bexwJLvnqsM6xpGE7c2NVOqyhzOZFyMUKXbIwIq85T3TaLnM9pCN7XqMpDcfxqiZ3q43JqQVkzHdmw==", "dev": true, "dependencies": { "@ethereumjs/common": "^2.5.0", @@ -45945,10 +46154,10 @@ "ethereumjs-util": "^7.0.10", "scrypt-js": "^3.0.1", "uuid": "3.3.2", - "web3-core": "1.7.5", - "web3-core-helpers": "1.7.5", - "web3-core-method": "1.7.5", - "web3-utils": "1.7.5" + "web3-core": "1.8.0", + "web3-core-helpers": "1.8.0", + "web3-core-method": "1.8.0", + "web3-utils": "1.8.0" }, "engines": { "node": ">=8.0.0" @@ -45998,9 +46207,9 @@ } }, "node_modules/web3-eth-accounts/node_modules/web3-utils": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.7.5.tgz", - "integrity": "sha512-9AqNOziQky4wNQadEwEfHiBdOZqopIHzQQVzmvvv6fJwDSMhP+khqmAZC7YTiGjs0MboyZ8tWNivqSO1699XQw==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.0.tgz", + "integrity": "sha512-7nUIl7UWpLVka2f09CMbKOSEvorvHnaugIabU4mj7zfMvm0tSByLcEu3eyV9qgS11qxxLuOkzBIwCstTflhmpQ==", "dev": true, "dependencies": { "bn.js": "^5.2.1", @@ -46016,19 +46225,19 @@ } }, "node_modules/web3-eth-contract": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.7.5.tgz", - "integrity": "sha512-qab7NPJRKRlTs58ozsqK8YIEwWpxIm3vD/okSIKBGkFx5gIHWW+vGmMh5PDSfefLJM9rCd+T+Lc0LYvtME7uqg==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.8.0.tgz", + "integrity": "sha512-6xeXhW2YoCrz2Ayf2Vm4srWiMOB6LawkvxWJDnUWJ8SMATg4Pgu42C/j8rz/enXbYWt2IKuj0kk8+QszxQbK+Q==", "dev": true, "dependencies": { "@types/bn.js": "^5.1.0", - "web3-core": "1.7.5", - "web3-core-helpers": "1.7.5", - "web3-core-method": "1.7.5", - "web3-core-promievent": "1.7.5", - "web3-core-subscriptions": "1.7.5", - "web3-eth-abi": "1.7.5", - "web3-utils": "1.7.5" + "web3-core": "1.8.0", + "web3-core-helpers": "1.8.0", + "web3-core-method": "1.8.0", + "web3-core-promievent": "1.8.0", + "web3-core-subscriptions": "1.8.0", + "web3-eth-abi": "1.8.0", + "web3-utils": "1.8.0" }, "engines": { "node": ">=8.0.0" @@ -46051,9 +46260,9 @@ } }, "node_modules/web3-eth-contract/node_modules/web3-utils": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.7.5.tgz", - "integrity": "sha512-9AqNOziQky4wNQadEwEfHiBdOZqopIHzQQVzmvvv6fJwDSMhP+khqmAZC7YTiGjs0MboyZ8tWNivqSO1699XQw==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.0.tgz", + "integrity": "sha512-7nUIl7UWpLVka2f09CMbKOSEvorvHnaugIabU4mj7zfMvm0tSByLcEu3eyV9qgS11qxxLuOkzBIwCstTflhmpQ==", "dev": true, "dependencies": { "bn.js": "^5.2.1", @@ -46069,19 +46278,19 @@ } }, "node_modules/web3-eth-ens": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.7.5.tgz", - "integrity": "sha512-k1Q0msdRv/wac2egpZBIwG3n/sa/KdrVmVJvFm471gLTL4xfUizV5qJjkDVf+ikf9JyDvWJTs5eWNUUbOFIw/A==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.8.0.tgz", + "integrity": "sha512-/eFbQEwvsMOEiOhw9/iuRXCsPkqAmHHWuFOrThQkozRgcnSTRnvxkkRC/b6koiT5/HaKeUs4yQDg+/ixsIxZxA==", "dev": true, "dependencies": { "content-hash": "^2.5.2", "eth-ens-namehash": "2.0.8", - "web3-core": "1.7.5", - "web3-core-helpers": "1.7.5", - "web3-core-promievent": "1.7.5", - "web3-eth-abi": "1.7.5", - "web3-eth-contract": "1.7.5", - "web3-utils": "1.7.5" + "web3-core": "1.8.0", + "web3-core-helpers": "1.8.0", + "web3-core-promievent": "1.8.0", + "web3-eth-abi": "1.8.0", + "web3-eth-contract": "1.8.0", + "web3-utils": "1.8.0" }, "engines": { "node": ">=8.0.0" @@ -46104,9 +46313,9 @@ } }, "node_modules/web3-eth-ens/node_modules/web3-utils": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.7.5.tgz", - "integrity": "sha512-9AqNOziQky4wNQadEwEfHiBdOZqopIHzQQVzmvvv6fJwDSMhP+khqmAZC7YTiGjs0MboyZ8tWNivqSO1699XQw==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.0.tgz", + "integrity": "sha512-7nUIl7UWpLVka2f09CMbKOSEvorvHnaugIabU4mj7zfMvm0tSByLcEu3eyV9qgS11qxxLuOkzBIwCstTflhmpQ==", "dev": true, "dependencies": { "bn.js": "^5.2.1", @@ -46122,13 +46331,13 @@ } }, "node_modules/web3-eth-iban": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.7.5.tgz", - "integrity": "sha512-mn2W5t/1IpL8OZvzAabLKT4kvwRnZSJ9K0tctndl9sDNWkfITYQibEEhUaNNA50Q5fJKgVudHI/m0gwIVTyG8Q==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.8.0.tgz", + "integrity": "sha512-4RbvUxcMpo/e5811sE3a6inJ2H4+FFqUVmlRYs0RaXaxiHweahSRBNcpO0UWgmlePTolj0rXqPT2oEr0DuC8kg==", "dev": true, "dependencies": { "bn.js": "^5.2.1", - "web3-utils": "1.7.5" + "web3-utils": "1.8.0" }, "engines": { "node": ">=8.0.0" @@ -46151,9 +46360,9 @@ } }, "node_modules/web3-eth-iban/node_modules/web3-utils": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.7.5.tgz", - "integrity": "sha512-9AqNOziQky4wNQadEwEfHiBdOZqopIHzQQVzmvvv6fJwDSMhP+khqmAZC7YTiGjs0MboyZ8tWNivqSO1699XQw==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.0.tgz", + "integrity": "sha512-7nUIl7UWpLVka2f09CMbKOSEvorvHnaugIabU4mj7zfMvm0tSByLcEu3eyV9qgS11qxxLuOkzBIwCstTflhmpQ==", "dev": true, "dependencies": { "bn.js": "^5.2.1", @@ -46169,17 +46378,17 @@ } }, "node_modules/web3-eth-personal": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.7.5.tgz", - "integrity": "sha512-txh2P/eN8I4AOUKFi9++KKddoD0tWfCuu9Y1Kc41jSRbk6smO88Fum0KWNmYFYhSCX2qiknS1DfqsONl3igoKQ==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.8.0.tgz", + "integrity": "sha512-L7FT4nR3HmsfZyIAhFpEctKkYGOjRC2h6iFKs9gnFCHZga8yLcYcGaYOBIoYtaKom99MuGBoosayWt/Twh7F5A==", "dev": true, "dependencies": { "@types/node": "^12.12.6", - "web3-core": "1.7.5", - "web3-core-helpers": "1.7.5", - "web3-core-method": "1.7.5", - "web3-net": "1.7.5", - "web3-utils": "1.7.5" + "web3-core": "1.8.0", + "web3-core-helpers": "1.8.0", + "web3-core-method": "1.8.0", + "web3-net": "1.8.0", + "web3-utils": "1.8.0" }, "engines": { "node": ">=8.0.0" @@ -46208,9 +46417,9 @@ } }, "node_modules/web3-eth-personal/node_modules/web3-utils": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.7.5.tgz", - "integrity": "sha512-9AqNOziQky4wNQadEwEfHiBdOZqopIHzQQVzmvvv6fJwDSMhP+khqmAZC7YTiGjs0MboyZ8tWNivqSO1699XQw==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.0.tgz", + "integrity": "sha512-7nUIl7UWpLVka2f09CMbKOSEvorvHnaugIabU4mj7zfMvm0tSByLcEu3eyV9qgS11qxxLuOkzBIwCstTflhmpQ==", "dev": true, "dependencies": { "bn.js": "^5.2.1", @@ -46242,9 +46451,9 @@ } }, "node_modules/web3-eth/node_modules/web3-utils": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.7.5.tgz", - "integrity": "sha512-9AqNOziQky4wNQadEwEfHiBdOZqopIHzQQVzmvvv6fJwDSMhP+khqmAZC7YTiGjs0MboyZ8tWNivqSO1699XQw==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.0.tgz", + "integrity": "sha512-7nUIl7UWpLVka2f09CMbKOSEvorvHnaugIabU4mj7zfMvm0tSByLcEu3eyV9qgS11qxxLuOkzBIwCstTflhmpQ==", "dev": true, "dependencies": { "bn.js": "^5.2.1", @@ -46260,14 +46469,14 @@ } }, "node_modules/web3-net": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.7.5.tgz", - "integrity": "sha512-xwuCb2YWw49PmW81AJQ/G+Xi2ikRsYyZXSgyPt4LmZuKjiqg/6kSdK8lZvUi3Pi3wM+QDBXbpr73M/WEkW0KvA==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.8.0.tgz", + "integrity": "sha512-kX6EAacK7QrOe7DOh0t5yHS5q2kxZmTCxPVwSz9io9xBeE4n4UhmzGJ/VfhP2eM3OPKYeypcR3LEO6zZ8xn2vw==", "dev": true, "dependencies": { - "web3-core": "1.7.5", - "web3-core-method": "1.7.5", - "web3-utils": "1.7.5" + "web3-core": "1.8.0", + "web3-core-method": "1.8.0", + "web3-utils": "1.8.0" }, "engines": { "node": ">=8.0.0" @@ -46290,9 +46499,9 @@ } }, "node_modules/web3-net/node_modules/web3-utils": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.7.5.tgz", - "integrity": "sha512-9AqNOziQky4wNQadEwEfHiBdOZqopIHzQQVzmvvv6fJwDSMhP+khqmAZC7YTiGjs0MboyZ8tWNivqSO1699XQw==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.0.tgz", + "integrity": "sha512-7nUIl7UWpLVka2f09CMbKOSEvorvHnaugIabU4mj7zfMvm0tSByLcEu3eyV9qgS11qxxLuOkzBIwCstTflhmpQ==", "dev": true, "dependencies": { "bn.js": "^5.2.1", @@ -46491,41 +46700,41 @@ } }, "node_modules/web3-providers-http": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.7.5.tgz", - "integrity": "sha512-vPgr4Kzy0M3CHtoP/Bh7qwK/D9h2fhjpoqctdMWVJseOfeTgfOphCKN0uwV8w2VpZgDPXA8aeTdBx5OjmDdStA==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.8.0.tgz", + "integrity": "sha512-/MqxwRzExohBWW97mqlCSW/+NHydGRyoEDUS1bAIF2YjfKFwyRtHgrEzOojzkC9JvB+8LofMvbXk9CcltpZapw==", "dev": true, "dependencies": { "abortcontroller-polyfill": "^1.7.3", "cross-fetch": "^3.1.4", "es6-promise": "^4.2.8", - "web3-core-helpers": "1.7.5" + "web3-core-helpers": "1.8.0" }, "engines": { "node": ">=8.0.0" } }, "node_modules/web3-providers-ipc": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.7.5.tgz", - "integrity": "sha512-aNHx+RAROzO+apDEzy8Zncj78iqWBadIXtpmFDg7uiTn8i+oO+IcP1Yni7jyzkltsysVJHgHWG4kPx50ANCK3Q==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.8.0.tgz", + "integrity": "sha512-tAXHtVXNUOgehaBU8pzAlB3qhjn/PRpjdzEjzHNFqtRRTwzSEKOJxFeEhaUA4FzHnTlbnrs8ujHWUitcp1elfg==", "dev": true, "dependencies": { "oboe": "2.1.5", - "web3-core-helpers": "1.7.5" + "web3-core-helpers": "1.8.0" }, "engines": { "node": ">=8.0.0" } }, "node_modules/web3-providers-ws": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.7.5.tgz", - "integrity": "sha512-9uJNVVkIGC8PmM9kNbgPth56HDMSSsxZh3ZEENdwO3LNWemaADiQYUDCsD/dMVkn0xsGLHP5dgAy4Q5msqySLg==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.8.0.tgz", + "integrity": "sha512-bcZtSifsqyJxwkfQYamfdIRp4nhj9eJd7cxHg1uUkfLJK125WP96wyJL1xbPt7qt0MpfnTFn8/UuIqIB6nFENg==", "dev": true, "dependencies": { "eventemitter3": "4.0.4", - "web3-core-helpers": "1.7.5", + "web3-core-helpers": "1.8.0", "websocket": "^1.0.32" }, "engines": { @@ -46539,16 +46748,16 @@ "dev": true }, "node_modules/web3-shh": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.7.5.tgz", - "integrity": "sha512-aCIWJyLMH5H76OybU4ZpUCJ93yNOPATGhJ+KboRPU8QZDzS2CcVhtEzyl27bbvw+rSnVroMLqBgTXBB4mmKI7A==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.8.0.tgz", + "integrity": "sha512-DNRgSa9Jf9xYFUGKSMylrf+zt3MPjhI2qF+UWX07o0y3+uf8zalDGiJOWvIS4upAsdPiKKVJ7co+Neof47OMmg==", "dev": true, "hasInstallScript": true, "dependencies": { - "web3-core": "1.7.5", - "web3-core-method": "1.7.5", - "web3-core-subscriptions": "1.7.5", - "web3-net": "1.7.5" + "web3-core": "1.8.0", + "web3-core-method": "1.8.0", + "web3-core-subscriptions": "1.8.0", + "web3-net": "1.8.0" }, "engines": { "node": ">=8.0.0" @@ -46604,9 +46813,9 @@ } }, "node_modules/web3/node_modules/web3-utils": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.7.5.tgz", - "integrity": "sha512-9AqNOziQky4wNQadEwEfHiBdOZqopIHzQQVzmvvv6fJwDSMhP+khqmAZC7YTiGjs0MboyZ8tWNivqSO1699XQw==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.0.tgz", + "integrity": "sha512-7nUIl7UWpLVka2f09CMbKOSEvorvHnaugIabU4mj7zfMvm0tSByLcEu3eyV9qgS11qxxLuOkzBIwCstTflhmpQ==", "dev": true, "dependencies": { "bn.js": "^5.2.1", @@ -46636,12 +46845,12 @@ } }, "node_modules/webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", "dev": true, "engines": { - "node": ">=10.4" + "node": ">=12" } }, "node_modules/webp-loader": { @@ -47355,12 +47564,27 @@ "dev": true }, "node_modules/whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", "dev": true, "dependencies": { - "iconv-lite": "0.4.24" + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, "node_modules/whatwg-fetch": { @@ -47370,23 +47594,25 @@ "dev": true }, "node_modules/whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", - "dev": true + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "dev": true, + "engines": { + "node": ">=12" + } }, "node_modules/whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-10.0.0.tgz", + "integrity": "sha512-CLxxCmdUby142H5FZzn4D8ikO1cmypvXVQktsgosNy4a4BHrDHeciBBGZhb0bNoR5/MltoCatso+vFjjGx8t0w==", "dev": true, "dependencies": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" }, "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/whatwg-url-without-unicode": { @@ -47744,10 +47970,13 @@ } }, "node_modules/xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true, + "engines": { + "node": ">=12" + } }, "node_modules/xmlchars": { "version": "2.2.0", @@ -47805,21 +48034,21 @@ } }, "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "version": "17.6.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.0.tgz", + "integrity": "sha512-8H/wTDqlSwoSnScvV2N/JHfLWOKuh5MVla9hqLjK3nsfyy6Y4kDSYSvkU5YCUEPOSnRXfIyx3Sq+B/IWudTo4g==", "dev": true, "dependencies": { - "cliui": "^7.0.2", + "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "string-width": "^4.2.0", + "string-width": "^4.2.3", "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" + "yargs-parser": "^21.0.0" }, "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/yargs-parser": { @@ -47831,6 +48060,15 @@ "node": ">=10" } }, + "node_modules/yargs/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, "node_modules/yauzl": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", @@ -47853,9 +48091,9 @@ } }, "node_modules/zustand": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/zustand/-/zustand-4.1.1.tgz", - "integrity": "sha512-h4F3WMqsZgvvaE0n3lThx4MM81Ls9xebjvrABNzf5+jb3/03YjNTSgZXeyrvXDArMeV9untvWXRw1tY+ntPYbA==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/zustand/-/zustand-4.1.2.tgz", + "integrity": "sha512-gcRaKchcxFPbImrBb/BKgujOhHhik9YhVpIeP87ETT7uokEe2Szu7KkuZ9ghjtD+/KKkcrRNktR2AiLXPIbKIQ==", "dependencies": { "use-sync-external-store": "1.2.0" }, @@ -47923,26 +48161,26 @@ } }, "@babel/compat-data": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.0.tgz", - "integrity": "sha512-y5rqgTTPTmaF5e2nVhOxw+Ur9HDJLsWb6U/KpgUzRZEdPfE6VOubXBKLdbcUTijzRptednSBDQbYZBOSqJxpJw==" + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.4.tgz", + "integrity": "sha512-CHIGpJcUQ5lU9KrPHTjBMhVwQG6CQjxfg36fGXl3qk/Gik1WwWachaXFuo0uCWJT/mStOKtcbFJCaVLihC1CMw==" }, "@babel/core": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.0.tgz", - "integrity": "sha512-reM4+U7B9ss148rh2n1Qs9ASS+w94irYXga7c2jaQv9RVzpS7Mv1a9rnYYwuDa45G+DkORt9g6An2k/V4d9LbQ==", + "version": "7.19.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.3.tgz", + "integrity": "sha512-WneDJxdsjEvyKtXKsaBGbDeiyOjR5vYq4HcShxnIbG0qixpoHjI3MqeZM9NDvsojNCEBItQE4juOo/bU6e72gQ==", "dev": true, "requires": { "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.19.0", - "@babel/helper-compilation-targets": "^7.19.0", + "@babel/generator": "^7.19.3", + "@babel/helper-compilation-targets": "^7.19.3", "@babel/helper-module-transforms": "^7.19.0", "@babel/helpers": "^7.19.0", - "@babel/parser": "^7.19.0", + "@babel/parser": "^7.19.3", "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.0", - "@babel/types": "^7.19.0", + "@babel/traverse": "^7.19.3", + "@babel/types": "^7.19.3", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -47951,11 +48189,11 @@ } }, "@babel/generator": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.0.tgz", - "integrity": "sha512-S1ahxf1gZ2dpoiFgA+ohK9DIpz50bJ0CWs7Zlzb54Z4sG8qmdIrGrVqmy1sAtTVRb+9CU6U8VqT9L0Zj7hxHVg==", + "version": "7.19.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.5.tgz", + "integrity": "sha512-DxbNz9Lz4aMZ99qPpO1raTbcrI1ZeYh+9NR9qhfkQIbFtVEqotHojEBxHzmxhVONkGt6VyrqVQcgpefMy9pqcg==", "requires": { - "@babel/types": "^7.19.0", + "@babel/types": "^7.19.4", "@jridgewell/gen-mapping": "^0.3.2", "jsesc": "^2.5.1" } @@ -47979,13 +48217,13 @@ } }, "@babel/helper-compilation-targets": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.0.tgz", - "integrity": "sha512-Ai5bNWXIvwDvWM7njqsG3feMlL9hCVQsPYXodsZyLwshYkZVJt59Gftau4VrE8S9IT9asd2uSP1hG6wCNw+sXA==", + "version": "7.19.3", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.3.tgz", + "integrity": "sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg==", "requires": { - "@babel/compat-data": "^7.19.0", + "@babel/compat-data": "^7.19.3", "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.20.2", + "browserslist": "^4.21.3", "semver": "^6.3.0" } }, @@ -48015,9 +48253,9 @@ } }, "@babel/helper-define-polyfill-provider": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.2.tgz", - "integrity": "sha512-r9QJJ+uDWrd+94BSPcP6/de67ygLtvVy6cK4luE6MOuDsZIdoaPBnfSpbO/+LTifjPckbKXRuI9BB/Z2/y3iTg==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", + "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", "requires": { "@babel/helper-compilation-targets": "^7.17.7", "@babel/helper-plugin-utils": "^7.16.7", @@ -48118,25 +48356,25 @@ } }, "@babel/helper-replace-supers": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.9.tgz", - "integrity": "sha512-dNsWibVI4lNT6HiuOIBr1oyxo40HvIVmbwPUm3XZ7wMh4k2WxrxTqZwSqw/eEmXDS9np0ey5M2bz9tBmO9c+YQ==", + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz", + "integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==", "dev": true, "requires": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-member-expression-to-functions": "^7.18.9", "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9" + "@babel/traverse": "^7.19.1", + "@babel/types": "^7.19.0" } }, "@babel/helper-simple-access": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", - "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.19.4.tgz", + "integrity": "sha512-f9Xq6WqBFqaDfbCzn2w85hwklswz5qsKlh7f08w4Y9yhJHpnNC0QemtSkK5YyOY8kPGvyiwdzZksGUhnGdaUIg==", "dev": true, "requires": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.19.4" } }, "@babel/helper-skip-transparent-expression-wrappers": { @@ -48157,14 +48395,14 @@ } }, "@babel/helper-string-parser": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz", - "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==" + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==" }, "@babel/helper-validator-identifier": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", - "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==" + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" }, "@babel/helper-validator-option": { "version": "7.18.6", @@ -48184,14 +48422,14 @@ } }, "@babel/helpers": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.0.tgz", - "integrity": "sha512-DRBCKGwIEdqY3+rPJgG/dKfQy9+08rHIAJx8q2p+HSWP87s2HCrQmaAMMyMll2kIXKCW0cO1RdQskx15Xakftg==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.4.tgz", + "integrity": "sha512-G+z3aOx2nfDHwX/kyVii5fJq+bgscg89/dJNWpYeKeBv3v9xX8EIabmx1k6u9LS04H7nROFVRVK+e3k0VHp+sw==", "dev": true, "requires": { "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.0", - "@babel/types": "^7.19.0" + "@babel/traverse": "^7.19.4", + "@babel/types": "^7.19.4" } }, "@babel/highlight": { @@ -48205,9 +48443,9 @@ } }, "@babel/parser": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.0.tgz", - "integrity": "sha512-74bEXKX2h+8rrfQUfsBfuZZHzsEs6Eql4pqy/T4Nn6Y9wNPggQOqD6z6pn5Bl8ZfysKouFZT/UXEH94ummEeQw==" + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.4.tgz", + "integrity": "sha512-qpVT7gtuOLjWeDTKLkJ6sryqLliBaFpAtGeqw5cs5giLldvh+Ch0plqnUMKoVAUS6ZEueQQiZV+p5pxtPitEsA==" }, "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { "version": "7.18.6", @@ -48230,9 +48468,9 @@ } }, "@babel/plugin-proposal-async-generator-functions": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.19.0.tgz", - "integrity": "sha512-nhEByMUTx3uZueJ/QkJuSlCfN4FGg+xy+vRsfGQGzSauq5ks2Deid2+05Q3KhfaUjvec1IGhw/Zm3cFm8JigTQ==", + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.19.1.tgz", + "integrity": "sha512-0yu8vNATgLy4ivqMNBIwb1HebCelqN7YX8SL3FDXORv/RqT0zEEWUCH4GH44JsSrvCu6GqnAdR5EBFAPeNBB4Q==", "dev": true, "requires": { "@babel/helper-environment-visitor": "^7.18.9", @@ -48263,14 +48501,14 @@ } }, "@babel/plugin-proposal-decorators": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.19.0.tgz", - "integrity": "sha512-Bo5nOSjiJccjv00+BrDkmfeBLBi2B0qe8ygj24KdL8VdwtZz+710NCwehF+x/Ng+0mkHx5za2eAofmvVFLF4Fg==", + "version": "7.19.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.19.3.tgz", + "integrity": "sha512-MbgXtNXqo7RTKYIXVchVJGPvaVufQH3pxvQyfbGvNw1DObIhph+PesYXJTcd8J4DdWibvf6Z2eanOyItX8WnJg==", "dev": true, "requires": { "@babel/helper-create-class-features-plugin": "^7.19.0", "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-replace-supers": "^7.18.9", + "@babel/helper-replace-supers": "^7.19.1", "@babel/helper-split-export-declaration": "^7.18.6", "@babel/plugin-syntax-decorators": "^7.19.0" } @@ -48346,14 +48584,14 @@ } }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.9.tgz", - "integrity": "sha512-kDDHQ5rflIeY5xl69CEqGEZ0KY369ehsCIEbTGb4siHG5BE9sga/T0r0OUwyZNLMmZE79E1kbsqAjwFCW4ds6Q==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.19.4.tgz", + "integrity": "sha512-wHmj6LDxVDnL+3WhXteUBaoM1aVILZODAUjg11kHqG4cOlfgMQGxw6aCgvrXrmaJR3Bn14oZhImyCPZzRpC93Q==", "dev": true, "requires": { - "@babel/compat-data": "^7.18.8", - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9", + "@babel/compat-data": "^7.19.4", + "@babel/helper-compilation-targets": "^7.19.3", + "@babel/helper-plugin-utils": "^7.19.0", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-transform-parameters": "^7.18.8" } @@ -48638,12 +48876,12 @@ } }, "@babel/plugin-transform-block-scoping": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.9.tgz", - "integrity": "sha512-5sDIJRV1KtQVEbt/EIBwGy4T01uYIo4KRB3VUqzkhrAIOGx7AoctL9+Ux88btY0zXdDyPJ9mW+bg+v+XEkGmtw==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.19.4.tgz", + "integrity": "sha512-934S2VLLlt2hRJwPf4MczaOr4hYF0z+VKPwqTNxyKX7NthTiPfhuKFWQZHXRM0vh/wo/VyXB3s4bZUNA08l+tQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.19.0" } }, "@babel/plugin-transform-classes": { @@ -48673,12 +48911,12 @@ } }, "@babel/plugin-transform-destructuring": { - "version": "7.18.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.13.tgz", - "integrity": "sha512-TodpQ29XekIsex2A+YJPj5ax2plkGa8YYY6mFjCohk/IG9IY42Rtuj1FuDeemfg2ipxIFLzPeA83SIBnlhSIow==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.19.4.tgz", + "integrity": "sha512-t0j0Hgidqf0aM86dF8U+vXYReUgJnlv4bZLsyoPnwZNrGY+7/38o8YjaELrvHeVfTZao15kjR0PVv0nju2iduA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.19.0" } }, "@babel/plugin-transform-dotall-regex": { @@ -48805,9 +49043,9 @@ } }, "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.0.tgz", - "integrity": "sha512-HDSuqOQzkU//kfGdiHBt71/hkDTApw4U/cMVgKgX7PqfB3LOaK+2GtCEsBu1dL9CkswDm0Gwehht1dCr421ULQ==", + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.1.tgz", + "integrity": "sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw==", "dev": true, "requires": { "@babel/helper-create-regexp-features-plugin": "^7.19.0", @@ -48921,15 +49159,15 @@ } }, "@babel/plugin-transform-runtime": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.18.10.tgz", - "integrity": "sha512-q5mMeYAdfEbpBAgzl7tBre/la3LeCxmDO1+wMXRdPWbcoMjR3GiXlCLk7JBZVVye0bqTGNMbt0yYVXX1B1jEWQ==", + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.1.tgz", + "integrity": "sha512-2nJjTUFIzBMP/f/miLxEK9vxwW/KUXsdvN4sR//TmuDhe6yU2h57WmIOE12Gng3MDP/xpjUV/ToZRdcf8Yj4fA==", "requires": { "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.9", - "babel-plugin-polyfill-corejs2": "^0.3.2", - "babel-plugin-polyfill-corejs3": "^0.5.3", - "babel-plugin-polyfill-regenerator": "^0.4.0", + "@babel/helper-plugin-utils": "^7.19.0", + "babel-plugin-polyfill-corejs2": "^0.3.3", + "babel-plugin-polyfill-corejs3": "^0.6.0", + "babel-plugin-polyfill-regenerator": "^0.4.1", "semver": "^6.3.0" } }, @@ -48980,9 +49218,9 @@ } }, "@babel/plugin-transform-typescript": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.19.0.tgz", - "integrity": "sha512-DOOIywxPpkQHXijXv+s9MDAyZcLp12oYRl3CMWZ6u7TjSoCBq/KqHR/nNFR3+i2xqheZxoF0H2XyL7B6xeSRuA==", + "version": "7.19.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.19.3.tgz", + "integrity": "sha512-z6fnuK9ve9u/0X0rRvI9MY0xg+DOUaABDYOe+/SQTxtlptaBB/V9JIUxJn6xp3lMBeb9qe8xSFmHU35oZDXD+w==", "dev": true, "requires": { "@babel/helper-create-class-features-plugin": "^7.19.0", @@ -49010,18 +49248,18 @@ } }, "@babel/preset-env": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.19.0.tgz", - "integrity": "sha512-1YUju1TAFuzjIQqNM9WsF4U6VbD/8t3wEAlw3LFYuuEr+ywqLRcSXxFKz4DCEj+sN94l/XTDiUXYRrsvMpz9WQ==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.19.4.tgz", + "integrity": "sha512-5QVOTXUdqTCjQuh2GGtdd7YEhoRXBMVGROAtsBeLGIbIz3obCBIfRMT1I3ZKkMgNzwkyCkftDXSSkHxnfVf4qg==", "dev": true, "requires": { - "@babel/compat-data": "^7.19.0", - "@babel/helper-compilation-targets": "^7.19.0", + "@babel/compat-data": "^7.19.4", + "@babel/helper-compilation-targets": "^7.19.3", "@babel/helper-plugin-utils": "^7.19.0", "@babel/helper-validator-option": "^7.18.6", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-async-generator-functions": "^7.19.0", + "@babel/plugin-proposal-async-generator-functions": "^7.19.1", "@babel/plugin-proposal-class-properties": "^7.18.6", "@babel/plugin-proposal-class-static-block": "^7.18.6", "@babel/plugin-proposal-dynamic-import": "^7.18.6", @@ -49030,7 +49268,7 @@ "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", "@babel/plugin-proposal-numeric-separator": "^7.18.6", - "@babel/plugin-proposal-object-rest-spread": "^7.18.9", + "@babel/plugin-proposal-object-rest-spread": "^7.19.4", "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", "@babel/plugin-proposal-optional-chaining": "^7.18.9", "@babel/plugin-proposal-private-methods": "^7.18.6", @@ -49054,10 +49292,10 @@ "@babel/plugin-transform-arrow-functions": "^7.18.6", "@babel/plugin-transform-async-to-generator": "^7.18.6", "@babel/plugin-transform-block-scoped-functions": "^7.18.6", - "@babel/plugin-transform-block-scoping": "^7.18.9", + "@babel/plugin-transform-block-scoping": "^7.19.4", "@babel/plugin-transform-classes": "^7.19.0", "@babel/plugin-transform-computed-properties": "^7.18.9", - "@babel/plugin-transform-destructuring": "^7.18.13", + "@babel/plugin-transform-destructuring": "^7.19.4", "@babel/plugin-transform-dotall-regex": "^7.18.6", "@babel/plugin-transform-duplicate-keys": "^7.18.9", "@babel/plugin-transform-exponentiation-operator": "^7.18.6", @@ -49069,7 +49307,7 @@ "@babel/plugin-transform-modules-commonjs": "^7.18.6", "@babel/plugin-transform-modules-systemjs": "^7.19.0", "@babel/plugin-transform-modules-umd": "^7.18.6", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1", "@babel/plugin-transform-new-target": "^7.18.6", "@babel/plugin-transform-object-super": "^7.18.6", "@babel/plugin-transform-parameters": "^7.18.8", @@ -49084,11 +49322,11 @@ "@babel/plugin-transform-unicode-escapes": "^7.18.10", "@babel/plugin-transform-unicode-regex": "^7.18.6", "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.19.0", - "babel-plugin-polyfill-corejs2": "^0.3.2", - "babel-plugin-polyfill-corejs3": "^0.5.3", - "babel-plugin-polyfill-regenerator": "^0.4.0", - "core-js-compat": "^3.22.1", + "@babel/types": "^7.19.4", + "babel-plugin-polyfill-corejs2": "^0.3.3", + "babel-plugin-polyfill-corejs3": "^0.6.0", + "babel-plugin-polyfill-regenerator": "^0.4.1", + "core-js-compat": "^3.25.1", "semver": "^6.3.0" } }, @@ -49155,20 +49393,20 @@ } }, "@babel/runtime": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.19.0.tgz", - "integrity": "sha512-eR8Lo9hnDS7tqkO7NsV+mKvCmv5boaXFSZ70DnfhcgiEne8hv9oCEd36Klw74EtizEqLsy4YnW8UWwpBVolHZA==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.19.4.tgz", + "integrity": "sha512-EXpLCrk55f+cYqmHsSR+yD/0gAIMxxA9QK9lnQWzhMCvt+YmoBN7Zx94s++Kv0+unHk39vxNO8t+CMA2WSS3wA==", "requires": { "regenerator-runtime": "^0.13.4" } }, "@babel/runtime-corejs3": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.19.0.tgz", - "integrity": "sha512-JyXXoCu1N8GLuKc2ii8y5RGma5FMpFeO2nAQIe0Yzrbq+rQnN+sFj47auLblR5ka6aHNGPDgv8G/iI2Grb0ldQ==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.19.4.tgz", + "integrity": "sha512-HzjQ8+dzdx7dmZy4DQ8KV8aHi/74AjEbBGTFutBmg/pd3dY5/q1sfuOGPTFGEytlQhWoeVXqcK5BwMgIkRkNDQ==", "dev": true, "requires": { - "core-js-pure": "^3.20.2", + "core-js-pure": "^3.25.1", "regenerator-runtime": "^0.13.4" } }, @@ -49183,29 +49421,29 @@ } }, "@babel/traverse": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.0.tgz", - "integrity": "sha512-4pKpFRDh+utd2mbRC8JLnlsMUii3PMHjpL6a0SZ4NMZy7YFP9aXORxEhdMVOc9CpWtDF09IkciQLEhK7Ml7gRA==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.4.tgz", + "integrity": "sha512-w3K1i+V5u2aJUOXBFFC5pveFLmtq1s3qcdDNC2qRI6WPBQIDaKFqXxDEqDO/h1dQ3HjsZoZMyIy6jGLq0xtw+g==", "requires": { "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.19.0", + "@babel/generator": "^7.19.4", "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-function-name": "^7.19.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.19.0", - "@babel/types": "^7.19.0", + "@babel/parser": "^7.19.4", + "@babel/types": "^7.19.4", "debug": "^4.1.0", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.0.tgz", - "integrity": "sha512-YuGopBq3ke25BVSiS6fgF49Ul9gH1x70Bcr6bqRLjWCkcX8Hre1/5+z+IiWOIerRMSSEfGZVB9z9kyq7wVs9YA==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.4.tgz", + "integrity": "sha512-M5LK7nAeS6+9j7hAq+b3fQs+pNfUtTGq+yFFfHnauFA8zQtLRfmuipmsKDKKLuyG+wC8ABW43A153YNawNTEtw==", "requires": { - "@babel/helper-string-parser": "^7.18.10", - "@babel/helper-validator-identifier": "^7.18.6", + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", "to-fast-properties": "^2.0.0" } }, @@ -49308,9 +49546,9 @@ } }, "@coinbase/wallet-sdk": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@coinbase/wallet-sdk/-/wallet-sdk-3.5.2.tgz", - "integrity": "sha512-Wga/n2709w/+m/YlHviuQx8nl4gr2UkA4HM3OwFZopxvDeZerBYEjL/og7CUbSwplHDl+REIIz0jJfuedVyX5g==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/@coinbase/wallet-sdk/-/wallet-sdk-3.5.3.tgz", + "integrity": "sha512-kaGMk9KyiSLPm1+BvCQSc99ku9gn0j+M1+2Beii+4gx/lRVhutlzmn6l+5zTB/n3xri25iTr+SxjMZLlMfW8Hg==", "requires": { "@metamask/safe-event-emitter": "2.0.0", "@solana/web3.js": "1.52.0", @@ -49359,9 +49597,9 @@ } }, "preact": { - "version": "10.10.6", - "resolved": "https://registry.npmjs.org/preact/-/preact-10.10.6.tgz", - "integrity": "sha512-w0mCL5vICUAZrh1DuHEdOWBjxdO62lvcO++jbzr8UhhYcTbFkpegLH9XX+7MadjTl/y0feoqwQ/zAnzkc/EGog==" + "version": "10.11.1", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.11.1.tgz", + "integrity": "sha512-1Wz5PCRm6Fg+6BTXWJHhX4wRK9MZbZBHuwBqfZlOdVm2NqPe8/rjYpufvYCwJSGb9layyzB2jTTXfpCTynLqFQ==" }, "readable-stream": { "version": "3.6.0", @@ -49610,9 +49848,9 @@ }, "dependencies": { "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -49758,9 +49996,9 @@ "integrity": "sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ==" }, "csstype": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz", - "integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" } } }, @@ -50221,9 +50459,9 @@ "integrity": "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==" }, "@ethersproject/networks": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.0.tgz", - "integrity": "sha512-MG6oHSQHd4ebvJrleEQQ4HhVu8Ichr0RDYEfHzsVAVjHNM+w36x9wp9r+hf1JstMXtseXDtkiVoARAG6M959AA==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz", + "integrity": "sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==", "requires": { "@ethersproject/logger": "^5.7.0" } @@ -50246,9 +50484,9 @@ } }, "@ethersproject/providers": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.0.tgz", - "integrity": "sha512-+TTrrINMzZ0aXtlwO/95uhAggKm4USLm1PbeCBR/3XZ7+Oey+3pMyddzZEyRhizHpy1HXV0FRWRMI1O3EGYibA==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.1.tgz", + "integrity": "sha512-vZveG/DLyo+wk4Ga1yx6jSEHrLPgmTt+dFv0dv8URpVCRf0jVhalps1jq/emN/oXnMRsC7cQgAF32DcXLL7BPQ==", "requires": { "@ethersproject/abstract-provider": "^5.7.0", "@ethersproject/abstract-signer": "^5.7.0", @@ -50385,9 +50623,9 @@ } }, "@ethersproject/web": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.0.tgz", - "integrity": "sha512-ApHcbbj+muRASVDSCl/tgxaH2LBkRMEYfLOLVa0COipx0+nlu0QKet7U2lEg0vdkh8XRSLf2nd1f1Uk9SrVSGA==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz", + "integrity": "sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==", "requires": { "@ethersproject/base64": "^5.7.0", "@ethersproject/bytes": "^5.7.0", @@ -50415,9 +50653,9 @@ "dev": true }, "@gnosis.pm/safe-apps-provider": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-apps-provider/-/safe-apps-provider-0.13.1.tgz", - "integrity": "sha512-v84Apwb5SeDuRexcvzL2fyfYS3SR9MqPSKiSyFFOWo/Tpm4zgF/Z4ZKhsBKkgktqGoc0zFUZeQPVvqyQpixM9g==", + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-apps-provider/-/safe-apps-provider-0.14.0.tgz", + "integrity": "sha512-qOkPUfIu9dLoy4Muo40xzswqix7ZoJDmtEl35D+oYYa6JDw8cr4tVkPPjl6eDPNtMLiqGjs1POzHdZrfC8aHVw==", "requires": { "@gnosis.pm/safe-apps-sdk": "7.8.0", "events": "^3.3.0" @@ -50433,18 +50671,18 @@ } }, "@gnosis.pm/safe-apps-wagmi": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-apps-wagmi/-/safe-apps-wagmi-1.0.3.tgz", - "integrity": "sha512-UKzO/+7hRitjAr5uHqPXNzY1s5JV0y5aheLEpGQQlDEg42EMflo2nm+K4NV+S0mrgnTPW+/kk00sv8FuQqaFjA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-apps-wagmi/-/safe-apps-wagmi-1.0.4.tgz", + "integrity": "sha512-D0jJLhhJO6WmWl47UBmHS8PBvStLTM2mHobtUdwJHNK//4sTStrmQ2RexUhzbvbEimFfEXKJOexTN66z/slHpQ==", "requires": { - "@gnosis.pm/safe-apps-provider": "^0.13.0", + "@gnosis.pm/safe-apps-provider": "^0.14.0", "@gnosis.pm/safe-apps-sdk": "^7.7.0" } }, "@gnosis.pm/safe-react-gateway-sdk": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-react-gateway-sdk/-/safe-react-gateway-sdk-3.4.0.tgz", - "integrity": "sha512-HtxcXA3KHc3Z/b7jFG7fp9sVTPYyzfV2/8EAZN94qlP7GL2SqU+TuzAR7ZdgBzLhQGWwwvS5b8Ahxraqr1Fz1Q==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@gnosis.pm/safe-react-gateway-sdk/-/safe-react-gateway-sdk-3.4.1.tgz", + "integrity": "sha512-b8i0BLEP9CC7S2N7hYDX3OXRYIb9asOMVW0QWh4jzsgT5xitUOPy4jrZL9kAmx8QgcMPYbD+Jjsq/R9ltzSmew==", "requires": { "cross-fetch": "^3.1.5" } @@ -50475,12 +50713,6 @@ "minimatch": "^3.0.4" } }, - "@humanwhocodes/gitignore-to-minimatch": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", - "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", - "dev": true - }, "@humanwhocodes/module-importer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", @@ -50558,36 +50790,37 @@ "dev": true }, "@jest/console": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", - "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz", + "integrity": "sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==", "dev": true, "requires": { - "@jest/types": "^27.5.1", + "@jest/types": "^28.1.3", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", + "jest-message-util": "^28.1.3", + "jest-util": "^28.1.3", "slash": "^3.0.0" }, "dependencies": { "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", "dev": true, "requires": { + "@jest/schemas": "^28.1.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^16.0.0", + "@types/yargs": "^17.0.8", "chalk": "^4.0.0" } }, "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", "dev": true, "requires": { "@types/yargs-parser": "*" @@ -50634,12 +50867,12 @@ "dev": true }, "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", "dev": true, "requires": { - "@jest/types": "^27.5.1", + "@jest/types": "^28.1.3", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -50659,81 +50892,83 @@ } }, "@jest/core": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", - "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-28.1.3.tgz", + "integrity": "sha512-CIKBrlaKOzA7YG19BEqCw3SLIsEwjZkeJzf5bdooVnW4bH5cktqe3JX+G2YV1aK5vP8N9na1IGWFzYaTp6k6NA==", "dev": true, "requires": { - "@jest/console": "^27.5.1", - "@jest/reporters": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/console": "^28.1.3", + "@jest/reporters": "^28.1.3", + "@jest/test-result": "^28.1.3", + "@jest/transform": "^28.1.3", + "@jest/types": "^28.1.3", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "emittery": "^0.8.1", + "ci-info": "^3.2.0", "exit": "^0.1.2", "graceful-fs": "^4.2.9", - "jest-changed-files": "^27.5.1", - "jest-config": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-resolve-dependencies": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "jest-watcher": "^27.5.1", + "jest-changed-files": "^28.1.3", + "jest-config": "^28.1.3", + "jest-haste-map": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-regex-util": "^28.0.2", + "jest-resolve": "^28.1.3", + "jest-resolve-dependencies": "^28.1.3", + "jest-runner": "^28.1.3", + "jest-runtime": "^28.1.3", + "jest-snapshot": "^28.1.3", + "jest-util": "^28.1.3", + "jest-validate": "^28.1.3", + "jest-watcher": "^28.1.3", "micromatch": "^4.0.4", + "pretty-format": "^28.1.3", "rimraf": "^3.0.0", "slash": "^3.0.0", "strip-ansi": "^6.0.0" }, "dependencies": { "@jest/transform": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", - "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-28.1.3.tgz", + "integrity": "sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA==", "dev": true, "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.5.1", + "@babel/core": "^7.11.6", + "@jest/types": "^28.1.3", + "@jridgewell/trace-mapping": "^0.3.13", "babel-plugin-istanbul": "^6.1.1", "chalk": "^4.0.0", "convert-source-map": "^1.4.0", "fast-json-stable-stringify": "^2.0.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-util": "^27.5.1", + "jest-haste-map": "^28.1.3", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.1.3", "micromatch": "^4.0.4", "pirates": "^4.0.4", "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" + "write-file-atomic": "^4.0.1" } }, "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", "dev": true, "requires": { + "@jest/schemas": "^28.1.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^16.0.0", + "@types/yargs": "^17.0.8", "chalk": "^4.0.0" } }, "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", "dev": true, "requires": { "@types/yargs-parser": "*" @@ -50780,49 +51015,38 @@ "dev": true }, "jest-haste-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", - "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz", + "integrity": "sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA==", "dev": true, "requires": { - "@jest/types": "^27.5.1", - "@types/graceful-fs": "^4.1.2", + "@jest/types": "^28.1.3", + "@types/graceful-fs": "^4.1.3", "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", "fsevents": "^2.3.2", "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.1.3", + "jest-worker": "^28.1.3", "micromatch": "^4.0.4", - "walker": "^1.0.7" + "walker": "^1.0.8" } }, "jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", "dev": true }, - "jest-serializer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", - "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", - "dev": true, - "requires": { - "@types/node": "*", - "graceful-fs": "^4.2.9" - } - }, "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", "dev": true, "requires": { - "@jest/types": "^27.5.1", + "@jest/types": "^28.1.3", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -50830,6 +51054,26 @@ "picomatch": "^2.2.3" } }, + "pretty-format": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", + "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", + "dev": true, + "requires": { + "@jest/schemas": "^28.1.3", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + } + } + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -50838,38 +51082,49 @@ "requires": { "has-flag": "^4.0.0" } + }, + "write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + } } } }, "@jest/environment": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", - "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.1.3.tgz", + "integrity": "sha512-1bf40cMFTEkKyEf585R9Iz1WayDjHoHqvts0XFYEqyKM3cFWDpeMoqKKTAF9LSYQModPUlh8FKptoM2YcMWAXA==", "dev": true, "requires": { - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/fake-timers": "^28.1.3", + "@jest/types": "^28.1.3", "@types/node": "*", - "jest-mock": "^27.5.1" + "jest-mock": "^28.1.3" }, "dependencies": { "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", "dev": true, "requires": { + "@jest/schemas": "^28.1.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^16.0.0", + "@types/yargs": "^17.0.8", "chalk": "^4.0.0" } }, "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", "dev": true, "requires": { "@types/yargs-parser": "*" @@ -50926,37 +51181,57 @@ } } }, + "@jest/expect": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-28.1.3.tgz", + "integrity": "sha512-lzc8CpUbSoE4dqT0U+g1qODQjBRHPpCPXissXD4mS9+sWQdmmpeJ9zSH1rS1HEkrsMN0fb7nKrJ9giAR1d3wBw==", + "dev": true, + "requires": { + "expect": "^28.1.3", + "jest-snapshot": "^28.1.3" + } + }, + "@jest/expect-utils": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-28.1.3.tgz", + "integrity": "sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA==", + "dev": true, + "requires": { + "jest-get-type": "^28.0.2" + } + }, "@jest/fake-timers": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", - "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.3.tgz", + "integrity": "sha512-D/wOkL2POHv52h+ok5Oj/1gOG9HSywdoPtFsRCUmlCILXNn5eIWmcnd3DIiWlJnpGvQtmajqBP95Ei0EimxfLw==", "dev": true, "requires": { - "@jest/types": "^27.5.1", - "@sinonjs/fake-timers": "^8.0.1", + "@jest/types": "^28.1.3", + "@sinonjs/fake-timers": "^9.1.2", "@types/node": "*", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" + "jest-message-util": "^28.1.3", + "jest-mock": "^28.1.3", + "jest-util": "^28.1.3" }, "dependencies": { "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", "dev": true, "requires": { + "@jest/schemas": "^28.1.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^16.0.0", + "@types/yargs": "^17.0.8", "chalk": "^4.0.0" } }, "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", "dev": true, "requires": { "@types/yargs-parser": "*" @@ -51003,12 +51278,12 @@ "dev": true }, "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", "dev": true, "requires": { - "@jest/types": "^27.5.1", + "@jest/types": "^28.1.3", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -51028,33 +51303,34 @@ } }, "@jest/globals": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", - "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-28.1.3.tgz", + "integrity": "sha512-XFU4P4phyryCXu1pbcqMO0GSQcYe1IsalYCDzRNyhetyeyxMcIxa11qPNDpVNLeretItNqEmYYQn1UYz/5x1NA==", "dev": true, "requires": { - "@jest/environment": "^27.5.1", - "@jest/types": "^27.5.1", - "expect": "^27.5.1" + "@jest/environment": "^28.1.3", + "@jest/expect": "^28.1.3", + "@jest/types": "^28.1.3" }, "dependencies": { "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", "dev": true, "requires": { + "@jest/schemas": "^28.1.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^16.0.0", + "@types/yargs": "^17.0.8", "chalk": "^4.0.0" } }, "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", "dev": true, "requires": { "@types/yargs-parser": "*" @@ -51112,78 +51388,79 @@ } }, "@jest/reporters": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", - "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-28.1.3.tgz", + "integrity": "sha512-JuAy7wkxQZVNU/V6g9xKzCGC5LVXx9FDcABKsSXp5MiKPEE2144a/vXTEDoyzjUpZKfVwp08Wqg5A4WfTMAzjg==", "dev": true, "requires": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/console": "^28.1.3", + "@jest/test-result": "^28.1.3", + "@jest/transform": "^28.1.3", + "@jest/types": "^28.1.3", + "@jridgewell/trace-mapping": "^0.3.13", "@types/node": "*", "chalk": "^4.0.0", "collect-v8-coverage": "^1.0.0", "exit": "^0.1.2", - "glob": "^7.1.2", + "glob": "^7.1.3", "graceful-fs": "^4.2.9", "istanbul-lib-coverage": "^3.0.0", "istanbul-lib-instrument": "^5.1.0", "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", "istanbul-reports": "^3.1.3", - "jest-haste-map": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", + "jest-message-util": "^28.1.3", + "jest-util": "^28.1.3", + "jest-worker": "^28.1.3", "slash": "^3.0.0", - "source-map": "^0.6.0", "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", "terminal-link": "^2.0.0", - "v8-to-istanbul": "^8.1.0" + "v8-to-istanbul": "^9.0.1" }, "dependencies": { "@jest/transform": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", - "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-28.1.3.tgz", + "integrity": "sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA==", "dev": true, "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.5.1", + "@babel/core": "^7.11.6", + "@jest/types": "^28.1.3", + "@jridgewell/trace-mapping": "^0.3.13", "babel-plugin-istanbul": "^6.1.1", "chalk": "^4.0.0", "convert-source-map": "^1.4.0", "fast-json-stable-stringify": "^2.0.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-util": "^27.5.1", + "jest-haste-map": "^28.1.3", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.1.3", "micromatch": "^4.0.4", "pirates": "^4.0.4", "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" + "write-file-atomic": "^4.0.1" } }, "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", "dev": true, "requires": { + "@jest/schemas": "^28.1.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^16.0.0", + "@types/yargs": "^17.0.8", "chalk": "^4.0.0" } }, "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", "dev": true, "requires": { "@types/yargs-parser": "*" @@ -51230,49 +51507,38 @@ "dev": true }, "jest-haste-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", - "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz", + "integrity": "sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA==", "dev": true, "requires": { - "@jest/types": "^27.5.1", - "@types/graceful-fs": "^4.1.2", + "@jest/types": "^28.1.3", + "@types/graceful-fs": "^4.1.3", "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", "fsevents": "^2.3.2", "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.1.3", + "jest-worker": "^28.1.3", "micromatch": "^4.0.4", - "walker": "^1.0.7" + "walker": "^1.0.8" } }, "jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", "dev": true }, - "jest-serializer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", - "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", - "dev": true, - "requires": { - "@types/node": "*", - "graceful-fs": "^4.2.9" - } - }, "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", "dev": true, "requires": { - "@jest/types": "^27.5.1", + "@jest/types": "^28.1.3", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -51288,49 +51554,69 @@ "requires": { "has-flag": "^4.0.0" } + }, + "write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + } } } }, + "@jest/schemas": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", + "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", + "dev": true, + "requires": { + "@sinclair/typebox": "^0.24.1" + } + }, "@jest/source-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", - "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", + "version": "28.1.2", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-28.1.2.tgz", + "integrity": "sha512-cV8Lx3BeStJb8ipPHnqVw/IM2VCMWO3crWZzYodSIkxXnRcXJipCdx1JCK0K5MsJJouZQTH73mzf4vgxRaH9ww==", "dev": true, "requires": { + "@jridgewell/trace-mapping": "^0.3.13", "callsites": "^3.0.0", - "graceful-fs": "^4.2.9", - "source-map": "^0.6.0" + "graceful-fs": "^4.2.9" } }, "@jest/test-result": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", - "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz", + "integrity": "sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==", "dev": true, "requires": { - "@jest/console": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/console": "^28.1.3", + "@jest/types": "^28.1.3", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" }, "dependencies": { "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", "dev": true, "requires": { + "@jest/schemas": "^28.1.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^16.0.0", + "@types/yargs": "^17.0.8", "chalk": "^4.0.0" } }, "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", "dev": true, "requires": { "@types/yargs-parser": "*" @@ -51388,34 +51674,35 @@ } }, "@jest/test-sequencer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", - "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-28.1.3.tgz", + "integrity": "sha512-NIMPEqqa59MWnDi1kvXXpYbqsfQmSJsIbnd85mdVGkiDfQ9WQQTXOLsvISUfonmnBT+w85WEgneCigEEdHDFxw==", "dev": true, "requires": { - "@jest/test-result": "^27.5.1", + "@jest/test-result": "^28.1.3", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-runtime": "^27.5.1" + "jest-haste-map": "^28.1.3", + "slash": "^3.0.0" }, "dependencies": { "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", "dev": true, "requires": { + "@jest/schemas": "^28.1.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^16.0.0", + "@types/yargs": "^17.0.8", "chalk": "^4.0.0" } }, "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", "dev": true, "requires": { "@types/yargs-parser": "*" @@ -51462,49 +51749,38 @@ "dev": true }, "jest-haste-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", - "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz", + "integrity": "sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA==", "dev": true, "requires": { - "@jest/types": "^27.5.1", - "@types/graceful-fs": "^4.1.2", + "@jest/types": "^28.1.3", + "@types/graceful-fs": "^4.1.3", "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", "fsevents": "^2.3.2", "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.1.3", + "jest-worker": "^28.1.3", "micromatch": "^4.0.4", - "walker": "^1.0.7" + "walker": "^1.0.8" } }, "jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", "dev": true }, - "jest-serializer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", - "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", - "dev": true, - "requires": { - "@types/node": "*", - "graceful-fs": "^4.2.9" - } - }, "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", "dev": true, "requires": { - "@jest/types": "^27.5.1", + "@jest/types": "^28.1.3", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -51697,12 +51973,12 @@ "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" }, "@jridgewell/trace-mapping": { - "version": "0.3.15", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz", - "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==", + "version": "0.3.16", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.16.tgz", + "integrity": "sha512-LCQ+NeThyJ4k1W2d+vIKdxuSt9R3pQSZ4P92m7EakaYuXcVWbHuT5bjNcqLd4Rdgi6xYWYDvBJZJLZSLanjDcA==", "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" } }, "@json-rpc-tools/provider": { @@ -52052,9 +52328,9 @@ }, "dependencies": { "@eslint/eslintrc": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.1.tgz", - "integrity": "sha512-OhSY22oQQdw3zgPOOwdoj01l/Dzl1Z+xyUP33tkSN+aqyEhymJCcPHyXt+ylW8FSe0TfRC2VG+ROQOapD0aZSQ==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", + "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", "dev": true, "requires": { "ajv": "^6.12.4", @@ -52069,9 +52345,9 @@ } }, "@humanwhocodes/config-array": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz", - "integrity": "sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw==", + "version": "0.10.7", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.7.tgz", + "integrity": "sha512-MDl6D6sBsaV452/QSdX+4CXIjZhIcI0PELsxUjk4U828yd58vk3bTIvk/6w5FY+4hIy9sLW0sfrV7K7Kc++j/w==", "dev": true, "requires": { "@humanwhocodes/object-schema": "^1.2.1", @@ -52126,14 +52402,13 @@ "dev": true }, "eslint": { - "version": "8.23.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.23.0.tgz", - "integrity": "sha512-pBG/XOn0MsJcKcTRLr27S5HpzQo4kLr+HjLQIyK4EiCsijDl/TB+h5uEuJU6bQ8Edvwz1XWOjpaP2qgnXGpTcA==", + "version": "8.25.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.25.0.tgz", + "integrity": "sha512-DVlJOZ4Pn50zcKW5bYH7GQK/9MsoQG2d5eDH0ebEkE8PbgzTTmtt/VTH9GGJ4BfeZCpBLqFfvsjX35UacUL83A==", "dev": true, "requires": { - "@eslint/eslintrc": "^1.3.1", - "@humanwhocodes/config-array": "^0.10.4", - "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", + "@eslint/eslintrc": "^1.3.3", + "@humanwhocodes/config-array": "^0.10.5", "@humanwhocodes/module-importer": "^1.0.1", "ajv": "^6.10.0", "chalk": "^4.0.0", @@ -52150,7 +52425,6 @@ "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "find-up": "^5.0.0", - "functional-red-black-tree": "^1.0.1", "glob-parent": "^6.0.1", "globals": "^13.15.0", "globby": "^11.1.0", @@ -52159,6 +52433,7 @@ "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", + "js-sdsl": "^4.1.4", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", @@ -52279,9 +52554,9 @@ "integrity": "sha512-/gApFXWk5CCLFQJL5IYJXxPQuG5tz5nPX4l27A9Zm/+wJxiwFrRSP54AopDxIv4JRp/rGwcgk/lZS/0Clw8jYA==" }, "@next/eslint-plugin-next": { - "version": "12.3.0", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-12.3.0.tgz", - "integrity": "sha512-jVdq1qYTNDjUtulnE8/hkPv0pHILV4jMg5La99iaY/FFm20WxVnsAZtbNnMvlPbf8dc010oO304SX9yXbg5PAw==", + "version": "12.3.1", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-12.3.1.tgz", + "integrity": "sha512-sw+lTf6r6P0j+g/n9y4qdWWI2syPqZx+uc0+B/fRENqfR3KpSid6MIKqc9gNwGhJASazEQ5b3w8h4cAET213jw==", "dev": true, "requires": { "glob": "7.1.7" @@ -52392,9 +52667,9 @@ } }, "@nomiclabs/hardhat-etherscan": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-3.1.0.tgz", - "integrity": "sha512-JroYgfN1AlYFkQTQ3nRwFi4o8NtZF7K/qFR2dxDUgHbCtIagkUseca9L4E/D2ScUm4XT40+8PbCdqZi+XmHyQA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-3.1.1.tgz", + "integrity": "sha512-a6+fJlHTiPjzUYnvwkcduJN0rAKWagQsQNoHJP/9mJ1CZjIkGysGtvVAjNpnrYWocj/Hbi36XmZ0H2aIKlol7A==", "requires": { "@ethersproject/abi": "^5.1.2", "@ethersproject/address": "^5.0.2", @@ -52444,9 +52719,9 @@ }, "dependencies": { "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -52470,14 +52745,14 @@ "integrity": "sha512-HaW78NszGzRZd9SeoI3JD11JqY+lubnaOx7Pewj5pfjqWXOEATpeKIFb9Z4t2WBUK2iryiXX3lzWwmYWgUL0Ug==" }, "@pmmmwh/react-refresh-webpack-plugin": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.7.tgz", - "integrity": "sha512-bcKCAzF0DV2IIROp9ZHkRJa6O4jy7NlnHdWL3GmcUxYWNjLXkK5kfELELwEfSP5hXPfVL/qOGMAROuMQb9GG8Q==", + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.8.tgz", + "integrity": "sha512-wxXRwf+IQ6zvHSJZ+5T2RQNEsq+kx4jKRXfFvdt3nBIUzJUAvXEFsUeoaohDe/Kr84MTjGwcuIUPNcstNJORsA==", "dev": true, "requires": { "ansi-html-community": "^0.0.8", "common-path-prefix": "^3.0.0", - "core-js-pure": "^3.8.1", + "core-js-pure": "^3.23.3", "error-stack-parser": "^2.0.6", "find-up": "^5.0.0", "html-entities": "^2.1.0", @@ -52684,6 +52959,12 @@ "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", "dev": true }, + "@sinclair/typebox": { + "version": "0.24.46", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.46.tgz", + "integrity": "sha512-ng4ut1z2MCBhK/NwDVwIQp3pAUOCs/KNaW3cBxdFB2xTDrOuo1xuNmpr/9HHFhxqIvHrs1NTH3KJg6q+JSy1Kw==", + "dev": true + }, "@sindresorhus/is": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", @@ -52701,18 +52982,18 @@ } }, "@sinonjs/fake-timers": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", - "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", + "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==", "dev": true, "requires": { "@sinonjs/commons": "^1.7.0" } }, "@snapshot-labs/snapshot.js": { - "version": "0.4.28", - "resolved": "https://registry.npmjs.org/@snapshot-labs/snapshot.js/-/snapshot.js-0.4.28.tgz", - "integrity": "sha512-zP/XtR6gzoF5KjD8q9PdlN7HMQGC1yX9pT1hK185xqfdwB57Ut+Jk3Sk7Sr6bRygSSTlSSyg12zZ1EdHwZMGyw==", + "version": "0.4.40", + "resolved": "https://registry.npmjs.org/@snapshot-labs/snapshot.js/-/snapshot.js-0.4.40.tgz", + "integrity": "sha512-/6VHbDZANx36c4nMCiPrg3LR52jjysow+F/79lp7h8B3sNHMqHCTDmheBM6pTguQ3+cCgfKLOrZn62C9laQW2A==", "requires": { "@ensdomains/eth-ens-namehash": "^2.0.15", "@ethersproject/abi": "^5.6.4", @@ -52824,18 +53105,18 @@ } }, "@storybook/addon-actions": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-6.5.10.tgz", - "integrity": "sha512-vpCnEu81fmtYzOf0QsRYoDuf9wXgVVl2VysE1dWRebRhIUDU0JurrthTnw322e38D4FzaoNGqZE7wnBYBohzZA==", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-6.5.12.tgz", + "integrity": "sha512-yEbyKjBsSRUr61SlS+SOTqQwdumO8Wa3GoHO3AfmvoKfzdGrM7w8G5Zs9Iev16khWg/7bQvoH3KZsg/hQuKnNg==", "dev": true, "requires": { - "@storybook/addons": "6.5.10", - "@storybook/api": "6.5.10", - "@storybook/client-logger": "6.5.10", - "@storybook/components": "6.5.10", - "@storybook/core-events": "6.5.10", + "@storybook/addons": "6.5.12", + "@storybook/api": "6.5.12", + "@storybook/client-logger": "6.5.12", + "@storybook/components": "6.5.12", + "@storybook/core-events": "6.5.12", "@storybook/csf": "0.0.2--canary.4566f4d.1", - "@storybook/theming": "6.5.10", + "@storybook/theming": "6.5.12", "core-js": "^3.8.2", "fast-deep-equal": "^3.1.3", "global": "^4.4.0", @@ -52851,18 +53132,18 @@ } }, "@storybook/addon-backgrounds": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-6.5.10.tgz", - "integrity": "sha512-5uzQda3dh891h7BL8e9Ymk7BI+QgkkzDJXuA4mHjOXfIiD3S3efhJI8amXuBC2ZpIr6zmVit0MqZVyoVve46cQ==", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-6.5.12.tgz", + "integrity": "sha512-S0QThY1jnU7Q+HY+g9JgpAJszzNmNkigZ4+X/4qlUXE0WYYn9i2YG5H6me1+57QmIXYddcWWqqgF9HUXl667NA==", "dev": true, "requires": { - "@storybook/addons": "6.5.10", - "@storybook/api": "6.5.10", - "@storybook/client-logger": "6.5.10", - "@storybook/components": "6.5.10", - "@storybook/core-events": "6.5.10", + "@storybook/addons": "6.5.12", + "@storybook/api": "6.5.12", + "@storybook/client-logger": "6.5.12", + "@storybook/components": "6.5.12", + "@storybook/core-events": "6.5.12", "@storybook/csf": "0.0.2--canary.4566f4d.1", - "@storybook/theming": "6.5.10", + "@storybook/theming": "6.5.12", "core-js": "^3.8.2", "global": "^4.4.0", "memoizerific": "^1.11.3", @@ -52872,49 +53153,49 @@ } }, "@storybook/addon-controls": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-6.5.10.tgz", - "integrity": "sha512-lC2y3XcolmQAJwFurIyGrynAHPWmfNtTCdu3rQBTVGwyxCoNwdOOeC2jV0BRqX2+CW6OHzJr9frNWXPSaZ8c4w==", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-6.5.12.tgz", + "integrity": "sha512-UoaamkGgAQXplr0kixkPhROdzkY+ZJQpG7VFDU6kmZsIgPRNfX/QoJFR5vV6TpDArBIjWaUUqWII+GHgPRzLgQ==", "dev": true, "requires": { - "@storybook/addons": "6.5.10", - "@storybook/api": "6.5.10", - "@storybook/client-logger": "6.5.10", - "@storybook/components": "6.5.10", - "@storybook/core-common": "6.5.10", + "@storybook/addons": "6.5.12", + "@storybook/api": "6.5.12", + "@storybook/client-logger": "6.5.12", + "@storybook/components": "6.5.12", + "@storybook/core-common": "6.5.12", "@storybook/csf": "0.0.2--canary.4566f4d.1", - "@storybook/node-logger": "6.5.10", - "@storybook/store": "6.5.10", - "@storybook/theming": "6.5.10", + "@storybook/node-logger": "6.5.12", + "@storybook/store": "6.5.12", + "@storybook/theming": "6.5.12", "core-js": "^3.8.2", "lodash": "^4.17.21", "ts-dedent": "^2.0.0" } }, "@storybook/addon-docs": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-6.5.10.tgz", - "integrity": "sha512-1kgjo3f0vL6GN8fTwLL05M/q/kDdzvuqwhxPY/v5hubFb3aQZGr2yk9pRBaLAbs4bez0yG0ASXcwhYnrEZUppg==", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-6.5.12.tgz", + "integrity": "sha512-T+QTkmF7QlMVfXHXEberP8CYti/XMTo9oi6VEbZLx+a2N3qY4GZl7X2g26Sf5V4Za+xnapYKBMEIiJ5SvH9weQ==", "dev": true, "requires": { "@babel/plugin-transform-react-jsx": "^7.12.12", "@babel/preset-env": "^7.12.11", "@jest/transform": "^26.6.2", "@mdx-js/react": "^1.6.22", - "@storybook/addons": "6.5.10", - "@storybook/api": "6.5.10", - "@storybook/components": "6.5.10", - "@storybook/core-common": "6.5.10", - "@storybook/core-events": "6.5.10", + "@storybook/addons": "6.5.12", + "@storybook/api": "6.5.12", + "@storybook/components": "6.5.12", + "@storybook/core-common": "6.5.12", + "@storybook/core-events": "6.5.12", "@storybook/csf": "0.0.2--canary.4566f4d.1", - "@storybook/docs-tools": "6.5.10", + "@storybook/docs-tools": "6.5.12", "@storybook/mdx1-csf": "^0.0.1", - "@storybook/node-logger": "6.5.10", - "@storybook/postinstall": "6.5.10", - "@storybook/preview-web": "6.5.10", - "@storybook/source-loader": "6.5.10", - "@storybook/store": "6.5.10", - "@storybook/theming": "6.5.10", + "@storybook/node-logger": "6.5.12", + "@storybook/postinstall": "6.5.12", + "@storybook/preview-web": "6.5.12", + "@storybook/source-loader": "6.5.12", + "@storybook/store": "6.5.12", + "@storybook/theming": "6.5.12", "babel-loader": "^8.0.0", "core-js": "^3.8.2", "fast-deep-equal": "^3.1.3", @@ -52928,39 +53209,39 @@ } }, "@storybook/addon-essentials": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-6.5.10.tgz", - "integrity": "sha512-PT2aiR4vgAyB0pl3HNBUa4/a7NDRxASxAazz7zt9ZDirkipDKfxwdcLeRoJzwSngVDWEhuz5/paN5x4eNp4Hww==", - "dev": true, - "requires": { - "@storybook/addon-actions": "6.5.10", - "@storybook/addon-backgrounds": "6.5.10", - "@storybook/addon-controls": "6.5.10", - "@storybook/addon-docs": "6.5.10", - "@storybook/addon-measure": "6.5.10", - "@storybook/addon-outline": "6.5.10", - "@storybook/addon-toolbars": "6.5.10", - "@storybook/addon-viewport": "6.5.10", - "@storybook/addons": "6.5.10", - "@storybook/api": "6.5.10", - "@storybook/core-common": "6.5.10", - "@storybook/node-logger": "6.5.10", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-6.5.12.tgz", + "integrity": "sha512-4AAV0/mQPSk3V0Pie1NIqqgBgScUc0VtBEXDm8BgPeuDNVhPEupnaZgVt+I3GkzzPPo6JjdCsp2L11f3bBSEjw==", + "dev": true, + "requires": { + "@storybook/addon-actions": "6.5.12", + "@storybook/addon-backgrounds": "6.5.12", + "@storybook/addon-controls": "6.5.12", + "@storybook/addon-docs": "6.5.12", + "@storybook/addon-measure": "6.5.12", + "@storybook/addon-outline": "6.5.12", + "@storybook/addon-toolbars": "6.5.12", + "@storybook/addon-viewport": "6.5.12", + "@storybook/addons": "6.5.12", + "@storybook/api": "6.5.12", + "@storybook/core-common": "6.5.12", + "@storybook/node-logger": "6.5.12", "core-js": "^3.8.2", "regenerator-runtime": "^0.13.7", "ts-dedent": "^2.0.0" } }, "@storybook/addon-links": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-6.5.10.tgz", - "integrity": "sha512-r3WzYIPz7WjHiaPObC2Tg6bHuZRBb/Kt/X+Eitw+jTqBel7ksvkO36tn81q8Eyj61qIdNQmUWAaX/0aewT0kLA==", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-6.5.12.tgz", + "integrity": "sha512-Dyt922J5nTBwM/9KtuuDIt3sX8xdTkKh+aXSoOX6OzT04Xwm5NumFOvuQ2YA00EM+3Ihn7Ayc3urvxnHTixmKg==", "dev": true, "requires": { - "@storybook/addons": "6.5.10", - "@storybook/client-logger": "6.5.10", - "@storybook/core-events": "6.5.10", + "@storybook/addons": "6.5.12", + "@storybook/client-logger": "6.5.12", + "@storybook/core-events": "6.5.12", "@storybook/csf": "0.0.2--canary.4566f4d.1", - "@storybook/router": "6.5.10", + "@storybook/router": "6.5.12", "@types/qs": "^6.9.5", "core-js": "^3.8.2", "global": "^4.4.0", @@ -52971,32 +53252,32 @@ } }, "@storybook/addon-measure": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-6.5.10.tgz", - "integrity": "sha512-ss7L1H5K5hXygDIoVwj+QyVXbve5V67x7CofLiLCgQYuJzfO16+sPGjiTGWMpTb4ijox2uKWnTkpilt5bCjXgw==", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-6.5.12.tgz", + "integrity": "sha512-zmolO6+VG4ov2620G7f1myqLQLztfU+ykN+U5y52GXMFsCOyB7fMoVWIMrZwsNlinDu+CnUvelXHUNbqqnjPRg==", "dev": true, "requires": { - "@storybook/addons": "6.5.10", - "@storybook/api": "6.5.10", - "@storybook/client-logger": "6.5.10", - "@storybook/components": "6.5.10", - "@storybook/core-events": "6.5.10", + "@storybook/addons": "6.5.12", + "@storybook/api": "6.5.12", + "@storybook/client-logger": "6.5.12", + "@storybook/components": "6.5.12", + "@storybook/core-events": "6.5.12", "@storybook/csf": "0.0.2--canary.4566f4d.1", "core-js": "^3.8.2", "global": "^4.4.0" } }, "@storybook/addon-outline": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/addon-outline/-/addon-outline-6.5.10.tgz", - "integrity": "sha512-AjdaeQ+/iBKmGrAqRW4niwMB6AkgGnYmSzVs5Cf6F/Sb4Dp+vzgLNOwLABD9qs8Ri8dvHl5J4QpVwQKUhYZaOQ==", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/addon-outline/-/addon-outline-6.5.12.tgz", + "integrity": "sha512-jXwLz2rF/CZt6Cgy+QUTa+pNW0IevSONYwS3D533E9z5h0T5ZKJbbxG5jxM+oC+FpZ/nFk5mEmUaYNkxgIVdpw==", "dev": true, "requires": { - "@storybook/addons": "6.5.10", - "@storybook/api": "6.5.10", - "@storybook/client-logger": "6.5.10", - "@storybook/components": "6.5.10", - "@storybook/core-events": "6.5.10", + "@storybook/addons": "6.5.12", + "@storybook/api": "6.5.12", + "@storybook/client-logger": "6.5.12", + "@storybook/components": "6.5.12", + "@storybook/core-events": "6.5.12", "@storybook/csf": "0.0.2--canary.4566f4d.1", "core-js": "^3.8.2", "global": "^4.4.0", @@ -53005,32 +53286,32 @@ } }, "@storybook/addon-toolbars": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-6.5.10.tgz", - "integrity": "sha512-S0Ljc6Wv+bPbx2e0iTveJ6bBDqjsemu+FZD4qDLsHreoI7DAcqyrF5Def1l8xNohixIVpx8dQpYXRtyzNlXekg==", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-6.5.12.tgz", + "integrity": "sha512-+QjoEHkekz4wTy8zqxYdV9ijDJ5YcjDc/qdnV8wx22zkoVU93FQlo0CHHVjpyvc3ilQliZbdQDJx62BcHXw30Q==", "dev": true, "requires": { - "@storybook/addons": "6.5.10", - "@storybook/api": "6.5.10", - "@storybook/client-logger": "6.5.10", - "@storybook/components": "6.5.10", - "@storybook/theming": "6.5.10", + "@storybook/addons": "6.5.12", + "@storybook/api": "6.5.12", + "@storybook/client-logger": "6.5.12", + "@storybook/components": "6.5.12", + "@storybook/theming": "6.5.12", "core-js": "^3.8.2", "regenerator-runtime": "^0.13.7" } }, "@storybook/addon-viewport": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-6.5.10.tgz", - "integrity": "sha512-RFMd+4kZljyuJjR9OJ2bFXHrSG7VTi5FDZYWEU+4W1sBxzC+JhnVnUP+HJH3gUxEFIRQC5neRzwWRE9RUUoALQ==", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-6.5.12.tgz", + "integrity": "sha512-eQ1UrmbiMiPmWe+fdMWIc0F6brh/S2z4ADfwFz0tTd+vOLWRZp1xw8JYQ9P2ZasE+PM3WFOVT9jvNjZj/cHnfw==", "dev": true, "requires": { - "@storybook/addons": "6.5.10", - "@storybook/api": "6.5.10", - "@storybook/client-logger": "6.5.10", - "@storybook/components": "6.5.10", - "@storybook/core-events": "6.5.10", - "@storybook/theming": "6.5.10", + "@storybook/addons": "6.5.12", + "@storybook/api": "6.5.12", + "@storybook/client-logger": "6.5.12", + "@storybook/components": "6.5.12", + "@storybook/core-events": "6.5.12", + "@storybook/theming": "6.5.12", "core-js": "^3.8.2", "global": "^4.4.0", "memoizerific": "^1.11.3", @@ -53039,18 +53320,18 @@ } }, "@storybook/addons": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-6.5.10.tgz", - "integrity": "sha512-VD4tBCQ23PkSeDoxuHcKy0RfhIs3oMYjBacOZx7d0bvOzK9WjPyvE2ysDAh7r/ceqnwmWHAScIpE+I1RU7gl+g==", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-6.5.12.tgz", + "integrity": "sha512-y3cgxZq41YGnuIlBJEuJjSFdMsm8wnvlNOGUP9Q+Er2dgfx8rJz4Q22o4hPjpvpaj4XdBtxCJXI2NeFpN59+Cw==", "dev": true, "requires": { - "@storybook/api": "6.5.10", - "@storybook/channels": "6.5.10", - "@storybook/client-logger": "6.5.10", - "@storybook/core-events": "6.5.10", + "@storybook/api": "6.5.12", + "@storybook/channels": "6.5.12", + "@storybook/client-logger": "6.5.12", + "@storybook/core-events": "6.5.12", "@storybook/csf": "0.0.2--canary.4566f4d.1", - "@storybook/router": "6.5.10", - "@storybook/theming": "6.5.10", + "@storybook/router": "6.5.12", + "@storybook/theming": "6.5.12", "@types/webpack-env": "^1.16.0", "core-js": "^3.8.2", "global": "^4.4.0", @@ -53058,18 +53339,18 @@ } }, "@storybook/api": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/api/-/api-6.5.10.tgz", - "integrity": "sha512-AkmgSPNEGdKp4oZA4KQ+RJsacw7GwfvjsVDnCkcXqS9zmSr/RNL0fhpcd60KKkmx/hGKPTDFpK3ZayxDrJ/h4A==", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/api/-/api-6.5.12.tgz", + "integrity": "sha512-DuUZmMlQxkFNU9Vgkp9aNfCkAongU76VVmygvCuSpMVDI9HQ2lG0ydL+ppL4XKoSMCCoXTY6+rg4hJANnH+1AQ==", "dev": true, "requires": { - "@storybook/channels": "6.5.10", - "@storybook/client-logger": "6.5.10", - "@storybook/core-events": "6.5.10", + "@storybook/channels": "6.5.12", + "@storybook/client-logger": "6.5.12", + "@storybook/core-events": "6.5.12", "@storybook/csf": "0.0.2--canary.4566f4d.1", - "@storybook/router": "6.5.10", + "@storybook/router": "6.5.12", "@storybook/semver": "^7.3.2", - "@storybook/theming": "6.5.10", + "@storybook/theming": "6.5.12", "core-js": "^3.8.2", "fast-deep-equal": "^3.1.3", "global": "^4.4.0", @@ -53083,28 +53364,28 @@ } }, "@storybook/builder-webpack4": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/builder-webpack4/-/builder-webpack4-6.5.10.tgz", - "integrity": "sha512-AoKjsCNoQQoZXYwBDxO8s+yVEd5FjBJAaysEuUTHq2fb81jwLrGcEOo6hjw4jqfugZQIzYUEjPazlvubS78zpw==", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/builder-webpack4/-/builder-webpack4-6.5.12.tgz", + "integrity": "sha512-TsthT5jm9ZxQPNOZJbF5AV24me3i+jjYD7gbdKdSHrOVn1r3ydX4Z8aD6+BjLCtTn3T+e8NMvUkL4dInEo1x6g==", "dev": true, "requires": { "@babel/core": "^7.12.10", - "@storybook/addons": "6.5.10", - "@storybook/api": "6.5.10", - "@storybook/channel-postmessage": "6.5.10", - "@storybook/channels": "6.5.10", - "@storybook/client-api": "6.5.10", - "@storybook/client-logger": "6.5.10", - "@storybook/components": "6.5.10", - "@storybook/core-common": "6.5.10", - "@storybook/core-events": "6.5.10", - "@storybook/node-logger": "6.5.10", - "@storybook/preview-web": "6.5.10", - "@storybook/router": "6.5.10", + "@storybook/addons": "6.5.12", + "@storybook/api": "6.5.12", + "@storybook/channel-postmessage": "6.5.12", + "@storybook/channels": "6.5.12", + "@storybook/client-api": "6.5.12", + "@storybook/client-logger": "6.5.12", + "@storybook/components": "6.5.12", + "@storybook/core-common": "6.5.12", + "@storybook/core-events": "6.5.12", + "@storybook/node-logger": "6.5.12", + "@storybook/preview-web": "6.5.12", + "@storybook/router": "6.5.12", "@storybook/semver": "^7.3.2", - "@storybook/store": "6.5.10", - "@storybook/theming": "6.5.10", - "@storybook/ui": "6.5.10", + "@storybook/store": "6.5.12", + "@storybook/theming": "6.5.12", + "@storybook/ui": "6.5.12", "@types/node": "^14.0.10 || ^16.0.0", "@types/webpack": "^4.41.26", "autoprefixer": "^9.8.6", @@ -53281,14 +53562,14 @@ } }, "@storybook/channel-postmessage": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/channel-postmessage/-/channel-postmessage-6.5.10.tgz", - "integrity": "sha512-t9PTA0UzFvYa3IlOfpBOolfrRMPTjUMIeCQ6FNyM0aj5GqLKSvoQzP8NeoRpIrvyf6ljFKKdaMaZ3fiCvh45ag==", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/channel-postmessage/-/channel-postmessage-6.5.12.tgz", + "integrity": "sha512-SL/tJBLOdDlbUAAxhiZWOEYd5HI4y8rN50r6jeed5nD8PlocZjxJ6mO0IxnePqIL9Yu3nSrQRHrtp8AJvPX0Yg==", "dev": true, "requires": { - "@storybook/channels": "6.5.10", - "@storybook/client-logger": "6.5.10", - "@storybook/core-events": "6.5.10", + "@storybook/channels": "6.5.12", + "@storybook/client-logger": "6.5.12", + "@storybook/core-events": "6.5.12", "core-js": "^3.8.2", "global": "^4.4.0", "qs": "^6.10.0", @@ -53296,22 +53577,22 @@ } }, "@storybook/channel-websocket": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/channel-websocket/-/channel-websocket-6.5.10.tgz", - "integrity": "sha512-RTXMZbMWCS3xU+4GVIdfnUXsKcwg/WTozy88/5OxaKjGw6KgRedqLAQJKJ6Y5XlnwIcWelirkHj/COwTTXhbPg==", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/channel-websocket/-/channel-websocket-6.5.12.tgz", + "integrity": "sha512-0t5dLselHVKTRYaphxx1dRh4pmOFCfR7h8oNJlOvJ29Qy5eNyVujDG9nhwWbqU6IKayuP4nZrAbe9Req9YZYlQ==", "dev": true, "requires": { - "@storybook/channels": "6.5.10", - "@storybook/client-logger": "6.5.10", + "@storybook/channels": "6.5.12", + "@storybook/client-logger": "6.5.12", "core-js": "^3.8.2", "global": "^4.4.0", "telejson": "^6.0.8" } }, "@storybook/channels": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-6.5.10.tgz", - "integrity": "sha512-lo26YZ6kWpHXLhuHJF4P/bICY7jD/rXEZqReKtGOSk1Lv99/xvG6pqmcy3hWLf3v3Dy/8otjRPSR7izFVIIZgQ==", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-6.5.12.tgz", + "integrity": "sha512-X5XaKbe4b7LXJ4sUakBo00x6pXnW78JkOonHoaKoWsccHLlEzwfBZpVVekhVZnqtCoLT23dB8wjKgA71RYWoiw==", "dev": true, "requires": { "core-js": "^3.8.2", @@ -53320,18 +53601,18 @@ } }, "@storybook/client-api": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/client-api/-/client-api-6.5.10.tgz", - "integrity": "sha512-3wBWZl3NvMFgMovgEh+euiARAT2FXzpvTF4Q1gerGMNNDlrGxHnFvSuy4FHg/irtOGLa4yLz43ULFbYtpKw0Lg==", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/client-api/-/client-api-6.5.12.tgz", + "integrity": "sha512-+JiRSgiU829KPc25nG/k0+Ao2nUelHUe8Y/9cRoKWbCAGzi4xd0JLhHAOr9Oi2szWx/OI1L08lxVv1+WTveAeA==", "dev": true, "requires": { - "@storybook/addons": "6.5.10", - "@storybook/channel-postmessage": "6.5.10", - "@storybook/channels": "6.5.10", - "@storybook/client-logger": "6.5.10", - "@storybook/core-events": "6.5.10", + "@storybook/addons": "6.5.12", + "@storybook/channel-postmessage": "6.5.12", + "@storybook/channels": "6.5.12", + "@storybook/client-logger": "6.5.12", + "@storybook/core-events": "6.5.12", "@storybook/csf": "0.0.2--canary.4566f4d.1", - "@storybook/store": "6.5.10", + "@storybook/store": "6.5.12", "@types/qs": "^6.9.5", "@types/webpack-env": "^1.16.0", "core-js": "^3.8.2", @@ -53348,9 +53629,9 @@ } }, "@storybook/client-logger": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-6.5.10.tgz", - "integrity": "sha512-/xA0MHOevXev68hyLMQw8Qo8KczSIdXOxliAgrycMTkDmw5eKeA8TP7B8zP3wGuq/e3MrdD9/8MWhb/IQBNC3w==", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-6.5.12.tgz", + "integrity": "sha512-IrkMr5KZcudX935/C2balFbxLHhkvQnJ78rbVThHDVckQ7l3oIXTh66IMzldeOabVFDZEMiW8AWuGEYof+JtLw==", "dev": true, "requires": { "core-js": "^3.8.2", @@ -53358,14 +53639,14 @@ } }, "@storybook/components": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/components/-/components-6.5.10.tgz", - "integrity": "sha512-9OhgB8YQfGwOKjo/N96N5mrtJ6qDVVoEM1zuhea32tJUd2eYf0aSWpryA9VnOM0V1q/8DAoCg5rPBMYWMBU5uw==", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/components/-/components-6.5.12.tgz", + "integrity": "sha512-NAAGl5PDXaHdVLd6hA+ttmLwH3zAVGXeUmEubzKZ9bJzb+duhFKxDa9blM4YEkI+palumvgAMm0UgS7ou680Ig==", "dev": true, "requires": { - "@storybook/client-logger": "6.5.10", + "@storybook/client-logger": "6.5.12", "@storybook/csf": "0.0.2--canary.4566f4d.1", - "@storybook/theming": "6.5.10", + "@storybook/theming": "6.5.12", "core-js": "^3.8.2", "memoizerific": "^1.11.3", "qs": "^6.10.0", @@ -53374,31 +53655,31 @@ } }, "@storybook/core": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/core/-/core-6.5.10.tgz", - "integrity": "sha512-K86yYa0tYlMxADlwQTculYvPROokQau09SCVqpsLg3wJCTvYFL4+SIqcYoyBSbFmHOdnYbJgPydjN33MYLiOZQ==", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/core/-/core-6.5.12.tgz", + "integrity": "sha512-+o3psAVWL+5LSwyJmEbvhgxKO1Et5uOX8ujNVt/f1fgwJBIf6BypxyPKu9YGQDRzcRssESQQZWNrZCCAZlFeuQ==", "dev": true, "requires": { - "@storybook/core-client": "6.5.10", - "@storybook/core-server": "6.5.10" + "@storybook/core-client": "6.5.12", + "@storybook/core-server": "6.5.12" } }, "@storybook/core-client": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/core-client/-/core-client-6.5.10.tgz", - "integrity": "sha512-THsIjNrOrampTl0Lgfjvfjk1JnktKb4CQLOM80KpQb4cjDqorBjJmErzUkUQ2y3fXvrDmQ/kUREkShET4XEdtA==", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/core-client/-/core-client-6.5.12.tgz", + "integrity": "sha512-jyAd0ud6zO+flpLv0lEHbbt1Bv9Ms225M6WTQLrfe7kN/7j1pVKZEoeVCLZwkJUtSKcNiWQxZbS15h31pcYwqg==", "dev": true, "requires": { - "@storybook/addons": "6.5.10", - "@storybook/channel-postmessage": "6.5.10", - "@storybook/channel-websocket": "6.5.10", - "@storybook/client-api": "6.5.10", - "@storybook/client-logger": "6.5.10", - "@storybook/core-events": "6.5.10", + "@storybook/addons": "6.5.12", + "@storybook/channel-postmessage": "6.5.12", + "@storybook/channel-websocket": "6.5.12", + "@storybook/client-api": "6.5.12", + "@storybook/client-logger": "6.5.12", + "@storybook/core-events": "6.5.12", "@storybook/csf": "0.0.2--canary.4566f4d.1", - "@storybook/preview-web": "6.5.10", - "@storybook/store": "6.5.10", - "@storybook/ui": "6.5.10", + "@storybook/preview-web": "6.5.12", + "@storybook/store": "6.5.12", + "@storybook/ui": "6.5.12", "airbnb-js-shims": "^2.2.1", "ansi-to-html": "^0.6.11", "core-js": "^3.8.2", @@ -53412,9 +53693,9 @@ } }, "@storybook/core-common": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-6.5.10.tgz", - "integrity": "sha512-Bx+VKkfWdrAmD8T51Sjq/mMhRaiapBHcpG4cU5bc3DMbg+LF2/yrgqv/cjVu+m5gHAzYCac5D7gqzBgvG7Myww==", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-6.5.12.tgz", + "integrity": "sha512-gG20+eYdIhwQNu6Xs805FLrOCWtkoc8Rt8gJiRt8yXzZh9EZkU4xgCRoCxrrJ03ys/gTiCFbBOfRi749uM3z4w==", "dev": true, "requires": { "@babel/core": "^7.12.10", @@ -53439,7 +53720,7 @@ "@babel/preset-react": "^7.12.10", "@babel/preset-typescript": "^7.12.7", "@babel/register": "^7.12.1", - "@storybook/node-logger": "6.5.10", + "@storybook/node-logger": "6.5.12", "@storybook/semver": "^7.3.2", "@types/node": "^14.0.10 || ^16.0.0", "@types/pretty-hrtime": "^1.0.0", @@ -53547,32 +53828,32 @@ } }, "@storybook/core-events": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-6.5.10.tgz", - "integrity": "sha512-EVb1gO1172klVIAABLOoigFMx0V88uctY0K/qVCO8n6v+wd2+0Ccn63kl+gTxsAC3WZ8XhXh9q2w5ImHklVECw==", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-6.5.12.tgz", + "integrity": "sha512-0AMyMM19R/lHsYRfWqM8zZTXthasTAK2ExkSRzYi2GkIaVMxRKtM33YRwxKIpJ6KmIKIs8Ru3QCXu1mfCmGzNg==", "dev": true, "requires": { "core-js": "^3.8.2" } }, "@storybook/core-server": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/core-server/-/core-server-6.5.10.tgz", - "integrity": "sha512-jqwpA0ccA8X5ck4esWBid04+cEIVqirdAcqJeNb9IZAD+bRreO4Im8ilzr7jc5AmQ9fkqHs2NByFKh9TITp8NQ==", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/core-server/-/core-server-6.5.12.tgz", + "integrity": "sha512-q1b/XKwoLUcCoCQ+8ndPD5THkEwXZYJ9ROv16i2VGUjjjAuSqpEYBq5GMGQUgxlWp1bkxtdGL2Jz+6pZfvldzA==", "dev": true, "requires": { "@discoveryjs/json-ext": "^0.5.3", - "@storybook/builder-webpack4": "6.5.10", - "@storybook/core-client": "6.5.10", - "@storybook/core-common": "6.5.10", - "@storybook/core-events": "6.5.10", + "@storybook/builder-webpack4": "6.5.12", + "@storybook/core-client": "6.5.12", + "@storybook/core-common": "6.5.12", + "@storybook/core-events": "6.5.12", "@storybook/csf": "0.0.2--canary.4566f4d.1", - "@storybook/csf-tools": "6.5.10", - "@storybook/manager-webpack4": "6.5.10", - "@storybook/node-logger": "6.5.10", + "@storybook/csf-tools": "6.5.12", + "@storybook/manager-webpack4": "6.5.12", + "@storybook/node-logger": "6.5.12", "@storybook/semver": "^7.3.2", - "@storybook/store": "6.5.10", - "@storybook/telemetry": "6.5.10", + "@storybook/store": "6.5.12", + "@storybook/telemetry": "6.5.12", "@types/node": "^14.0.10 || ^16.0.0", "@types/node-fetch": "^2.5.7", "@types/pretty-hrtime": "^1.0.0", @@ -53658,9 +53939,9 @@ } }, "ws": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.8.1.tgz", - "integrity": "sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==", + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.9.0.tgz", + "integrity": "sha512-Ja7nszREasGaYUYCI2k4lCKIRTt+y7XuqVoHR44YpI49TtryyqbqvDMn5eqfW7e6HzTukDRIsXqzVHScqRcafg==", "dev": true } } @@ -53675,9 +53956,9 @@ } }, "@storybook/csf-tools": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-6.5.10.tgz", - "integrity": "sha512-H77kZQEisu7+skzeIbNZwmE09OqLjwJTeFhLN1pcjxKVa30LEI3pBHcNBxVKqgxl+Yg3KkB7W/ArLO2N+i2ohw==", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-6.5.12.tgz", + "integrity": "sha512-BPhnB1xJtBVOzXuCURzQRdXcstE27ht4qoTgQkbwUTy4MEtUZ/f1AnHSYRdzrgukXdUFWseNIK4RkNdJpfOfNQ==", "dev": true, "requires": { "@babel/core": "^7.12.10", @@ -53697,14 +53978,14 @@ } }, "@storybook/docs-tools": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/docs-tools/-/docs-tools-6.5.10.tgz", - "integrity": "sha512-/bvYgOO+CxMEcHifkjJg0A60OTGOhcjGxnsB1h0gJuxMrqA/7Qwc108bFmPiX0eiD1BovFkZLJV4O6OY7zP5Vw==", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/docs-tools/-/docs-tools-6.5.12.tgz", + "integrity": "sha512-8brf8W89KVk95flVqW0sYEqkL+FBwb5W9CnwI+Ggd6r2cqXe9jyg+0vDZFdYp6kYNQKrPr4fbXGrGVXQG18/QQ==", "dev": true, "requires": { "@babel/core": "^7.12.10", "@storybook/csf": "0.0.2--canary.4566f4d.1", - "@storybook/store": "6.5.10", + "@storybook/store": "6.5.12", "core-js": "^3.8.2", "doctrine": "^3.0.0", "lodash": "^4.17.21", @@ -53712,20 +53993,20 @@ } }, "@storybook/manager-webpack4": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/manager-webpack4/-/manager-webpack4-6.5.10.tgz", - "integrity": "sha512-N/TlNDhuhARuFipR/ZJ/xEVESz23iIbCsZ4VNehLHm8PpiGlQUehk+jMjWmz5XV0bJItwjRclY+CU3GjZKblfQ==", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/manager-webpack4/-/manager-webpack4-6.5.12.tgz", + "integrity": "sha512-LH3e6qfvq2znEdxe2kaWtmdDPTnvSkufzoC9iwOgNvo3YrTGrYNyUTDegvW293TOTVfUn7j6TBcsOxIgRnt28g==", "dev": true, "requires": { "@babel/core": "^7.12.10", "@babel/plugin-transform-template-literals": "^7.12.1", "@babel/preset-react": "^7.12.10", - "@storybook/addons": "6.5.10", - "@storybook/core-client": "6.5.10", - "@storybook/core-common": "6.5.10", - "@storybook/node-logger": "6.5.10", - "@storybook/theming": "6.5.10", - "@storybook/ui": "6.5.10", + "@storybook/addons": "6.5.12", + "@storybook/core-client": "6.5.12", + "@storybook/core-common": "6.5.12", + "@storybook/node-logger": "6.5.12", + "@storybook/theming": "6.5.12", + "@storybook/ui": "6.5.12", "@types/node": "^14.0.10 || ^16.0.0", "@types/webpack": "^4.41.26", "babel-loader": "^8.0.0", @@ -53836,9 +54117,9 @@ }, "dependencies": { "@types/lodash": { - "version": "4.14.184", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.184.tgz", - "integrity": "sha512-RoZphVtHbxPZizt4IcILciSWiC6dcn+eZ8oX9IWEYfDMcocdd42f7NPI6fQj+6zI8y4E0L7gu2pcZKLGTRaV9Q==", + "version": "4.14.186", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.186.tgz", + "integrity": "sha512-eHcVlLXP0c2FlMPm56ITode2AgLMSa6aJ05JTTbYbI+7EMkCEE5qk2E41d5g2lCVTqRe0GnnRFurmlCsDODrPw==", "dev": true }, "prettier": { @@ -53850,9 +54131,9 @@ } }, "@storybook/node-logger": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-6.5.10.tgz", - "integrity": "sha512-bYswXIKV7Stru8vYfkjUMNN8UhF7Qg7NRsUvG5Djt5lLIae1XmUIgnH40mU/nW4X4BSfcR9MKxsSsngvn2WmQg==", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-6.5.12.tgz", + "integrity": "sha512-jdLtT3mX5GQKa+0LuX0q0sprKxtCGf6HdXlKZGD5FEuz4MgJUGaaiN0Hgi+U7Z4tVNOtSoIbYBYXHqfUgJrVZw==", "dev": true, "requires": { "@types/npmlog": "^4.1.2", @@ -53914,26 +54195,26 @@ } }, "@storybook/postinstall": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/postinstall/-/postinstall-6.5.10.tgz", - "integrity": "sha512-xqUdpnFHYkn8MgtV+QztvIsRWa6jQUk7QT1Mu17Y0S7PbslNGsuskRPHenHhACXBJF+TM86R+4BaAhnVYTmElw==", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/postinstall/-/postinstall-6.5.12.tgz", + "integrity": "sha512-6K73f9c2UO+w4Wtyo2BxEpEsnhPvMgqHSaJ9Yt6Tc90LaDGUbcVgy6PNibsRyuJ/KQ543WeiRO5rSZfm2uJU9A==", "dev": true, "requires": { "core-js": "^3.8.2" } }, "@storybook/preview-web": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/preview-web/-/preview-web-6.5.10.tgz", - "integrity": "sha512-sTC/o5gkvALOtcNgtApGKGN9EavvSxRHBeBh+5BQjV2qQ8ap+26RsfUizNBECAa2Jrn4osaDYn9HRhJLFL69WA==", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/preview-web/-/preview-web-6.5.12.tgz", + "integrity": "sha512-Q5mduCJsY9zhmlsrhHvtOBA3Jt2n45bhfVkiUEqtj8fDit45/GW+eLoffv8GaVTGjV96/Y1JFwDZUwU6mEfgGQ==", "dev": true, "requires": { - "@storybook/addons": "6.5.10", - "@storybook/channel-postmessage": "6.5.10", - "@storybook/client-logger": "6.5.10", - "@storybook/core-events": "6.5.10", + "@storybook/addons": "6.5.12", + "@storybook/channel-postmessage": "6.5.12", + "@storybook/client-logger": "6.5.12", + "@storybook/core-events": "6.5.12", "@storybook/csf": "0.0.2--canary.4566f4d.1", - "@storybook/store": "6.5.10", + "@storybook/store": "6.5.12", "ansi-to-html": "^0.6.11", "core-js": "^3.8.2", "global": "^4.4.0", @@ -53947,24 +54228,24 @@ } }, "@storybook/react": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/react/-/react-6.5.10.tgz", - "integrity": "sha512-m8S1qQrwA7pDGwdKEvL6LV3YKvSzVUY297Fq+xcTU3irnAy4sHDuFoLqV6Mi1510mErK1r8+rf+0R5rEXB219g==", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/react/-/react-6.5.12.tgz", + "integrity": "sha512-1tG8EdSfp+OZAKAWPT2UrexF4o007jEMwQFFXw1atIQrQOADzSnZ7lTYJ08o5TyJwksswtr18tH3oJJ9sG3KPw==", "dev": true, "requires": { "@babel/preset-flow": "^7.12.1", "@babel/preset-react": "^7.12.10", "@pmmmwh/react-refresh-webpack-plugin": "^0.5.3", - "@storybook/addons": "6.5.10", - "@storybook/client-logger": "6.5.10", - "@storybook/core": "6.5.10", - "@storybook/core-common": "6.5.10", + "@storybook/addons": "6.5.12", + "@storybook/client-logger": "6.5.12", + "@storybook/core": "6.5.12", + "@storybook/core-common": "6.5.12", "@storybook/csf": "0.0.2--canary.4566f4d.1", - "@storybook/docs-tools": "6.5.10", - "@storybook/node-logger": "6.5.10", + "@storybook/docs-tools": "6.5.12", + "@storybook/node-logger": "6.5.12", "@storybook/react-docgen-typescript-plugin": "1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0", "@storybook/semver": "^7.3.2", - "@storybook/store": "6.5.10", + "@storybook/store": "6.5.12", "@types/estree": "^0.0.51", "@types/node": "^14.14.20 || ^16.0.0", "@types/webpack-env": "^1.16.0", @@ -53990,9 +54271,9 @@ }, "dependencies": { "@types/node": { - "version": "16.11.58", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.58.tgz", - "integrity": "sha512-uMVxJ111wpHzkx/vshZFb6Qni3BOMnlWLq7q9jrwej7Yw/KvjsEbpxCCxw+hLKxexFMc8YmpG8J9tnEe/rKsIg==", + "version": "16.11.65", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.65.tgz", + "integrity": "sha512-Vfz7wGMOr4jbQGiQHVJm8VjeQwM9Ya7mHe9LtQ264/Epf5n1KiZShOFqk++nBzw6a/ubgYdB9Od7P+MH/LjoWw==", "dev": true } } @@ -54081,12 +54362,12 @@ } }, "@storybook/router": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/router/-/router-6.5.10.tgz", - "integrity": "sha512-O+vNW/eEpYFF8eCg5jZjNQ6q2DKQVxqDRPCy9pJdEbvavMDZn6AFYgVK+VJe5F4211WW2yncOu922xObCxXJYg==", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/router/-/router-6.5.12.tgz", + "integrity": "sha512-xHubde9YnBbpkDY5+zGO4Pr6VPxP8H9J2v4OTF3H82uaxCIKR0PKG0utS9pFKIsEiP3aM62Hb9qB8nU+v1nj3w==", "dev": true, "requires": { - "@storybook/client-logger": "6.5.10", + "@storybook/client-logger": "6.5.12", "core-js": "^3.8.2", "memoizerific": "^1.11.3", "qs": "^6.10.0", @@ -54143,13 +54424,13 @@ } }, "@storybook/source-loader": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/source-loader/-/source-loader-6.5.10.tgz", - "integrity": "sha512-1RxxRumpjs8VUUwES9LId+cuNQnixhZAcwCxd6jaKkTZbjiQCtAhXX6DBTjJGV1u/JnCsqEp5b1wB8j/EioNHw==", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/source-loader/-/source-loader-6.5.12.tgz", + "integrity": "sha512-4iuILFsKNV70sEyjzIkOqgzgQx7CJ8kTEFz590vkmWXQNKz7YQzjgISIwL7GBw/myJgeb04bl5psVgY0cbG5vg==", "dev": true, "requires": { - "@storybook/addons": "6.5.10", - "@storybook/client-logger": "6.5.10", + "@storybook/addons": "6.5.12", + "@storybook/client-logger": "6.5.12", "@storybook/csf": "0.0.2--canary.4566f4d.1", "core-js": "^3.8.2", "estraverse": "^5.2.0", @@ -54169,14 +54450,14 @@ } }, "@storybook/store": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/store/-/store-6.5.10.tgz", - "integrity": "sha512-RswrSYh2IiKkytFPxP9AvP+hekjrvHK2ILvyDk2ZgduCN4n5ivsekOb+N3M2t+dq1eLuW9or5n2T4OWwAwjxxQ==", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/store/-/store-6.5.12.tgz", + "integrity": "sha512-SMQOr0XvV0mhTuqj3XOwGGc4kTPVjh3xqrG1fqkj9RGs+2jRdmO6mnwzda5gPwUmWNTorZ7FxZ1iEoyfYNtuiQ==", "dev": true, "requires": { - "@storybook/addons": "6.5.10", - "@storybook/client-logger": "6.5.10", - "@storybook/core-events": "6.5.10", + "@storybook/addons": "6.5.12", + "@storybook/client-logger": "6.5.12", + "@storybook/core-events": "6.5.12", "@storybook/csf": "0.0.2--canary.4566f4d.1", "core-js": "^3.8.2", "fast-deep-equal": "^3.1.3", @@ -54192,13 +54473,13 @@ } }, "@storybook/telemetry": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/telemetry/-/telemetry-6.5.10.tgz", - "integrity": "sha512-+M5HILDFS8nDumLxeSeAwi1MTzIuV6UWzV4yB2wcsEXOBTdplcl9oYqFKtlst78oOIdGtpPYxYfivDlqxC2K4g==", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/telemetry/-/telemetry-6.5.12.tgz", + "integrity": "sha512-mCHxx7NmQ3n7gx0nmblNlZE5ZgrjQm6B08mYeWg6Y7r4GZnqS6wZbvAwVhZZ3Gg/9fdqaBApHsdAXp0d5BrlxA==", "dev": true, "requires": { - "@storybook/client-logger": "6.5.10", - "@storybook/core-common": "6.5.10", + "@storybook/client-logger": "6.5.12", + "@storybook/core-common": "6.5.12", "chalk": "^4.1.0", "core-js": "^3.8.2", "detect-package-manager": "^2.0.1", @@ -54263,32 +54544,32 @@ } }, "@storybook/theming": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-6.5.10.tgz", - "integrity": "sha512-BvTQBBcSEwKKcsVmF+Ol6v0RIQUr+bxP7gb10wtfBd23mZTEFA0C1N5FnZr/dDeiBKG1pvf1UKvoYA731y0BsA==", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-6.5.12.tgz", + "integrity": "sha512-uWOo84qMQ2R6c1C0faZ4Q0nY01uNaX7nXoJKieoiJ6ZqY9PSYxJl1kZLi3uPYnrxLZjzjVyXX8MgdxzbppYItA==", "dev": true, "requires": { - "@storybook/client-logger": "6.5.10", + "@storybook/client-logger": "6.5.12", "core-js": "^3.8.2", "memoizerific": "^1.11.3", "regenerator-runtime": "^0.13.7" } }, "@storybook/ui": { - "version": "6.5.10", - "resolved": "https://registry.npmjs.org/@storybook/ui/-/ui-6.5.10.tgz", - "integrity": "sha512-6iaoaRAiTqB1inTw35vao+5hjcDE0Qa0A3a9ZIeNa6yHvpB1k0lO/N/0PMrRdVvySYpXVD1iry4z4QYdo1rU+w==", - "dev": true, - "requires": { - "@storybook/addons": "6.5.10", - "@storybook/api": "6.5.10", - "@storybook/channels": "6.5.10", - "@storybook/client-logger": "6.5.10", - "@storybook/components": "6.5.10", - "@storybook/core-events": "6.5.10", - "@storybook/router": "6.5.10", + "version": "6.5.12", + "resolved": "https://registry.npmjs.org/@storybook/ui/-/ui-6.5.12.tgz", + "integrity": "sha512-P7+ARI5NvaEYkrbIciT/UMgy3kxMt4WCtHMXss2T01UMCIWh1Ws4BJaDNqtQSpKuwjjS4eqZL3aQWhlUpYAUEg==", + "dev": true, + "requires": { + "@storybook/addons": "6.5.12", + "@storybook/api": "6.5.12", + "@storybook/channels": "6.5.12", + "@storybook/client-logger": "6.5.12", + "@storybook/components": "6.5.12", + "@storybook/core-events": "6.5.12", + "@storybook/router": "6.5.12", "@storybook/semver": "^7.3.2", - "@storybook/theming": "6.5.10", + "@storybook/theming": "6.5.12", "core-js": "^3.8.2", "memoizerific": "^1.11.3", "qs": "^6.10.0", @@ -54468,9 +54749,9 @@ "dev": true }, "@svgr/babel-preset": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-6.3.1.tgz", - "integrity": "sha512-tQtWtzuMMQ3opH7je+MpwfuRA1Hf3cKdSgTtAYwOBDfmhabP7rcTfBi3E7V3MuwJNy/Y02/7/RutvwS1W4Qv9g==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-6.4.0.tgz", + "integrity": "sha512-Ytuh7N282fv2Cy1JePf6HZ29/G5Hb8mQAjx4iykPjvfFl9NK6o5lZavmewgjOGT8kNPtwgvheuOQn4CifHRUhQ==", "dev": true, "requires": { "@svgr/babel-plugin-add-jsx-attribute": "^6.3.1", @@ -54484,20 +54765,21 @@ } }, "@svgr/core": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-6.3.1.tgz", - "integrity": "sha512-Sm3/7OdXbQreemf9aO25keerZSbnKMpGEfmH90EyYpj1e8wMD4TuwJIb3THDSgRMWk1kYJfSRulELBy4gVgZUA==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-6.4.0.tgz", + "integrity": "sha512-wU9uyF6BUnwAqG7fDOowmDQzmbvovj1uq/iETfMK9xwQNaT+e7yN7SmDDcETXC72dnOrMcRuEWw0JEvpJha+yg==", "dev": true, "requires": { - "@svgr/plugin-jsx": "^6.3.1", + "@svgr/babel-preset": "^6.4.0", + "@svgr/plugin-jsx": "^6.4.0", "camelcase": "^6.2.0", "cosmiconfig": "^7.0.1" } }, "@svgr/hast-util-to-babel-ast": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.3.1.tgz", - "integrity": "sha512-NgyCbiTQIwe3wHe/VWOUjyxmpUmsrBjdoIxKpXt3Nqc3TN30BpJG22OxBvVzsAh9jqep0w0/h8Ywvdk3D9niNQ==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.4.0.tgz", + "integrity": "sha512-PjcU8jCneKXJnrREycsgfgQ/bzR1ogSKC5MBeUu2wmEoJIjzXX7X14DDktUjU9bkBy26yMDiVHn46Nl82P3WEg==", "dev": true, "requires": { "@babel/types": "^7.18.4", @@ -54505,14 +54787,14 @@ } }, "@svgr/plugin-jsx": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.3.1.tgz", - "integrity": "sha512-r9+0mYG3hD4nNtUgsTXWGYJomv/bNd7kC16zvsM70I/bGeoCi/3lhTmYqeN6ChWX317OtQCSZZbH4wq9WwoXbw==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.4.0.tgz", + "integrity": "sha512-gu6E7v8qRAtCxbymI1et3G7athogvKvzsJkSWiHVZsuVZbyx5O2b7+DIkKvAGh2RvEzgSvfGf8QD1BaHal2vBw==", "dev": true, "requires": { "@babel/core": "^7.18.5", - "@svgr/babel-preset": "^6.3.1", - "@svgr/hast-util-to-babel-ast": "^6.3.1", + "@svgr/babel-preset": "^6.4.0", + "@svgr/hast-util-to-babel-ast": "^6.4.0", "svg-parser": "^2.0.4" } }, @@ -54883,12 +55165,6 @@ "integrity": "sha512-i0/MaqBtdbnJ4XQs4Pmyb+oFQl+q0lsAmokVUH92SlSw4fkeAcG3bVon+Qt7hmtF+u3Het6o4VgrcY3qAoEB6w==", "dev": true }, - "eslint-config-prettier": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", - "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", - "dev": true - }, "eslint-plugin-prettier": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.0.0.tgz", @@ -54969,9 +55245,9 @@ } }, "@testing-library/dom": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.17.1.tgz", - "integrity": "sha512-KnH2MnJUzmFNPW6RIKfd+zf2Wue8mEKX0M3cpX6aKl5ZXrJM1/c/Pc8c2xDNYQCnJO48Sm5ITbMXgqTr3h4jxQ==", + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.19.0.tgz", + "integrity": "sha512-6YWYPPpxG3e/xOo6HIWwB/58HukkwIVTOaZ0VwdMVjhRUX/01E4FtQbck9GazOOj7MXHc5RBzMrU86iBJHbI+A==", "dev": true, "requires": { "@babel/code-frame": "^7.10.4", @@ -55147,15 +55423,15 @@ } }, "@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", "dev": true }, "@truffle/abi-utils": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@truffle/abi-utils/-/abi-utils-0.3.1.tgz", - "integrity": "sha512-tieaDgwDm2IH1wJuVF/waREVFvzXHSF6AkQfd71DQwpwnrl/9I1iKu+1WpQyFqxu+6WMfCYhzMEbssQBt4Zniw==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@truffle/abi-utils/-/abi-utils-0.3.3.tgz", + "integrity": "sha512-/KpaaPi0daffnwLhFulMtwdQ7YfZZtj24J34kZJi7OQw9x0dSNSskGFTU5SEv9d3fOfHNYqCevsqtv1zek0+zg==", "dev": true, "optional": true, "requires": { @@ -55204,14 +55480,14 @@ "optional": true }, "@truffle/codec": { - "version": "0.14.4", - "resolved": "https://registry.npmjs.org/@truffle/codec/-/codec-0.14.4.tgz", - "integrity": "sha512-il9dFzALUbd1JMPOVcxnIjTQ1fiJEPHfBYbqVQfWZfzAN0Kw+x1eaKunIU+NvrNRycvkXk4itWUTui5sMlXBBA==", + "version": "0.14.6", + "resolved": "https://registry.npmjs.org/@truffle/codec/-/codec-0.14.6.tgz", + "integrity": "sha512-0jPT2MCVTk+1OzkWj0h1Twyh7nP5VBdfqrFK6XjPJZggqmm0bLWexoRPeTrVlByjaKq7uih6bH8MnnoED1MMxQ==", "dev": true, "optional": true, "requires": { - "@truffle/abi-utils": "^0.3.1", - "@truffle/compile-common": "^0.8.0", + "@truffle/abi-utils": "^0.3.3", + "@truffle/compile-common": "^0.8.1", "big.js": "^6.0.3", "bn.js": "^5.1.3", "cbor": "^5.2.0", @@ -55265,9 +55541,9 @@ } }, "@truffle/compile-common": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@truffle/compile-common/-/compile-common-0.8.0.tgz", - "integrity": "sha512-3mtEC73dQODTI3/ZwonunVHyPS2BGexXSBIv4pOgMrWwnZPcHlo2+IW2+m2At/DnZehL78bkF993Vti2pJfx6Q==", + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@truffle/compile-common/-/compile-common-0.8.1.tgz", + "integrity": "sha512-7mzzG9Cfrn+fDT5Sqi7B6pccvIIV5w/GM8/56YgnjysbDzy5aZ6mv0fe37ZbcznEVQ35NJjBy+lEr/ozOGXwQA==", "dev": true, "optional": true, "requires": { @@ -55276,18 +55552,18 @@ } }, "@truffle/contract": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@truffle/contract/-/contract-4.6.0.tgz", - "integrity": "sha512-FxSR7WtV1q+1AKHhJmsbd360qFFjtkGPQeJfaDcn7wlOPG+axW9iLqLSUTlRpFkPKJnUILg2FujNM965rIQJtg==", + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/@truffle/contract/-/contract-4.6.3.tgz", + "integrity": "sha512-boiCnXxYUr+9Iy8hiJN8b6pZfTlwnBCTKjqs8dqrLbA3QTlqTmsxkMMLZrqdIY+WuAU3yT6ah/EWGqf1rMvbqQ==", "dev": true, "optional": true, "requires": { "@ensdomains/ensjs": "^2.1.0", "@truffle/blockchain-utils": "^0.1.4", - "@truffle/contract-schema": "^3.4.9", - "@truffle/debug-utils": "^6.0.34", + "@truffle/contract-schema": "^3.4.10", + "@truffle/debug-utils": "^6.0.36", "@truffle/error": "^0.1.1", - "@truffle/interface-adapter": "^0.5.21", + "@truffle/interface-adapter": "^0.5.23", "bignumber.js": "^7.2.1", "debug": "^4.3.1", "ethers": "^4.0.32", @@ -55808,9 +56084,9 @@ } }, "@truffle/contract-schema": { - "version": "3.4.9", - "resolved": "https://registry.npmjs.org/@truffle/contract-schema/-/contract-schema-3.4.9.tgz", - "integrity": "sha512-nhYMXWbUs6dMYHL1f8DTkRk/uo1sADK0yeSYXo/p/7nqnjlHzqrr75BBsKbB7OFIVT05des+GFNQJqBaRZVdxQ==", + "version": "3.4.10", + "resolved": "https://registry.npmjs.org/@truffle/contract-schema/-/contract-schema-3.4.10.tgz", + "integrity": "sha512-BhRNRoRvlj2th6E5RNS0BnS0ZxQe01JJz8I7MjkGqdeXSvrn6qDCAnbmvhNgUv0l5h8w5+gBOQhAJhILf1shdQ==", "dev": true, "optional": true, "requires": { @@ -55819,13 +56095,13 @@ } }, "@truffle/debug-utils": { - "version": "6.0.34", - "resolved": "https://registry.npmjs.org/@truffle/debug-utils/-/debug-utils-6.0.34.tgz", - "integrity": "sha512-GbGnC9ESJXYHjzQKOV6yeFzvXDnW1yIvpfHXyc4PMDnnFoqX2OxP8mGmMzFKW2Uhqg89wl4GMPLuxycMkodWrw==", + "version": "6.0.36", + "resolved": "https://registry.npmjs.org/@truffle/debug-utils/-/debug-utils-6.0.36.tgz", + "integrity": "sha512-oxqVAJOXLUsSpGK3ez0JLTgPoVUhGrvdkYKIfYVkED10lhCgh0HlJ/AbRkUPUV7KR9SKXK5BCDsTJlVbdqtMXA==", "dev": true, "optional": true, "requires": { - "@truffle/codec": "^0.14.4", + "@truffle/codec": "^0.14.6", "@trufflesuite/chromafi": "^3.0.0", "bn.js": "^5.1.3", "chalk": "^2.4.2", @@ -55841,9 +56117,9 @@ "optional": true }, "@truffle/interface-adapter": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/@truffle/interface-adapter/-/interface-adapter-0.5.21.tgz", - "integrity": "sha512-2ltbu3upsWS0TAQu1kLQc048XlXNmDkCzH6iebX4dg3VBB+l7oG/pu5+/kl8t+LRfzGoEMLKwOQt7vk0Vm3PNA==", + "version": "0.5.23", + "resolved": "https://registry.npmjs.org/@truffle/interface-adapter/-/interface-adapter-0.5.23.tgz", + "integrity": "sha512-nU8kChKgcUP+tELId1PMgHnmd2KcBdBer59TxfVqAZXRmt6blm2tpBbGYtKzTIdZlf6kMqVbZXdB6u1CJDqfxg==", "dev": true, "optional": true, "requires": { @@ -56450,9 +56726,9 @@ } }, "@types/babel__traverse": { - "version": "7.18.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.1.tgz", - "integrity": "sha512-FSdLaZh2UxaMuLp9lixWaHq/golWTRWOnRsAXzDTDSDOQLuZb1nsdCt6pJSPWSEQt2eFZ2YVk3oYhn+1kLMeMA==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.2.tgz", + "integrity": "sha512-FcFaxOr2V5KZCviw1TnutEMVUVsGt4D2hP1TAfXZAMKuHYW3xQhe3jTxNPWutgCJ3/X1c5yX8ZoGVEItxKbwBg==", "dev": true, "requires": { "@babel/types": "^7.3.0" @@ -56560,9 +56836,9 @@ } }, "@types/har-format": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@types/har-format/-/har-format-1.2.8.tgz", - "integrity": "sha512-OP6L9VuZNdskgNN3zFQQ54ceYD8OLq5IbqO4VK91ORLfOm7WdT/CiT/pHEBSQEqCInJ2y3O6iCm/zGtPElpgJQ==" + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/@types/har-format/-/har-format-1.2.9.tgz", + "integrity": "sha512-rffW6MhQ9yoa75bdNi+rjZBAvu2HhehWJXlhuWXnWdENeuKe82wUgAwxYOb7KRKKmxYN+D/iRKd2NDQMLqlUmg==" }, "@types/hast": { "version": "2.3.4", @@ -56635,6 +56911,25 @@ "pretty-format": "^27.0.0" } }, + "@types/jsdom": { + "version": "16.2.15", + "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-16.2.15.tgz", + "integrity": "sha512-nwF87yjBKuX/roqGYerZZM0Nv1pZDMAT5YhOHYeM/72Fic+VEqJh4nyoqoapzJnW3pUlfxPY5FhgsJtM+dRnQQ==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/parse5": "^6.0.3", + "@types/tough-cookie": "*" + }, + "dependencies": { + "@types/parse5": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.3.tgz", + "integrity": "sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==", + "dev": true + } + } + }, "@types/json-schema": { "version": "7.0.11", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", @@ -56724,9 +57019,9 @@ } }, "@types/prettier": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.0.tgz", - "integrity": "sha512-RI1L7N4JnW5gQw2spvL7Sllfuf1SaHdrZpCHiBlCXjIlufi1SMNnbu2teze3/QE67Fg2tBlH7W+mi4hVNk4p0A==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ri0UmynRRvZiiUJdiz38MmIblKK+oH30MztdBVR95dv/Ubw6neWSb8u1XpRb72L4qsZOhz+L+z9JD40SJmfWow==", "dev": true }, "@types/pretty-hrtime": { @@ -56741,9 +57036,9 @@ "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" }, "@types/puppeteer": { - "version": "5.4.6", - "resolved": "https://registry.npmjs.org/@types/puppeteer/-/puppeteer-5.4.6.tgz", - "integrity": "sha512-98Kghehs7+/GD9b56qryhqdqVCXUTbetTv3PlvDnmFRTHQH0j9DIp1f7rkAW3BAj4U3yoeSEQnKgdW8bDq0Y0Q==", + "version": "5.4.7", + "resolved": "https://registry.npmjs.org/@types/puppeteer/-/puppeteer-5.4.7.tgz", + "integrity": "sha512-JdGWZZYL0vKapXF4oQTC5hLVNfOgdPrqeZ1BiQnGk5cB7HeE91EWUiTdVSdQPobRN8rIcdffjiOgCYJ/S8QrnQ==", "dev": true, "requires": { "@types/node": "*" @@ -56774,9 +57069,9 @@ }, "dependencies": { "csstype": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz", - "integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" } } }, @@ -56790,9 +57085,9 @@ }, "dependencies": { "@types/react": { - "version": "17.0.49", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.49.tgz", - "integrity": "sha512-CCBPMZaPhcKkYUTqFs/hOWqKjPxhTEmnZWjlHHgIMop67DsXywf9B5Os9Hz8KSacjNOgIdnZVJamwl232uxoPg==", + "version": "17.0.50", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.50.tgz", + "integrity": "sha512-ZCBHzpDb5skMnc1zFXAXnL3l1FAdi+xZvwxK+PkglMmBrwjpp9nKaWuEvrGnSifCJmBFGxZOOFuwC6KH/s0NuA==", "dev": true, "requires": { "@types/prop-types": "*", @@ -56801,9 +57096,9 @@ } }, "csstype": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz", - "integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==", "dev": true } } @@ -56818,9 +57113,9 @@ } }, "@types/react-native": { - "version": "0.69.8", - "resolved": "https://registry.npmjs.org/@types/react-native/-/react-native-0.69.8.tgz", - "integrity": "sha512-KW5KQdg4vjG7Mo2muCTRSe3CwVNEROa4Hlh7wIkfv+be92jdFwq6tf+i1q7dD3wDnUinc/cVi/6/PJbGpbshEA==", + "version": "0.70.4", + "resolved": "https://registry.npmjs.org/@types/react-native/-/react-native-0.70.4.tgz", + "integrity": "sha512-z5tKfblHLG6jts2AQcioDw4N+F2EzflO9n495yNyqyMYRkSIVTLX64MHBeqMp5wfOY5mshy0GsOgnFSXrXKQSg==", "dev": true, "requires": { "@types/react": "*" @@ -56913,6 +57208,12 @@ "@types/node": "*" } }, + "@types/semver": { + "version": "7.3.12", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.12.tgz", + "integrity": "sha512-WwA1MW0++RfXmCr12xeYOOC5baSC9mSb0ZqCquFzKhcoF4TvHu5MKOuXsncgZcpVFhB1pXd5hZmM0ryAoCp12A==", + "dev": true + }, "@types/sinonjs__fake-timers": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz", @@ -56950,9 +57251,9 @@ }, "dependencies": { "csstype": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz", - "integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==", "dev": true } } @@ -57077,6 +57378,12 @@ "@types/jest": "*" } }, + "@types/tough-cookie": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.2.tgz", + "integrity": "sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==", + "dev": true + }, "@types/uglify-js": { "version": "3.17.0", "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.17.0.tgz", @@ -57170,25 +57477,41 @@ } }, "@typescript-eslint/eslint-plugin": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz", - "integrity": "sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg==", + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.40.1.tgz", + "integrity": "sha512-FsWboKkWdytGiXT5O1/R9j37YgcjO8MKHSUmWnIEjVaz0krHkplPnYi7mwdb+5+cs0toFNQb0HIrN7zONdIEWg==", "dev": true, "requires": { - "@typescript-eslint/experimental-utils": "4.33.0", - "@typescript-eslint/scope-manager": "4.33.0", - "debug": "^4.3.1", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.1.8", - "regexpp": "^3.1.0", - "semver": "^7.3.5", + "@typescript-eslint/scope-manager": "5.40.1", + "@typescript-eslint/type-utils": "5.40.1", + "@typescript-eslint/utils": "5.40.1", + "debug": "^4.3.4", + "ignore": "^5.2.0", + "regexpp": "^3.2.0", + "semver": "^7.3.7", "tsutils": "^3.21.0" }, "dependencies": { + "@typescript-eslint/utils": { + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.40.1.tgz", + "integrity": "sha512-a2TAVScoX9fjryNrW6BZRnreDUszxqm9eQ9Esv8n5nXApMW0zeANUYlwh/DED04SC/ifuBvXgZpIK5xeJHQ3aw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.40.1", + "@typescript-eslint/types": "5.40.1", + "@typescript-eslint/typescript-estree": "5.40.1", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0", + "semver": "^7.3.7" + } + }, "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -57196,67 +57519,92 @@ } } }, - "@typescript-eslint/experimental-utils": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz", - "integrity": "sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q==", + "@typescript-eslint/parser": { + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.40.1.tgz", + "integrity": "sha512-IK6x55va5w4YvXd4b3VrXQPldV9vQTxi5ov+g4pMANsXPTXOcfjx08CRR1Dfrcc51syPtXHF5bgLlMHYFrvQtg==", "dev": true, "requires": { - "@types/json-schema": "^7.0.7", - "@typescript-eslint/scope-manager": "4.33.0", - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/typescript-estree": "4.33.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" + "@typescript-eslint/scope-manager": "5.40.1", + "@typescript-eslint/types": "5.40.1", + "@typescript-eslint/typescript-estree": "5.40.1", + "debug": "^4.3.4" } }, - "@typescript-eslint/parser": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.33.0.tgz", - "integrity": "sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA==", + "@typescript-eslint/scope-manager": { + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.40.1.tgz", + "integrity": "sha512-jkn4xsJiUQucI16OLCXrLRXDZ3afKhOIqXs4R3O+M00hdQLKR58WuyXPZZjhKLFCEP2g+TXdBRtLQ33UfAdRUg==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "4.33.0", - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/typescript-estree": "4.33.0", - "debug": "^4.3.1" + "@typescript-eslint/types": "5.40.1", + "@typescript-eslint/visitor-keys": "5.40.1" } }, - "@typescript-eslint/scope-manager": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz", - "integrity": "sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==", + "@typescript-eslint/type-utils": { + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.40.1.tgz", + "integrity": "sha512-DLAs+AHQOe6n5LRraXiv27IYPhleF0ldEmx6yBqBgBLaNRKTkffhV1RPsjoJBhVup2zHxfaRtan8/YRBgYhU9Q==", "dev": true, "requires": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0" + "@typescript-eslint/typescript-estree": "5.40.1", + "@typescript-eslint/utils": "5.40.1", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "dependencies": { + "@typescript-eslint/utils": { + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.40.1.tgz", + "integrity": "sha512-a2TAVScoX9fjryNrW6BZRnreDUszxqm9eQ9Esv8n5nXApMW0zeANUYlwh/DED04SC/ifuBvXgZpIK5xeJHQ3aw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.40.1", + "@typescript-eslint/types": "5.40.1", + "@typescript-eslint/typescript-estree": "5.40.1", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0", + "semver": "^7.3.7" + } + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } } }, "@typescript-eslint/types": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz", - "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==", + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.40.1.tgz", + "integrity": "sha512-Icg9kiuVJSwdzSQvtdGspOlWNjVDnF3qVIKXdJ103o36yRprdl3Ge5cABQx+csx960nuMF21v8qvO31v9t3OHw==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz", - "integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==", + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.40.1.tgz", + "integrity": "sha512-5QTP/nW5+60jBcEPfXy/EZL01qrl9GZtbgDZtDPlfW5zj/zjNrdI2B5zMUHmOsfvOr2cWqwVdWjobCiHcedmQA==", "dev": true, "requires": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0", - "debug": "^4.3.1", - "globby": "^11.0.3", - "is-glob": "^4.0.1", - "semver": "^7.3.5", + "@typescript-eslint/types": "5.40.1", + "@typescript-eslint/visitor-keys": "5.40.1", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", "tsutils": "^3.21.0" }, "dependencies": { "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -57265,43 +57613,44 @@ } }, "@typescript-eslint/utils": { - "version": "5.36.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.36.2.tgz", - "integrity": "sha512-uNcopWonEITX96v9pefk9DC1bWMdkweeSsewJ6GeC7L6j2t0SJywisgkr9wUTtXk90fi2Eljj90HSHm3OGdGRg==", + "version": "5.40.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.40.0.tgz", + "integrity": "sha512-MO0y3T5BQ5+tkkuYZJBjePewsY+cQnfkYeRqS6tPh28niiIwPnQ1t59CSRcs1ZwJJNOdWw7rv9pF8aP58IMihA==", "dev": true, "requires": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.36.2", - "@typescript-eslint/types": "5.36.2", - "@typescript-eslint/typescript-estree": "5.36.2", + "@typescript-eslint/scope-manager": "5.40.0", + "@typescript-eslint/types": "5.40.0", + "@typescript-eslint/typescript-estree": "5.40.0", "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" + "eslint-utils": "^3.0.0", + "semver": "^7.3.7" }, "dependencies": { "@typescript-eslint/scope-manager": { - "version": "5.36.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.36.2.tgz", - "integrity": "sha512-cNNP51L8SkIFSfce8B1NSUBTJTu2Ts4nWeWbFrdaqjmn9yKrAaJUBHkyTZc0cL06OFHpb+JZq5AUHROS398Orw==", + "version": "5.40.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.40.0.tgz", + "integrity": "sha512-d3nPmjUeZtEWRvyReMI4I1MwPGC63E8pDoHy0BnrYjnJgilBD3hv7XOiETKLY/zTwI7kCnBDf2vWTRUVpYw0Uw==", "dev": true, "requires": { - "@typescript-eslint/types": "5.36.2", - "@typescript-eslint/visitor-keys": "5.36.2" + "@typescript-eslint/types": "5.40.0", + "@typescript-eslint/visitor-keys": "5.40.0" } }, "@typescript-eslint/types": { - "version": "5.36.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.36.2.tgz", - "integrity": "sha512-9OJSvvwuF1L5eS2EQgFUbECb99F0mwq501w0H0EkYULkhFa19Qq7WFbycdw1PexAc929asupbZcgjVIe6OK/XQ==", + "version": "5.40.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.40.0.tgz", + "integrity": "sha512-V1KdQRTXsYpf1Y1fXCeZ+uhjW48Niiw0VGt4V8yzuaDTU8Z1Xl7yQDyQNqyAFcVhpYXIVCEuxSIWTsLDpHgTbw==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.36.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.36.2.tgz", - "integrity": "sha512-8fyH+RfbKc0mTspfuEjlfqA4YywcwQK2Amcf6TDOwaRLg7Vwdu4bZzyvBZp4bjt1RRjQ5MDnOZahxMrt2l5v9w==", + "version": "5.40.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.40.0.tgz", + "integrity": "sha512-b0GYlDj8TLTOqwX7EGbw2gL5EXS2CPEWhF9nGJiGmEcmlpNBjyHsTwbqpyIEPVpl6br4UcBOYlcI2FJVtJkYhg==", "dev": true, "requires": { - "@typescript-eslint/types": "5.36.2", - "@typescript-eslint/visitor-keys": "5.36.2", + "@typescript-eslint/types": "5.40.0", + "@typescript-eslint/visitor-keys": "5.40.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -57310,12 +57659,12 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "5.36.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.36.2.tgz", - "integrity": "sha512-BtRvSR6dEdrNt7Net2/XDjbYKU5Ml6GqJgVfXT0CxTCJlnIqK7rAGreuWKMT2t8cFUT2Msv5oxw0GMRD7T5J7A==", + "version": "5.40.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.40.0.tgz", + "integrity": "sha512-ijJ+6yig+x9XplEpG2K6FUdJeQGGj/15U3S56W9IqXKJqleuD7zJ2AX/miLezwxpd7ZxDAqO87zWufKg+RPZyQ==", "dev": true, "requires": { - "@typescript-eslint/types": "5.36.2", + "@typescript-eslint/types": "5.40.0", "eslint-visitor-keys": "^3.3.0" } }, @@ -57326,9 +57675,9 @@ "dev": true }, "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -57337,13 +57686,21 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz", - "integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==", + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.40.1.tgz", + "integrity": "sha512-A2DGmeZ+FMja0geX5rww+DpvILpwo1OsiQs0M+joPWJYsiEFBLsH0y1oFymPNul6Z5okSmHpP4ivkc2N0Cgfkw==", "dev": true, "requires": { - "@typescript-eslint/types": "4.33.0", - "eslint-visitor-keys": "^2.0.0" + "@typescript-eslint/types": "5.40.1", + "eslint-visitor-keys": "^3.3.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true + } } }, "@vanilla-extract/css": { @@ -57395,9 +57752,9 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "csstype": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz", - "integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" }, "has-flag": { "version": "4.0.0", @@ -57433,9 +57790,9 @@ "integrity": "sha512-aW6CfMMToX4a+baLuVxwcT0FSACjX3xrNt8wdi/3LLRlLAfhyue8OK7kJxhcYNZfydBeWTP59aRy8p5FUTIeew==" }, "@wagmi/core": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/@wagmi/core/-/core-0.5.5.tgz", - "integrity": "sha512-AZsO9IK+Gu5S+s48ZARmyOo59JfV4l2w3P8XtAPOSKnr8aRYK9t71V+bAgfkMxz5xArmkx4qEpnhlAWFCax+KA==", + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/@wagmi/core/-/core-0.5.8.tgz", + "integrity": "sha512-1mABf1bXyn3AOHyQkios4FTGqoARa8y1tf7GMH6t1c7q0nAMSbpXoTDdjEidUHy8qhWoG0y3Ez4PjCi8WQnmMg==", "requires": { "eventemitter3": "^4.0.7", "zustand": "^4.0.0" @@ -58075,9 +58432,9 @@ "dev": true }, "abi-coder": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/abi-coder/-/abi-coder-4.0.0.tgz", - "integrity": "sha512-kR3+QqAbvG+nBR3dE6tgxiaxyu9dJl40y7WXwmMqAaatg0E8xn37XkS/bBUozQ45KWqQnUHt4TtLcvad+X9Z5g==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/abi-coder/-/abi-coder-4.1.1.tgz", + "integrity": "sha512-CVEKpbWSIrb6JxLPsAuXrrtL8ml2MnEEcINgxOp7gR2u4GUFEKO4e0raAD1+c6UdFJ2QtX2NRoYol9k1B3TxHw==", "requires": { "@ethersproject/abi": "^5.0.0", "@ethersproject/keccak256": "^5.0.0", @@ -58094,9 +58451,9 @@ } }, "abortcontroller-polyfill": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.3.tgz", - "integrity": "sha512-zetDJxd89y3X99Kvo4qFx8GKlt6GsvN3UcRZHwU6iFA/0KiOmhkTVhe8oRoTBiTVPZu09x3vCra47+w8Yz1+2Q==", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.5.tgz", + "integrity": "sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ==", "dev": true }, "abstract-leveldown": { @@ -58158,9 +58515,9 @@ "dev": true }, "address": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/address/-/address-1.2.0.tgz", - "integrity": "sha512-tNEZYz5G/zYunxFm7sfhAxkXEuLj3K6BKwv6ZURlsF6yiUQ65z0Q2wZW9L5cPUl9ocofGvXOdFYbFHp0+6MOig==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/address/-/address-1.2.1.tgz", + "integrity": "sha512-B+6bi5D34+fDYENiH5qOlA0cV2rAGKuWZ9LeyUUehbXy8e0VS9e498yO0Jeeh+iM+6KbfudHTFjXw2MmJD4QRA==", "dev": true }, "aes-js": { @@ -59084,61 +59441,61 @@ } }, "babel-jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", - "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-28.1.3.tgz", + "integrity": "sha512-epUaPOEWMk3cWX0M/sPvCHHCe9fMFAa/9hXEgKP8nFfNl/jlGkE9ucq9NqkZGXLDduCJYS0UvSlPUwC0S+rH6Q==", "dev": true, "requires": { - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/transform": "^28.1.3", "@types/babel__core": "^7.1.14", "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^27.5.1", + "babel-preset-jest": "^28.1.3", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "slash": "^3.0.0" }, "dependencies": { "@jest/transform": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", - "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-28.1.3.tgz", + "integrity": "sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA==", "dev": true, "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.5.1", + "@babel/core": "^7.11.6", + "@jest/types": "^28.1.3", + "@jridgewell/trace-mapping": "^0.3.13", "babel-plugin-istanbul": "^6.1.1", "chalk": "^4.0.0", "convert-source-map": "^1.4.0", "fast-json-stable-stringify": "^2.0.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-util": "^27.5.1", + "jest-haste-map": "^28.1.3", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.1.3", "micromatch": "^4.0.4", "pirates": "^4.0.4", "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" + "write-file-atomic": "^4.0.1" } }, "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", "dev": true, "requires": { + "@jest/schemas": "^28.1.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^16.0.0", + "@types/yargs": "^17.0.8", "chalk": "^4.0.0" } }, "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", "dev": true, "requires": { "@types/yargs-parser": "*" @@ -59185,49 +59542,38 @@ "dev": true }, "jest-haste-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", - "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz", + "integrity": "sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA==", "dev": true, "requires": { - "@jest/types": "^27.5.1", - "@types/graceful-fs": "^4.1.2", + "@jest/types": "^28.1.3", + "@types/graceful-fs": "^4.1.3", "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", "fsevents": "^2.3.2", "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.1.3", + "jest-worker": "^28.1.3", "micromatch": "^4.0.4", - "walker": "^1.0.7" + "walker": "^1.0.8" } }, "jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", "dev": true }, - "jest-serializer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", - "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", - "dev": true, - "requires": { - "@types/node": "*", - "graceful-fs": "^4.2.9" - } - }, "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", "dev": true, "requires": { - "@jest/types": "^27.5.1", + "@jest/types": "^28.1.3", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -59243,6 +59589,16 @@ "requires": { "has-flag": "^4.0.0" } + }, + "write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + } } } }, @@ -59425,14 +59781,14 @@ } }, "babel-plugin-jest-hoist": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", - "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.1.3.tgz", + "integrity": "sha512-Ys3tUKAmfnkRUpPdpa98eYrAR0nV+sSFUZZEGuQ2EbFd1y4SOLtD5QDNHAq+bb9a+bbXvYQC4b+ID/THIMcU6Q==", "dev": true, "requires": { "@babel/template": "^7.3.3", "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", + "@types/babel__core": "^7.1.14", "@types/babel__traverse": "^7.0.6" } }, @@ -59447,30 +59803,30 @@ } }, "babel-plugin-polyfill-corejs2": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.2.tgz", - "integrity": "sha512-LPnodUl3lS0/4wN3Rb+m+UK8s7lj2jcLRrjho4gLw+OJs+I4bvGXshINesY5xx/apM+biTnQ9reDI8yj+0M5+Q==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", + "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", "requires": { "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.3.2", + "@babel/helper-define-polyfill-provider": "^0.3.3", "semver": "^6.1.1" } }, "babel-plugin-polyfill-corejs3": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.3.tgz", - "integrity": "sha512-zKsXDh0XjnrUEW0mxIHLfjBfnXSMr5Q/goMe/fxpQnLm07mcOZiIZHBNWCMx60HmdvjxfXcalac0tfFg0wqxyw==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", + "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.2", - "core-js-compat": "^3.21.0" + "@babel/helper-define-polyfill-provider": "^0.3.3", + "core-js-compat": "^3.25.1" } }, "babel-plugin-polyfill-regenerator": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.0.tgz", - "integrity": "sha512-RW1cnryiADFeHmfLS+WW/G431p1PsW5qdRdz0SDRi7TKcUgc7Oh/uXkT7MZ/+tGsT1BkczEAmD5XjUyJ5SWDTw==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", + "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.2" + "@babel/helper-define-polyfill-provider": "^0.3.3" } }, "babel-plugin-react-docgen": { @@ -59957,12 +60313,12 @@ } }, "babel-preset-jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", - "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-28.1.3.tgz", + "integrity": "sha512-L+fupJvlWAHbQfn74coNX3zf60LXMJsezNvvx8eIh7iOR1luJ1poxYgQk1F8PYtNq/6QODDHCqsSnTFSWC491A==", "dev": true, "requires": { - "babel-plugin-jest-hoist": "^27.5.1", + "babel-plugin-jest-hoist": "^28.1.3", "babel-preset-current-node-syntax": "^1.0.0" } }, @@ -60820,9 +61176,9 @@ "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" }, "body-parser": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", - "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", "dev": true, "requires": { "bytes": "3.1.2", @@ -60833,7 +61189,7 @@ "http-errors": "2.0.0", "iconv-lite": "0.4.24", "on-finished": "2.4.1", - "qs": "6.10.3", + "qs": "6.11.0", "raw-body": "2.5.1", "type-is": "~1.6.18", "unpipe": "1.0.0" @@ -60859,15 +61215,6 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true - }, - "qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", - "dev": true, - "requires": { - "side-channel": "^1.0.4" - } } } }, @@ -61190,14 +61537,14 @@ } }, "browserslist": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz", - "integrity": "sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==", + "version": "4.21.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", + "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", "requires": { - "caniuse-lite": "^1.0.30001370", - "electron-to-chromium": "^1.4.202", + "caniuse-lite": "^1.0.30001400", + "electron-to-chromium": "^1.4.251", "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.5" + "update-browserslist-db": "^1.0.9" } }, "bs58": { @@ -61314,6 +61661,14 @@ "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", "dev": true }, + "busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "requires": { + "streamsearch": "^1.1.0" + } + }, "bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", @@ -61346,21 +61701,36 @@ "yargs-parser": "^20.2.9" }, "dependencies": { + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, "istanbul-lib-coverage": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", "dev": true }, - "v8-to-istanbul": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz", - "integrity": "sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==", + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "requires": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0" + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" } } } @@ -61557,14 +61927,14 @@ } }, "camelize": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz", - "integrity": "sha512-W2lPwkBkMZwFlPCXhIlYgxu+7gC/NUlCtdK652DAJ1JdgV0sTrvuPFshNPrFa1TY2JOkLhgdeEBplB4ezEa+xg==" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz", + "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==" }, "caniuse-lite": { - "version": "1.0.30001393", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001393.tgz", - "integrity": "sha512-N/od11RX+Gsk+1qY/jbPa0R6zJupEa0lxeBG598EbrtblxVCTJsQwbRBm6+V+rxpc5lHKdsXb9RY83cZIPLseA==" + "version": "1.0.30001419", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001419.tgz", + "integrity": "sha512-aFO1r+g6R7TW+PNQxKzjITwLOyDhVRLjW0LcwS/HCZGUUKTGNp9+IwLC4xyDSZBygVL/mxaFR3HIV6wEKQuSzw==" }, "capture-exit": { "version": "2.0.0", @@ -61984,9 +62354,9 @@ "dev": true }, "ci-info": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", - "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.5.0.tgz", + "integrity": "sha512-yH4RezKOGlOhxkmhbeNuC4eYZKAUsEaGtBuBzDDP1eFUKiccDWzBABxBfOx31IDwDIXMTxWuwAxUGModvkbuVw==", "dev": true }, "cids": { @@ -62118,9 +62488,9 @@ } }, "classnames": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.1.tgz", - "integrity": "sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==" + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz", + "integrity": "sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==" }, "clean-css": { "version": "4.2.4", @@ -62170,9 +62540,9 @@ } }, "cli-table3": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.2.tgz", - "integrity": "sha512-QyavHCaIC80cMivimWu4aWHilIpiDpfm3hGmqAmXVL1UsnbLuBSMd21hTX6VY4ZSDSM73ESLeF8TOYId3rBTbw==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", + "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", "dev": true, "requires": { "@colors/colors": "1.5.0", @@ -62324,13 +62694,13 @@ } }, "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, "requires": { "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", + "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, @@ -62748,19 +63118,9 @@ "dev": true }, "convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "requires": { - "safe-buffer": "~5.1.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - } - } + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" }, "cookie": { "version": "0.5.0", @@ -62834,23 +63194,23 @@ } }, "core-js": { - "version": "3.25.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.25.1.tgz", - "integrity": "sha512-sr0FY4lnO1hkQ4gLDr24K0DGnweGO1QwSj5BpfQjpSJPdqWalja4cTps29Y/PJVG/P7FYlPDkH3hO+Tr0CvDgQ==", + "version": "3.25.5", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.25.5.tgz", + "integrity": "sha512-nbm6eZSjm+ZuBQxCUPQKQCoUEfFOXjUZ8dTTyikyKaWrTYmAVbykQfwsKE5dBK88u3QCkCrzsx/PPlKfhsvgpw==", "dev": true }, "core-js-compat": { - "version": "3.25.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.25.1.tgz", - "integrity": "sha512-pOHS7O0i8Qt4zlPW/eIFjwp+NrTPx+wTL0ctgI2fHn31sZOq89rDsmtc/A2vAX7r6shl+bmVI+678He46jgBlw==", + "version": "3.25.5", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.25.5.tgz", + "integrity": "sha512-ovcyhs2DEBUIE0MGEKHP4olCUW/XYte3Vroyxuh38rD1wAO4dHohsovUC4eAOuzFxE6b+RXvBU3UZ9o0YhUTkA==", "requires": { - "browserslist": "^4.21.3" + "browserslist": "^4.21.4" } }, "core-js-pure": { - "version": "3.25.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.25.1.tgz", - "integrity": "sha512-7Fr74bliUDdeJCBMxkkIuQ4xfxn/SwrVg+HkJUAoNEXVqYLv55l6Af0dJ5Lq2YBUW9yKqSkLXaS5SYPK6MGa/A==", + "version": "3.25.5", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.25.5.tgz", + "integrity": "sha512-oml3M22pHM+igfWHDfdLVq2ShWmjM2V4L+dQEBs0DWVIqEm9WHCwGAlZ6BmyBQGy5sFrJmcx+856D9lVKyGWYg==", "dev": true }, "core-util-is": { @@ -63438,9 +63798,9 @@ } }, "cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", + "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", "dev": true }, "cssstyle": { @@ -63461,9 +63821,9 @@ } }, "csstype": { - "version": "2.6.20", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.20.tgz", - "integrity": "sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA==" + "version": "2.6.21", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.21.tgz", + "integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==" }, "currently-unhandled": { "version": "0.4.1", @@ -63542,9 +63902,9 @@ }, "dependencies": { "@types/node": { - "version": "14.18.28", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.28.tgz", - "integrity": "sha512-CK2fnrQlIgKlCV3N2kM+Gznb5USlwA1KFX3rJVHmgVk6NJxFPuQ86pAcvKnu37IA4BGlSRz7sEE1lHL1aLZ/eQ==", + "version": "14.18.32", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.32.tgz", + "integrity": "sha512-Y6S38pFr04yb13qqHf8uk1nHE3lXgQ30WZbv1mLliV9pt0NjvqdWttLcrOYLnXbOafknVYRHZGoMSpR9UwfYow==", "dev": true }, "ansi-styles": { @@ -63615,9 +63975,9 @@ "dev": true }, "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -63672,14 +64032,26 @@ } }, "data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", + "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", "dev": true, "requires": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" + "abab": "^2.0.6", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0" + }, + "dependencies": { + "whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "dev": true, + "requires": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + } + } } }, "date-fns": { @@ -63712,9 +64084,9 @@ "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==" }, "decimal.js": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.0.tgz", - "integrity": "sha512-Nv6ENEzyPQ6AItkGwLE2PGKinZZ9g59vSh2BeH6NqPu0OTKZ5ruJsVqh/orbAnqXc9pBbgXAIrc2EyaCj8NpGg==", + "version": "10.4.2", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.2.tgz", + "integrity": "sha512-ic1yEvwT6GuvaYwBLLY6/aFFgjZdySKTE8en/fkU3QICTmRtgtSlFn0u0BXN06InZwtfCelR7j8LRiDI/02iGA==", "dev": true }, "decode-uri-component": { @@ -63922,9 +64294,9 @@ } }, "default-require-extensions": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.0.tgz", - "integrity": "sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.1.tgz", + "integrity": "sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw==", "dev": true, "requires": { "strip-bom": "^4.0.0" @@ -63971,9 +64343,9 @@ } }, "defined": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", - "integrity": "sha512-Y2caI5+ZwS5c3RiNDJ6u53VhQHv+hHKwhkI1iHvceKUHw9Df6EK2zRLfjejRgMuCuxK7PfSWIMwWecceVvThjQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", + "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==", "dev": true }, "delay": { @@ -64104,30 +64476,13 @@ } }, "detect-port": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.3.0.tgz", - "integrity": "sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.5.1.tgz", + "integrity": "sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==", "dev": true, "requires": { "address": "^1.0.1", - "debug": "^2.6.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } + "debug": "4" } }, "detective": { @@ -64219,9 +64574,9 @@ }, "dependencies": { "csstype": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz", - "integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" } } }, @@ -64252,20 +64607,12 @@ "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" }, "domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", + "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", "dev": true, "requires": { - "webidl-conversions": "^5.0.0" - }, - "dependencies": { - "webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", - "dev": true - } + "webidl-conversions": "^7.0.0" } }, "domhandler": { @@ -64450,9 +64797,9 @@ } }, "electron-to-chromium": { - "version": "1.4.246", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.246.tgz", - "integrity": "sha512-/wFCHUE+Hocqr/LlVGsuKLIw4P2lBWwFIDcNMDpJGzyIysQV4aycpoOitAs32FT94EHKnNqDR/CVZJFbXEufJA==" + "version": "1.4.281", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.281.tgz", + "integrity": "sha512-yer0w5wCYdFoZytfmbNhwiGI/3cW06+RV7E23ln4490DVMxs7PvYpbsrSmAiBn/V6gode8wvJlST2YfWgvzWIg==" }, "elliptic": { "version": "6.5.4", @@ -64482,9 +64829,9 @@ "dev": true }, "emittery": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", - "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", + "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==", "dev": true }, "emoji-regex": { @@ -64617,21 +64964,21 @@ } }, "es-abstract": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.2.tgz", - "integrity": "sha512-XxXQuVNrySBNlEkTYJoDNFe5+s2yIOpzq80sUHEdPdQr0S5nTLz4ZPPPswNIpKseDDUS5yghX1gfLIHQZ1iNuQ==", + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz", + "integrity": "sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==", "requires": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.2", + "get-intrinsic": "^1.1.3", "get-symbol-description": "^1.0.0", "has": "^1.0.3", "has-property-descriptors": "^1.0.0", "has-symbols": "^1.0.3", "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", + "is-callable": "^1.2.7", "is-negative-zero": "^2.0.2", "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.2", @@ -64641,6 +64988,7 @@ "object-keys": "^1.1.1", "object.assign": "^4.1.4", "regexp.prototype.flags": "^1.4.3", + "safe-regex-test": "^1.0.0", "string.prototype.trimend": "^1.0.5", "string.prototype.trimstart": "^1.0.5", "unbox-primitive": "^1.0.2" @@ -64923,9 +65271,9 @@ } }, "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -64943,13 +65291,10 @@ } }, "eslint-config-prettier": { - "version": "6.10.1", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.10.1.tgz", - "integrity": "sha512-svTy6zh1ecQojvpbJSgH3aei/Rt7C6i090l5f2WQ4aB05lYHeZIR1qL4wZyyILTbtmnbHP5Yn8MrsOJMGa8RkQ==", - "dev": true, - "requires": { - "get-stdin": "^6.0.0" - } + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", + "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", + "dev": true }, "eslint-config-react-app": { "version": "6.0.0", @@ -65222,9 +65567,9 @@ "dev": true }, "eslint-plugin-testing-library": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.6.2.tgz", - "integrity": "sha512-imakD/MY+8Rp3r69G7Pt1egmLZscSWoIhrxgdVR3kr2nlHImRRh7LeFcoqfAA5CK1rzFFV6rBEp3GTfOEYMpNw==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.7.2.tgz", + "integrity": "sha512-0ZmHeR/DUUgEzW8rwUBRWxuqntipDtpvxK0hymdHnLlABryJkzd+CAHr+XnISaVsTisZ5MLHp6nQF+8COHLLTA==", "dev": true, "requires": { "@typescript-eslint/utils": "^5.13.0" @@ -65240,12 +65585,12 @@ }, "dependencies": { "@typescript-eslint/experimental-utils": { - "version": "5.36.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.36.2.tgz", - "integrity": "sha512-JtRmWb31KQoxGV6CHz8cI+9ki6cC7ciZepXYpCLxsdAtQlBrRBxh5Qpe/ZHyJFOT9j7gyXE+W0shWzRLPfuAFQ==", + "version": "5.40.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.40.0.tgz", + "integrity": "sha512-wDYn3NYqVOmJI4iSkyWxXUu8Xoa4+OCh97YOXZecMCuXFIgCuxOCOlkR4kZyeXWNrulFyXPcXSbs4USb5IwI8g==", "dev": true, "requires": { - "@typescript-eslint/utils": "5.36.2" + "@typescript-eslint/utils": "5.40.0" } } } @@ -65273,9 +65618,9 @@ }, "dependencies": { "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -65872,11 +66217,11 @@ } }, "ethereum-block-by-date": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/ethereum-block-by-date/-/ethereum-block-by-date-1.4.5.tgz", - "integrity": "sha512-mxDUx+yxIGPgKz82HjijFDCoZLT+in+p3tHJ82JDQTLDUl92uNDCNF85PPvchgzrhRlwDM4F0q7/qed5MeJKNw==", + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/ethereum-block-by-date/-/ethereum-block-by-date-1.4.6.tgz", + "integrity": "sha512-MV7QAjeTl3zuVSeRfNdXeJQCfiwc4wCIXiLMnWqarmhyXzzUqq36+aDsqBFbV/D07WiW5JiuQ7KVtLLaqt6WQw==", "requires": { - "moment": "^2.29.2" + "moment": "^2.29.4" } }, "ethereum-bloom-filters": { @@ -66193,6 +66538,55 @@ "@ethersproject/wallet": "5.7.0", "@ethersproject/web": "5.7.0", "@ethersproject/wordlists": "5.7.0" + }, + "dependencies": { + "@ethersproject/networks": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.0.tgz", + "integrity": "sha512-MG6oHSQHd4ebvJrleEQQ4HhVu8Ichr0RDYEfHzsVAVjHNM+w36x9wp9r+hf1JstMXtseXDtkiVoARAG6M959AA==", + "requires": { + "@ethersproject/logger": "^5.7.0" + } + }, + "@ethersproject/providers": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.0.tgz", + "integrity": "sha512-+TTrrINMzZ0aXtlwO/95uhAggKm4USLm1PbeCBR/3XZ7+Oey+3pMyddzZEyRhizHpy1HXV0FRWRMI1O3EGYibA==", + "requires": { + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/base64": "^5.7.0", + "@ethersproject/basex": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/networks": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/random": "^5.7.0", + "@ethersproject/rlp": "^5.7.0", + "@ethersproject/sha2": "^5.7.0", + "@ethersproject/strings": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/web": "^5.7.0", + "bech32": "1.1.4", + "ws": "7.4.6" + } + }, + "@ethersproject/web": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.0.tgz", + "integrity": "sha512-ApHcbbj+muRASVDSCl/tgxaH2LBkRMEYfLOLVa0COipx0+nlu0QKet7U2lEg0vdkh8XRSLf2nd1f1Uk9SrVSGA==", + "requires": { + "@ethersproject/base64": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + } } }, "etherscan-api": { @@ -66282,9 +66676,9 @@ } }, "eventemitter2": { - "version": "6.4.8", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.8.tgz", - "integrity": "sha512-pAJurPyD+Nj/pfz8m0usKF1RW0E9gfY4Dfdem2l6jZbqcZlK8SP93qUMCv9V9FgOn+GSZEW6qeaglpf/vQ9D5A==", + "version": "6.4.9", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.9.tgz", + "integrity": "sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg==", "dev": true }, "eventemitter3": { @@ -66568,34 +66962,36 @@ } }, "expect": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", - "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/expect/-/expect-28.1.3.tgz", + "integrity": "sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g==", "dev": true, "requires": { - "@jest/types": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1" + "@jest/expect-utils": "^28.1.3", + "jest-get-type": "^28.0.2", + "jest-matcher-utils": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-util": "^28.1.3" }, "dependencies": { "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", "dev": true, "requires": { + "@jest/schemas": "^28.1.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^16.0.0", + "@types/yargs": "^17.0.8", "chalk": "^4.0.0" } }, "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", "dev": true, "requires": { "@types/yargs-parser": "*" @@ -66641,6 +67037,20 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, + "jest-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", + "dev": true, + "requires": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -66653,14 +67063,14 @@ } }, "express": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", - "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", "dev": true, "requires": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.0", + "body-parser": "1.20.1", "content-disposition": "0.5.4", "content-type": "~1.0.4", "cookie": "0.5.0", @@ -66679,7 +67089,7 @@ "parseurl": "~1.3.3", "path-to-regexp": "0.1.7", "proxy-addr": "~2.0.7", - "qs": "6.10.3", + "qs": "6.11.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", "send": "0.18.0", @@ -66705,15 +67115,6 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true - }, - "qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", - "dev": true, - "requires": { - "side-channel": "^1.0.4" - } } } }, @@ -66969,9 +67370,9 @@ } }, "fb-watchman": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", "dev": true, "requires": { "bser": "2.1.1" @@ -67459,17 +67860,17 @@ } }, "focus-lock": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/focus-lock/-/focus-lock-0.11.2.tgz", - "integrity": "sha512-pZ2bO++NWLHhiKkgP1bEXHhR1/OjVcSvlCJ98aNJDFeb7H5OOQaO+SKOZle6041O9rv2tmbrO4JzClAvDUHf0g==", + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/focus-lock/-/focus-lock-0.11.3.tgz", + "integrity": "sha512-4n0pYcPTa/uI7Q66BZna61nRT7lDhnuJ9PJr6wiDjx4uStg491ks41y7uOG+s0umaaa+hulNKSldU9aTg9/yVg==", "requires": { "tslib": "^2.0.3" } }, "follow-redirects": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", - "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==" + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" }, "for-each": { "version": "0.3.3", @@ -67586,9 +67987,9 @@ } }, "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -67785,9 +68186,9 @@ "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==" }, "get-intrinsic": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", - "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", + "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", "requires": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -67813,12 +68214,6 @@ "npm-conf": "^1.1.0" } }, - "get-stdin": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", - "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", - "dev": true - }, "get-stream": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", @@ -68494,12 +68889,12 @@ "dev": true }, "html-encoding-sniffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", - "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", "dev": true, "requires": { - "whatwg-encoding": "^1.0.5" + "whatwg-encoding": "^2.0.0" } }, "html-entities": { @@ -68651,12 +69046,12 @@ "dev": true }, "http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", "dev": true, "requires": { - "@tootallnate/once": "1", + "@tootallnate/once": "2", "agent-base": "6", "debug": "4" } @@ -69617,9 +70012,9 @@ } }, "is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==" + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==" }, "is-ci": { "version": "3.0.1", @@ -70051,9 +70446,9 @@ } }, "istanbul-lib-instrument": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz", - "integrity": "sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", "dev": true, "requires": { "@babel/core": "^7.12.3", @@ -70209,83 +70604,26 @@ } }, "jest": { - "version": "27.3.1", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.3.1.tgz", - "integrity": "sha512-U2AX0AgQGd5EzMsiZpYt8HyZ+nSVIh5ujQ9CPp9EQZJMjXIiSZpJNweZl0swatKRoqHWgGKM3zaSwm4Zaz87ng==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-28.1.0.tgz", + "integrity": "sha512-TZR+tHxopPhzw3c3560IJXZWLNHgpcz1Zh0w5A65vynLGNcg/5pZ+VildAd7+XGOu6jd58XMY/HNn0IkZIXVXg==", "dev": true, "requires": { - "@jest/core": "^27.3.1", + "@jest/core": "^28.1.0", "import-local": "^3.0.2", - "jest-cli": "^27.3.1" + "jest-cli": "^28.1.0" } }, "jest-changed-files": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", - "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-28.1.3.tgz", + "integrity": "sha512-esaOfUWJXk2nfZt9SPyC8gA1kNfdKLkQWyzsMlqq8msYSlNKfmZxfRgZn4Cd4MGVUF+7v6dBs0d5TOAKa7iIiA==", "dev": true, "requires": { - "@jest/types": "^27.5.1", "execa": "^5.0.0", - "throat": "^6.0.1" + "p-limit": "^3.1.0" }, "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -70309,73 +70647,59 @@ "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, "human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } } } }, "jest-circus": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", - "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-28.1.3.tgz", + "integrity": "sha512-cZ+eS5zc79MBwt+IhQhiEp0OeBddpc1n8MBo1nMB8A7oPMKEO+Sre+wHaLJexQUj9Ya/8NOBY0RESUgYjB6fow==", "dev": true, "requires": { - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/environment": "^28.1.3", + "@jest/expect": "^28.1.3", + "@jest/test-result": "^28.1.3", + "@jest/types": "^28.1.3", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", "dedent": "^0.7.0", - "expect": "^27.5.1", "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", + "jest-each": "^28.1.3", + "jest-matcher-utils": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-runtime": "^28.1.3", + "jest-snapshot": "^28.1.3", + "jest-util": "^28.1.3", + "p-limit": "^3.1.0", + "pretty-format": "^28.1.3", "slash": "^3.0.0", - "stack-utils": "^2.0.3", - "throat": "^6.0.1" + "stack-utils": "^2.0.3" }, "dependencies": { "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", "dev": true, "requires": { + "@jest/schemas": "^28.1.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^16.0.0", + "@types/yargs": "^17.0.8", "chalk": "^4.0.0" } }, "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", "dev": true, "requires": { "@types/yargs-parser": "*" @@ -70422,12 +70746,12 @@ "dev": true }, "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", "dev": true, "requires": { - "@jest/types": "^27.5.1", + "@jest/types": "^28.1.3", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -70435,6 +70759,26 @@ "picomatch": "^2.2.3" } }, + "pretty-format": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", + "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", + "dev": true, + "requires": { + "@jest/schemas": "^28.1.3", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + } + } + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -70447,42 +70791,43 @@ } }, "jest-cli": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", - "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-28.1.3.tgz", + "integrity": "sha512-roY3kvrv57Azn1yPgdTebPAXvdR2xfezaKKYzVxZ6It/5NCxzJym6tUI5P1zkdWhfUYkxEI9uZWcQdaFLo8mJQ==", "dev": true, "requires": { - "@jest/core": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/core": "^28.1.3", + "@jest/test-result": "^28.1.3", + "@jest/types": "^28.1.3", "chalk": "^4.0.0", "exit": "^0.1.2", "graceful-fs": "^4.2.9", "import-local": "^3.0.2", - "jest-config": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", + "jest-config": "^28.1.3", + "jest-util": "^28.1.3", + "jest-validate": "^28.1.3", "prompts": "^2.0.1", - "yargs": "^16.2.0" + "yargs": "^17.3.1" }, "dependencies": { "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", "dev": true, "requires": { + "@jest/schemas": "^28.1.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^16.0.0", + "@types/yargs": "^17.0.8", "chalk": "^4.0.0" } }, "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", "dev": true, "requires": { "@types/yargs-parser": "*" @@ -70529,12 +70874,12 @@ "dev": true }, "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", "dev": true, "requires": { - "@jest/types": "^27.5.1", + "@jest/types": "^28.1.3", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -70554,54 +70899,53 @@ } }, "jest-config": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", - "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-28.1.3.tgz", + "integrity": "sha512-MG3INjByJ0J4AsNBm7T3hsuxKQqFIiRo/AUqb1q9LRKI5UU6Aar9JHbr9Ivn1TVwfUD9KirRoM/T6u8XlcQPHQ==", "dev": true, "requires": { - "@babel/core": "^7.8.0", - "@jest/test-sequencer": "^27.5.1", - "@jest/types": "^27.5.1", - "babel-jest": "^27.5.1", + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^28.1.3", + "@jest/types": "^28.1.3", + "babel-jest": "^28.1.3", "chalk": "^4.0.0", "ci-info": "^3.2.0", "deepmerge": "^4.2.2", - "glob": "^7.1.1", + "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-circus": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-jasmine2": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", + "jest-circus": "^28.1.3", + "jest-environment-node": "^28.1.3", + "jest-get-type": "^28.0.2", + "jest-regex-util": "^28.0.2", + "jest-resolve": "^28.1.3", + "jest-runner": "^28.1.3", + "jest-util": "^28.1.3", + "jest-validate": "^28.1.3", "micromatch": "^4.0.4", "parse-json": "^5.2.0", - "pretty-format": "^27.5.1", + "pretty-format": "^28.1.3", "slash": "^3.0.0", "strip-json-comments": "^3.1.1" }, "dependencies": { "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", "dev": true, "requires": { + "@jest/schemas": "^28.1.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^16.0.0", + "@types/yargs": "^17.0.8", "chalk": "^4.0.0" } }, "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", "dev": true, "requires": { "@types/yargs-parser": "*" @@ -70648,18 +70992,18 @@ "dev": true }, "jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", "dev": true }, "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", "dev": true, "requires": { - "@jest/types": "^27.5.1", + "@jest/types": "^28.1.3", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -70667,6 +71011,26 @@ "picomatch": "^2.2.3" } }, + "pretty-format": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", + "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", + "dev": true, + "requires": { + "@jest/schemas": "^28.1.3", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + } + } + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -70730,6 +71094,12 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, + "jest-get-type": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "dev": true + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -70742,44 +71112,45 @@ } }, "jest-docblock": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", - "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-28.1.1.tgz", + "integrity": "sha512-3wayBVNiOYx0cwAbl9rwm5kKFP8yHH3d/fkEaL02NPTkDojPtheGB7HZSFY4wzX+DxyrvhXz0KSCVksmCknCuA==", "dev": true, "requires": { "detect-newline": "^3.0.0" } }, "jest-each": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", - "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-28.1.3.tgz", + "integrity": "sha512-arT1z4sg2yABU5uogObVPvSlSMQlDA48owx07BDPAiasW0yYpYHYOo4HHLz9q0BVzDVU4hILFjzJw0So9aCL/g==", "dev": true, "requires": { - "@jest/types": "^27.5.1", + "@jest/types": "^28.1.3", "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1" + "jest-get-type": "^28.0.2", + "jest-util": "^28.1.3", + "pretty-format": "^28.1.3" }, "dependencies": { "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", "dev": true, "requires": { + "@jest/schemas": "^28.1.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^16.0.0", + "@types/yargs": "^17.0.8", "chalk": "^4.0.0" } }, "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", "dev": true, "requires": { "@types/yargs-parser": "*" @@ -70826,12 +71197,12 @@ "dev": true }, "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", "dev": true, "requires": { - "@jest/types": "^27.5.1", + "@jest/types": "^28.1.3", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -70839,6 +71210,26 @@ "picomatch": "^2.2.3" } }, + "pretty-format": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", + "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", + "dev": true, + "requires": { + "@jest/schemas": "^28.1.3", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + } + } + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -70851,37 +71242,39 @@ } }, "jest-environment-jsdom": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", - "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==", + "version": "28.1.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-28.1.0.tgz", + "integrity": "sha512-8n6P4xiDjNVqTWv6W6vJPuQdLx+ZiA3dbYg7YJ+DPzR+9B61K6pMVJrSs2IxfGRG4J7pyAUA5shQ9G0KEun78w==", "dev": true, "requires": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/environment": "^28.1.0", + "@jest/fake-timers": "^28.1.0", + "@jest/types": "^28.1.0", + "@types/jsdom": "^16.2.4", "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1", - "jsdom": "^16.6.0" + "jest-mock": "^28.1.0", + "jest-util": "^28.1.0", + "jsdom": "^19.0.0" }, "dependencies": { "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", "dev": true, "requires": { + "@jest/schemas": "^28.1.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^16.0.0", + "@types/yargs": "^17.0.8", "chalk": "^4.0.0" } }, "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", "dev": true, "requires": { "@types/yargs-parser": "*" @@ -70928,12 +71321,12 @@ "dev": true }, "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", "dev": true, "requires": { - "@jest/types": "^27.5.1", + "@jest/types": "^28.1.3", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -70953,36 +71346,37 @@ } }, "jest-environment-node": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", - "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-28.1.3.tgz", + "integrity": "sha512-ugP6XOhEpjAEhGYvp5Xj989ns5cB1K6ZdjBYuS30umT4CQEETaxSiPcZ/E1kFktX4GkrcM4qu07IIlDYX1gp+A==", "dev": true, "requires": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/environment": "^28.1.3", + "@jest/fake-timers": "^28.1.3", + "@jest/types": "^28.1.3", "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" + "jest-mock": "^28.1.3", + "jest-util": "^28.1.3" }, "dependencies": { "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", "dev": true, "requires": { + "@jest/schemas": "^28.1.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^16.0.0", + "@types/yargs": "^17.0.8", "chalk": "^4.0.0" } }, "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", "dev": true, "requires": { "@types/yargs-parser": "*" @@ -71029,12 +71423,12 @@ "dev": true }, "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", "dev": true, "requires": { - "@jest/types": "^27.5.1", + "@jest/types": "^28.1.3", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -71054,9 +71448,9 @@ } }, "jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", + "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", "dev": true }, "jest-haste-map": { @@ -71109,53 +71503,48 @@ } } }, - "jest-jasmine2": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", - "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==", + "jest-leak-detector": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-28.1.3.tgz", + "integrity": "sha512-WFVJhnQsiKtDEo5lG2mM0v40QWnBM+zMdHHyJs8AWZ7J0QZJS59MsyKeJHWhpBZBH32S48FOVvGyOFT1h0DlqA==", "dev": true, "requires": { - "@jest/environment": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^27.5.1", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", - "throat": "^6.0.1" + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.3" }, "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true }, - "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "pretty-format": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", + "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", "dev": true, "requires": { - "@types/yargs-parser": "*" + "@jest/schemas": "^28.1.3", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" } - }, + } + } + }, + "jest-matcher-utils": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz", + "integrity": "sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "jest-diff": "^28.1.3", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.3" + }, + "dependencies": { "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -71190,99 +71579,50 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "diff-sequences": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz", + "integrity": "sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==", + "dev": true + }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "jest-diff": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.3.tgz", + "integrity": "sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw==", "dev": true, "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-leak-detector": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", - "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", - "dev": true, - "requires": { - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - } - }, - "jest-matcher-utils": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", - "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" + "diff-sequences": "^28.1.1", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.3" } }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "pretty-format": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", + "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", "dev": true, "requires": { - "color-name": "~1.1.4" + "@jest/schemas": "^28.1.3", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + } } }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -71295,39 +71635,40 @@ } }, "jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", + "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", "dev": true, "requires": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", + "@jest/types": "^28.1.3", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", + "pretty-format": "^28.1.3", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, "dependencies": { "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", "dev": true, "requires": { + "@jest/schemas": "^28.1.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^16.0.0", + "@types/yargs": "^17.0.8", "chalk": "^4.0.0" } }, "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", "dev": true, "requires": { "@types/yargs-parser": "*" @@ -71373,6 +71714,26 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, + "pretty-format": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", + "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", + "dev": true, + "requires": { + "@jest/schemas": "^28.1.3", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + } + } + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -71385,32 +71746,33 @@ } }, "jest-mock": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", - "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.3.tgz", + "integrity": "sha512-o3J2jr6dMMWYVH4Lh/NKmDXdosrsJgi4AviS8oXLujcjpCMBb1FMsblDnOXKZKfSiHLxYub1eS0IHuRXsio9eA==", "dev": true, "requires": { - "@jest/types": "^27.5.1", + "@jest/types": "^28.1.3", "@types/node": "*" }, "dependencies": { "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", "dev": true, "requires": { + "@jest/schemas": "^28.1.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^16.0.0", + "@types/yargs": "^17.0.8", "chalk": "^4.0.0" } }, "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", "dev": true, "requires": { "@types/yargs-parser": "*" @@ -71480,40 +71842,40 @@ "dev": true }, "jest-resolve": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", - "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-28.1.3.tgz", + "integrity": "sha512-Z1W3tTjE6QaNI90qo/BJpfnvpxtaFTFw5CDgwpyE/Kz8U/06N1Hjf4ia9quUhCh39qIGWF1ZuxFiBiJQwSEYKQ==", "dev": true, "requires": { - "@jest/types": "^27.5.1", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", + "jest-haste-map": "^28.1.3", "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", + "jest-util": "^28.1.3", + "jest-validate": "^28.1.3", "resolve": "^1.20.0", "resolve.exports": "^1.1.0", "slash": "^3.0.0" }, "dependencies": { "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", "dev": true, "requires": { + "@jest/schemas": "^28.1.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^16.0.0", + "@types/yargs": "^17.0.8", "chalk": "^4.0.0" } }, "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", "dev": true, "requires": { "@types/yargs-parser": "*" @@ -71560,49 +71922,38 @@ "dev": true }, "jest-haste-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", - "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz", + "integrity": "sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA==", "dev": true, "requires": { - "@jest/types": "^27.5.1", - "@types/graceful-fs": "^4.1.2", + "@jest/types": "^28.1.3", + "@types/graceful-fs": "^4.1.3", "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", "fsevents": "^2.3.2", "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.1.3", + "jest-worker": "^28.1.3", "micromatch": "^4.0.4", - "walker": "^1.0.7" + "walker": "^1.0.8" } }, "jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", "dev": true }, - "jest-serializer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", - "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", - "dev": true, - "requires": { - "@types/node": "*", - "graceful-fs": "^4.2.9" - } - }, "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", "dev": true, "requires": { - "@jest/types": "^27.5.1", + "@jest/types": "^28.1.3", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -71622,164 +71973,93 @@ } }, "jest-resolve-dependencies": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", - "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.3.tgz", + "integrity": "sha512-qa0QO2Q0XzQoNPouMbCc7Bvtsem8eQgVPNkwn9LnS+R2n8DaVDPL/U1gngC0LTl1RYXJU0uJa2BMC2DbTfFrHA==", "dev": true, "requires": { - "@jest/types": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-snapshot": "^27.5.1" + "jest-regex-util": "^28.0.2", + "jest-snapshot": "^28.1.3" }, "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, "jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } } } }, "jest-runner": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", - "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-28.1.3.tgz", + "integrity": "sha512-GkMw4D/0USd62OVO0oEgjn23TM+YJa2U2Wu5zz9xsQB1MxWKDOlrnykPxnMsN0tnJllfLPinHTka61u0QhaxBA==", "dev": true, "requires": { - "@jest/console": "^27.5.1", - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/console": "^28.1.3", + "@jest/environment": "^28.1.3", + "@jest/test-result": "^28.1.3", + "@jest/transform": "^28.1.3", + "@jest/types": "^28.1.3", "@types/node": "*", "chalk": "^4.0.0", - "emittery": "^0.8.1", + "emittery": "^0.10.2", "graceful-fs": "^4.2.9", - "jest-docblock": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-leak-detector": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "source-map-support": "^0.5.6", - "throat": "^6.0.1" + "jest-docblock": "^28.1.1", + "jest-environment-node": "^28.1.3", + "jest-haste-map": "^28.1.3", + "jest-leak-detector": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-resolve": "^28.1.3", + "jest-runtime": "^28.1.3", + "jest-util": "^28.1.3", + "jest-watcher": "^28.1.3", + "jest-worker": "^28.1.3", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" }, "dependencies": { "@jest/transform": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", - "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-28.1.3.tgz", + "integrity": "sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA==", "dev": true, "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.5.1", + "@babel/core": "^7.11.6", + "@jest/types": "^28.1.3", + "@jridgewell/trace-mapping": "^0.3.13", "babel-plugin-istanbul": "^6.1.1", "chalk": "^4.0.0", "convert-source-map": "^1.4.0", "fast-json-stable-stringify": "^2.0.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-util": "^27.5.1", + "jest-haste-map": "^28.1.3", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.1.3", "micromatch": "^4.0.4", "pirates": "^4.0.4", "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" + "write-file-atomic": "^4.0.1" } }, "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", "dev": true, "requires": { + "@jest/schemas": "^28.1.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^16.0.0", + "@types/yargs": "^17.0.8", "chalk": "^4.0.0" } }, "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", "dev": true, "requires": { "@types/yargs-parser": "*" @@ -71826,49 +72106,38 @@ "dev": true }, "jest-haste-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", - "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz", + "integrity": "sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA==", "dev": true, "requires": { - "@jest/types": "^27.5.1", - "@types/graceful-fs": "^4.1.2", + "@jest/types": "^28.1.3", + "@types/graceful-fs": "^4.1.3", "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", "fsevents": "^2.3.2", "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.1.3", + "jest-worker": "^28.1.3", "micromatch": "^4.0.4", - "walker": "^1.0.7" + "walker": "^1.0.8" } }, "jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", "dev": true }, - "jest-serializer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", - "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", - "dev": true, - "requires": { - "@types/node": "*", - "graceful-fs": "^4.2.9" - } - }, "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", "dev": true, "requires": { - "@jest/types": "^27.5.1", + "@jest/types": "^28.1.3", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -71876,6 +72145,16 @@ "picomatch": "^2.2.3" } }, + "source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -71884,79 +72163,90 @@ "requires": { "has-flag": "^4.0.0" } + }, + "write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + } } } }, "jest-runtime": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", - "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", - "dev": true, - "requires": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/globals": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-28.1.3.tgz", + "integrity": "sha512-NU+881ScBQQLc1JHG5eJGU7Ui3kLKrmwCPPtYsJtBykixrM2OhVQlpMmFWJjMyDfdkGgBMNjXCGB/ebzsgNGQw==", + "dev": true, + "requires": { + "@jest/environment": "^28.1.3", + "@jest/fake-timers": "^28.1.3", + "@jest/globals": "^28.1.3", + "@jest/source-map": "^28.1.2", + "@jest/test-result": "^28.1.3", + "@jest/transform": "^28.1.3", + "@jest/types": "^28.1.3", "chalk": "^4.0.0", "cjs-module-lexer": "^1.0.0", "collect-v8-coverage": "^1.0.0", "execa": "^5.0.0", "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", + "jest-haste-map": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-mock": "^28.1.3", + "jest-regex-util": "^28.0.2", + "jest-resolve": "^28.1.3", + "jest-snapshot": "^28.1.3", + "jest-util": "^28.1.3", "slash": "^3.0.0", "strip-bom": "^4.0.0" }, "dependencies": { "@jest/transform": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", - "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-28.1.3.tgz", + "integrity": "sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA==", "dev": true, "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.5.1", + "@babel/core": "^7.11.6", + "@jest/types": "^28.1.3", + "@jridgewell/trace-mapping": "^0.3.13", "babel-plugin-istanbul": "^6.1.1", "chalk": "^4.0.0", "convert-source-map": "^1.4.0", "fast-json-stable-stringify": "^2.0.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-util": "^27.5.1", + "jest-haste-map": "^28.1.3", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.1.3", "micromatch": "^4.0.4", "pirates": "^4.0.4", "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" + "write-file-atomic": "^4.0.1" } }, "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", "dev": true, "requires": { + "@jest/schemas": "^28.1.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^16.0.0", + "@types/yargs": "^17.0.8", "chalk": "^4.0.0" } }, "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", "dev": true, "requires": { "@types/yargs-parser": "*" @@ -72032,49 +72322,38 @@ "dev": true }, "jest-haste-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", - "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz", + "integrity": "sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA==", "dev": true, "requires": { - "@jest/types": "^27.5.1", - "@types/graceful-fs": "^4.1.2", + "@jest/types": "^28.1.3", + "@types/graceful-fs": "^4.1.3", "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", "fsevents": "^2.3.2", "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.1.3", + "jest-worker": "^28.1.3", "micromatch": "^4.0.4", - "walker": "^1.0.7" + "walker": "^1.0.8" } }, "jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", "dev": true }, - "jest-serializer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", - "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", - "dev": true, - "requires": { - "@types/node": "*", - "graceful-fs": "^4.2.9" - } - }, "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", "dev": true, "requires": { - "@jest/types": "^27.5.1", + "@jest/types": "^28.1.3", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -72090,6 +72369,16 @@ "requires": { "has-flag": "^4.0.0" } + }, + "write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + } } } }, @@ -72104,75 +72393,77 @@ } }, "jest-snapshot": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", - "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-28.1.3.tgz", + "integrity": "sha512-4lzMgtiNlc3DU/8lZfmqxN3AYD6GGLbl+72rdBpXvcV+whX7mDrREzkPdp2RnmfIiWBg1YbuFSkXduF2JcafJg==", "dev": true, "requires": { - "@babel/core": "^7.7.2", + "@babel/core": "^7.11.6", "@babel/generator": "^7.7.2", "@babel/plugin-syntax-typescript": "^7.7.2", "@babel/traverse": "^7.7.2", - "@babel/types": "^7.0.0", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/babel__traverse": "^7.0.4", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^28.1.3", + "@jest/transform": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/babel__traverse": "^7.0.6", "@types/prettier": "^2.1.5", "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", - "expect": "^27.5.1", + "expect": "^28.1.3", "graceful-fs": "^4.2.9", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", + "jest-diff": "^28.1.3", + "jest-get-type": "^28.0.2", + "jest-haste-map": "^28.1.3", + "jest-matcher-utils": "^28.1.3", + "jest-message-util": "^28.1.3", + "jest-util": "^28.1.3", "natural-compare": "^1.4.0", - "pretty-format": "^27.5.1", - "semver": "^7.3.2" + "pretty-format": "^28.1.3", + "semver": "^7.3.5" }, "dependencies": { "@jest/transform": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", - "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-28.1.3.tgz", + "integrity": "sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA==", "dev": true, "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.5.1", + "@babel/core": "^7.11.6", + "@jest/types": "^28.1.3", + "@jridgewell/trace-mapping": "^0.3.13", "babel-plugin-istanbul": "^6.1.1", "chalk": "^4.0.0", "convert-source-map": "^1.4.0", "fast-json-stable-stringify": "^2.0.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-util": "^27.5.1", + "jest-haste-map": "^28.1.3", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.1.3", "micromatch": "^4.0.4", "pirates": "^4.0.4", "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" + "write-file-atomic": "^4.0.1" } }, "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", "dev": true, "requires": { + "@jest/schemas": "^28.1.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^16.0.0", + "@types/yargs": "^17.0.8", "chalk": "^4.0.0" } }, "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", "dev": true, "requires": { "@types/yargs-parser": "*" @@ -72212,56 +72503,63 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "diff-sequences": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz", + "integrity": "sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==", + "dev": true + }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, + "jest-diff": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.3.tgz", + "integrity": "sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^28.1.1", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.3" + } + }, "jest-haste-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", - "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz", + "integrity": "sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA==", "dev": true, "requires": { - "@jest/types": "^27.5.1", - "@types/graceful-fs": "^4.1.2", + "@jest/types": "^28.1.3", + "@types/graceful-fs": "^4.1.3", "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", "fsevents": "^2.3.2", "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", + "jest-regex-util": "^28.0.2", + "jest-util": "^28.1.3", + "jest-worker": "^28.1.3", "micromatch": "^4.0.4", - "walker": "^1.0.7" + "walker": "^1.0.8" } }, "jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", "dev": true }, - "jest-serializer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", - "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", - "dev": true, - "requires": { - "@types/node": "*", - "graceful-fs": "^4.2.9" - } - }, "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", "dev": true, "requires": { - "@jest/types": "^27.5.1", + "@jest/types": "^28.1.3", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -72269,10 +72567,30 @@ "picomatch": "^2.2.3" } }, + "pretty-format": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", + "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", + "dev": true, + "requires": { + "@jest/schemas": "^28.1.3", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + } + } + }, "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -72286,9 +72604,25 @@ "requires": { "has-flag": "^4.0.0" } + }, + "write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + } } } }, + "jest-transformer-svg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/jest-transformer-svg/-/jest-transformer-svg-2.0.0.tgz", + "integrity": "sha512-+f6er7UZTiHTeel9nma1i0NTAU8AjbEvhK2RYUoMxTNihwo98z2rrrDBIbppZI6ACDzeul3bhRmI9M6d25J/Nw==", + "dev": true + }, "jest-util": { "version": "26.6.2", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", @@ -72370,36 +72704,37 @@ } }, "jest-validate": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", - "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-28.1.3.tgz", + "integrity": "sha512-SZbOGBWEsaTxBGCOpsRWlXlvNkvTkY0XxRfh7zYmvd8uL5Qzyg0CHAXiXKROflh801quA6+/DsT4ODDthOC/OA==", "dev": true, "requires": { - "@jest/types": "^27.5.1", + "@jest/types": "^28.1.3", "camelcase": "^6.2.0", "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", + "jest-get-type": "^28.0.2", "leven": "^3.1.0", - "pretty-format": "^27.5.1" + "pretty-format": "^28.1.3" }, "dependencies": { "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", "dev": true, "requires": { + "@jest/schemas": "^28.1.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^16.0.0", + "@types/yargs": "^17.0.8", "chalk": "^4.0.0" } }, "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", "dev": true, "requires": { "@types/yargs-parser": "*" @@ -72445,6 +72780,26 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, + "pretty-format": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", + "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", + "dev": true, + "requires": { + "@jest/schemas": "^28.1.3", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + } + } + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -72457,37 +72812,39 @@ } }, "jest-watcher": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", - "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz", + "integrity": "sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==", "dev": true, "requires": { - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/test-result": "^28.1.3", + "@jest/types": "^28.1.3", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "jest-util": "^27.5.1", + "emittery": "^0.10.2", + "jest-util": "^28.1.3", "string-length": "^4.0.1" }, "dependencies": { "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", "dev": true, "requires": { + "@jest/schemas": "^28.1.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "@types/yargs": "^16.0.0", + "@types/yargs": "^17.0.8", "chalk": "^4.0.0" } }, "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "version": "17.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", + "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", "dev": true, "requires": { "@types/yargs-parser": "*" @@ -72534,12 +72891,12 @@ "dev": true }, "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", "dev": true, "requires": { - "@jest/types": "^27.5.1", + "@jest/types": "^28.1.3", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -72559,9 +72916,9 @@ } }, "jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", + "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", "dev": true, "requires": { "@types/node": "*", @@ -72587,9 +72944,9 @@ } }, "joi": { - "version": "17.6.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.6.0.tgz", - "integrity": "sha512-OX5dG6DTbcr/kbMFj0KGYxuew69HPcAE3K/sZpEV2nP6e/j/C0HV+HNiBPCASxdx5T7DMoa0s8UeHWMnb6n2zw==", + "version": "17.6.3", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.6.3.tgz", + "integrity": "sha512-YlQsIaS9MHYekzf1Qe11LjTkNzx9qhYluK3172z38RxYoAUf82XMX1p1DG1H4Wtk2ED/vPdSn9OggqtDu+aTow==", "dev": true, "requires": { "@hapi/hoek": "^9.0.0", @@ -72604,6 +72961,12 @@ "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==" }, + "js-sdsl": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.5.tgz", + "integrity": "sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==", + "dev": true + }, "js-sha3": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", @@ -72643,23 +73006,23 @@ "dev": true }, "jsdom": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", - "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-19.0.0.tgz", + "integrity": "sha512-RYAyjCbxy/vri/CfnjUWJQQtZ3LKlLnDqj+9XLNnJPgEGeirZs3hllKR20re8LUZ6o1b1X4Jat+Qd26zmP41+A==", "dev": true, "requires": { "abab": "^2.0.5", - "acorn": "^8.2.4", + "acorn": "^8.5.0", "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", + "cssom": "^0.5.0", "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", - "domexception": "^2.0.1", + "data-urls": "^3.0.1", + "decimal.js": "^10.3.1", + "domexception": "^4.0.0", "escodegen": "^2.0.0", - "form-data": "^3.0.0", - "html-encoding-sniffer": "^2.0.1", - "http-proxy-agent": "^4.0.1", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy-agent": "^5.0.0", "https-proxy-agent": "^5.0.0", "is-potential-custom-element-name": "^1.0.1", "nwsapi": "^2.2.0", @@ -72668,13 +73031,13 @@ "symbol-tree": "^3.2.4", "tough-cookie": "^4.0.0", "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.5.0", - "ws": "^7.4.6", - "xml-name-validator": "^3.0.0" + "w3c-xmlserializer": "^3.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^10.0.0", + "ws": "^8.2.3", + "xml-name-validator": "^4.0.0" }, "dependencies": { "acorn": { @@ -72683,6 +73046,17 @@ "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", "dev": true }, + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", @@ -72706,6 +73080,12 @@ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", "dev": true + }, + "ws": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.9.0.tgz", + "integrity": "sha512-Ja7nszREasGaYUYCI2k4lCKIRTt+y7XuqVoHR44YpI49TtryyqbqvDMn5eqfW7e6HzTukDRIsXqzVHScqRcafg==", + "dev": true } } }, @@ -72823,9 +73203,9 @@ } }, "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha512-trvBk1ki43VZptdBI5rIlG4YOzyeH/WefQt5rj1grasPn4iiZWKet8nkgc4GlsAylaztn0qZfUYOiTsASJFdNA==" + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz", + "integrity": "sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==" }, "jsonparse": { "version": "1.3.1", @@ -72865,9 +73245,9 @@ }, "dependencies": { "csstype": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz", - "integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" } } }, @@ -73277,9 +73657,9 @@ "dev": true }, "commander": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.4.0.tgz", - "integrity": "sha512-sRPT+umqkz90UA8M1yqYfnHlZA7fF6nSphDtxeywPZ49ysjxDQybzk13CL+mXekDRG92skbcqCLVovuCusNmFw==", + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.4.1.tgz", + "integrity": "sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw==", "dev": true }, "execa": { @@ -73408,9 +73788,9 @@ "dev": true }, "yaml": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.1.1.tgz", - "integrity": "sha512-o96x3OPo8GjWeSLF+wOAbrPfhFOGY0W00GNaxCDv+9hkcDJEnev1yh8S7pgHF0ik6zc8sQLuL8hjHjJULZp8bw==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.1.3.tgz", + "integrity": "sha512-AacA8nRULjKMX2DvWvOAdBZMOfQlypSFkjcOcu9FalllIDJ1kvlREzcdIZmidQUqqeMv7jorHjq2HlLv/+c2lg==", "dev": true } } @@ -73493,6 +73873,39 @@ } } }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + }, + "dependencies": { + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", + "dev": true, + "requires": { + "is-utf8": "^0.2.0" + } + } + } + }, "loader-runner": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", @@ -74196,28 +74609,6 @@ "repeating": "^2.0.0" } }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - } - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, "path-exists": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", @@ -74269,15 +74660,6 @@ "strip-indent": "^1.0.1" } }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", - "dev": true, - "requires": { - "is-utf8": "^0.2.0" - } - }, "strip-indent": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", @@ -74437,9 +74819,9 @@ } }, "minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==" }, "minipass": { "version": "3.3.4", @@ -74731,9 +75113,9 @@ "integrity": "sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==" }, "nan": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz", - "integrity": "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==" + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", + "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==" }, "nano-base32": { "version": "1.0.1", @@ -74941,6 +75323,12 @@ } } }, + "next-router-mock": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/next-router-mock/-/next-router-mock-0.7.4.tgz", + "integrity": "sha512-phYLFXOQ9klg6gxVRJJdH0QoD+5bAbAdDYM9O3YdGZ+IFEbvIoIns+o9SoSfTkCjzoU2R1ARoFc8WHp0+hnD8A==", + "dev": true + }, "next-tick": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", @@ -76382,9 +76770,9 @@ }, "dependencies": { "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -77302,9 +77690,9 @@ } }, "react-remove-scroll-bar": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.3.tgz", - "integrity": "sha512-i9GMNWwpz8XpUpQ6QlevUtFjHGqnPG4Hxs+wlIJntu/xcsZVEpJcIV71K3ZkqNy2q3GfgvkD7y6t/Sv8ofYSbw==", + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.4.tgz", + "integrity": "sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==", "requires": { "react-style-singleton": "^2.2.1", "tslib": "^2.0.0" @@ -77576,9 +77964,9 @@ "dev": true }, "regenerate-unicode-properties": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz", - "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", "dev": true, "requires": { "regenerate": "^1.4.2" @@ -77645,15 +78033,15 @@ "dev": true }, "regexpu-core": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.1.0.tgz", - "integrity": "sha512-bb6hk+xWd2PEOkj5It46A16zFMs2mv86Iwpdu94la4S3sJ7C973h2dHpYKwIBGaWSO7cIRJ+UX0IeMaWcO4qwA==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.1.tgz", + "integrity": "sha512-HrnlNtpvqP1Xkb28tMhBUO2EbyUHdQlsnlAhzWcwHy8WJR53UWr7/MAvqrsQKMbV4qdpv03oTMG8iIhfsPFktQ==", "dev": true, "requires": { "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.0.1", - "regjsgen": "^0.6.0", - "regjsparser": "^0.8.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsgen": "^0.7.1", + "regjsparser": "^0.9.1", "unicode-match-property-ecmascript": "^2.0.0", "unicode-match-property-value-ecmascript": "^2.0.0" } @@ -77678,15 +78066,15 @@ } }, "regjsgen": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", - "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz", + "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==", "dev": true }, "regjsparser": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz", - "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==", + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", "dev": true, "requires": { "jsesc": "~0.5.0" @@ -78163,9 +78551,9 @@ }, "dependencies": { "ws": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.8.1.tgz", - "integrity": "sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==" + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.9.0.tgz", + "integrity": "sha512-Ja7nszREasGaYUYCI2k4lCKIRTt+y7XuqVoHR44YpI49TtryyqbqvDMn5eqfW7e6HzTukDRIsXqzVHScqRcafg==" } } }, @@ -78213,9 +78601,9 @@ "dev": true }, "rxjs": { - "version": "7.5.6", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.6.tgz", - "integrity": "sha512-dnyv2/YsXhnm461G+R/Pe5bWP41Nm6LBXEYWI6eiFP4fiwx6WRI/CD0zbdVAudd9xwLEF2IDcKXLHit0FYjUzw==", + "version": "7.5.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.7.tgz", + "integrity": "sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA==", "dev": true, "requires": { "tslib": "^2.1.0" @@ -78248,6 +78636,16 @@ "regexp-tree": "~0.1.1" } }, + "safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + } + }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -79044,9 +79442,9 @@ }, "dependencies": { "ansi-styles": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.0.tgz", - "integrity": "sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true } } @@ -79334,30 +79732,6 @@ "graceful-fs": "^4.1.6" } }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", - "dev": true, - "optional": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - } - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", - "dev": true, - "optional": true, - "requires": { - "error-ex": "^1.2.0" - } - }, "path-exists": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", @@ -79456,16 +79830,6 @@ "ansi-regex": "^2.0.0" } }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", - "dev": true, - "optional": true, - "requires": { - "is-utf8": "^0.2.0" - } - }, "which-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", @@ -80018,6 +80382,11 @@ "readable-stream": "^2.0.2" } }, + "streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==" + }, "strict-uri-encode": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", @@ -80952,9 +81321,9 @@ "dev": true }, "tape": { - "version": "4.16.0", - "resolved": "https://registry.npmjs.org/tape/-/tape-4.16.0.tgz", - "integrity": "sha512-mBlqYFr2mHysgCFXAuSarIQ+ffhielpb7a5/IbeOhMaLnQYhkJLUm6CwO1RszWeHRxnIpMessZ3xL2Cfo94BWw==", + "version": "4.16.1", + "resolved": "https://registry.npmjs.org/tape/-/tape-4.16.1.tgz", + "integrity": "sha512-U4DWOikL5gBYUrlzx+J0oaRedm2vKLFbtA/+BRAXboGWpXO7bMP8ddxlq3Cse2bvXFQ0jZMOj6kk3546mvCdFg==", "dev": true, "requires": { "call-bind": "~1.0.2", @@ -81283,9 +81652,9 @@ } }, "terser": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.15.0.tgz", - "integrity": "sha512-L1BJiXVmheAQQy+as0oF3Pwtlo4s3Wi1X2zNZ2NxOB4wx9bdS9Vk67XQENLFdLYGCK/Z2di53mTj/hBafR+dTA==", + "version": "5.15.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.15.1.tgz", + "integrity": "sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw==", "dev": true, "requires": { "@jridgewell/source-map": "^0.3.2", @@ -81325,12 +81694,6 @@ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, - "throat": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", - "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", - "dev": true - }, "throttle-debounce": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-2.3.0.tgz", @@ -81522,9 +81885,9 @@ } }, "tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", "dev": true, "requires": { "punycode": "^2.1.1" @@ -81881,9 +82244,9 @@ "dev": true }, "uglify-js": { - "version": "3.17.0", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.0.tgz", - "integrity": "sha512-aTeNPVmgIMPpm1cxXr2Q/nEbvkmV8yq66F3om7X3P/cvOXQ0TMQ64Wk63iyT1gPlmdmGzjGpyLh1f3y8MZWXGg==", + "version": "3.17.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.3.tgz", + "integrity": "sha512-JmMFDME3iufZnBpyKL+uS78LRiC+mK55zWfM5f/pWBJfpOttXAqYfdDGRukYhJuyRinvPVAtUhvy7rlDybNtFg==", "dev": true, "optional": true }, @@ -81938,9 +82301,12 @@ "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==" }, "undici": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.10.0.tgz", - "integrity": "sha512-c8HsD3IbwmjjbLvoZuRI26TZic+TSEe8FPMLLOkN1AfYRhdjnKBU6yL+IwcSCbdZiX4e5t0lfMDLDCqj4Sq70g==" + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.11.0.tgz", + "integrity": "sha512-oWjWJHzFet0Ow4YZBkyiJwiK5vWqEYoH7BINzJAJOLedZ++JpAlCbUktW2GQ2DS2FpKmxD/JMtWUUWl1BtghGw==", + "requires": { + "busboy": "^1.6.0" + } }, "unfetch": { "version": "4.2.0", @@ -81981,9 +82347,9 @@ "dev": true }, "unicode-property-aliases-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", - "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", "dev": true }, "unified": { @@ -82203,9 +82569,9 @@ "optional": true }, "update-browserslist-db": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.7.tgz", - "integrity": "sha512-iN/XYesmZ2RmmWAiI4Z5rq0YqSiv0brj9Ce9CfhNE4xIW2h+MFxcgkxIzZ+ShkFPUkjU3gQ+3oypadD3RAMtrg==", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", "requires": { "escalade": "^3.1.1", "picocolors": "^1.0.0" @@ -82443,22 +82809,14 @@ "dev": true }, "v8-to-istanbul": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", - "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz", + "integrity": "sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==", "dev": true, "requires": { + "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" - }, - "dependencies": { - "source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true - } + "convert-source-map": "^1.6.0" } }, "validate-npm-package-license": { @@ -82558,12 +82916,12 @@ } }, "w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz", + "integrity": "sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==", "dev": true, "requires": { - "xml-name-validator": "^3.0.0" + "xml-name-validator": "^4.0.0" } }, "wagmi": { @@ -83059,18 +83417,18 @@ "dev": true }, "web3": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3/-/web3-1.7.5.tgz", - "integrity": "sha512-3jHZTWyXt975AOXgnZKayiSWDLpoSKk9fZtLk1hURQtt7AdSbXPT8AK9ooBCm0Dt3GYaOeNcHGaiHC3gtyqhLg==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/web3/-/web3-1.8.0.tgz", + "integrity": "sha512-sldr9stK/SALSJTgI/8qpnDuBJNMGjVR84hJ+AcdQ+MLBGLMGsCDNubCoyO6qgk1/Y9SQ7ignegOI/7BPLoiDA==", "dev": true, "requires": { - "web3-bzz": "1.7.5", - "web3-core": "1.7.5", - "web3-eth": "1.7.5", - "web3-eth-personal": "1.7.5", - "web3-net": "1.7.5", - "web3-shh": "1.7.5", - "web3-utils": "1.7.5" + "web3-bzz": "1.8.0", + "web3-core": "1.8.0", + "web3-eth": "1.8.0", + "web3-eth-personal": "1.8.0", + "web3-net": "1.8.0", + "web3-shh": "1.8.0", + "web3-utils": "1.8.0" }, "dependencies": { "ethereumjs-util": { @@ -83087,9 +83445,9 @@ } }, "web3-utils": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.7.5.tgz", - "integrity": "sha512-9AqNOziQky4wNQadEwEfHiBdOZqopIHzQQVzmvvv6fJwDSMhP+khqmAZC7YTiGjs0MboyZ8tWNivqSO1699XQw==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.0.tgz", + "integrity": "sha512-7nUIl7UWpLVka2f09CMbKOSEvorvHnaugIabU4mj7zfMvm0tSByLcEu3eyV9qgS11qxxLuOkzBIwCstTflhmpQ==", "dev": true, "requires": { "bn.js": "^5.2.1", @@ -83104,9 +83462,9 @@ } }, "web3-bzz": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.7.5.tgz", - "integrity": "sha512-Z53sY0YK/losqjJncmL4vP0zZI9r6tiXg6o7R6e1JD2Iy7FH3serQvU+qXmPjqEBzsnhf8wTG+YcBPB3RHpr0Q==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.8.0.tgz", + "integrity": "sha512-caDtdKeLi7+2Vb+y+cq2yyhkNjnxkFzVW0j1DtemarBg3dycG1iEl75CVQMLNO6Wkg+HH9tZtRnUyFIe5LIUeQ==", "dev": true, "requires": { "@types/node": "^12.12.6", @@ -83277,18 +83635,18 @@ } }, "web3-core": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.7.5.tgz", - "integrity": "sha512-UgOWXZr1fR/3cUQJKWbfMwRxj1/N7o6RSd/dHqdXBlOD+62EjNZItFmLRg5veq5kp9YfXzrNw9bnDkXfsL+nKQ==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.8.0.tgz", + "integrity": "sha512-9sCA+Z02ci6zoY2bAquFiDjujRwmSKHiSGi4B8IstML8okSytnzXk1izHYSynE7ahIkguhjWAuXFvX76F5rAbA==", "dev": true, "requires": { "@types/bn.js": "^5.1.0", "@types/node": "^12.12.6", "bignumber.js": "^9.0.0", - "web3-core-helpers": "1.7.5", - "web3-core-method": "1.7.5", - "web3-core-requestmanager": "1.7.5", - "web3-utils": "1.7.5" + "web3-core-helpers": "1.8.0", + "web3-core-method": "1.8.0", + "web3-core-requestmanager": "1.8.0", + "web3-utils": "1.8.0" }, "dependencies": { "@types/node": { @@ -83311,9 +83669,9 @@ } }, "web3-utils": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.7.5.tgz", - "integrity": "sha512-9AqNOziQky4wNQadEwEfHiBdOZqopIHzQQVzmvvv6fJwDSMhP+khqmAZC7YTiGjs0MboyZ8tWNivqSO1699XQw==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.0.tgz", + "integrity": "sha512-7nUIl7UWpLVka2f09CMbKOSEvorvHnaugIabU4mj7zfMvm0tSByLcEu3eyV9qgS11qxxLuOkzBIwCstTflhmpQ==", "dev": true, "requires": { "bn.js": "^5.2.1", @@ -83328,13 +83686,13 @@ } }, "web3-core-helpers": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.7.5.tgz", - "integrity": "sha512-lDDjTks6Q6aNUO87RYrY2xub3UWTKr/RIWxpHJODEqkLxZS1dWdyliJ6aIx3031VQwsNT5HE7NvABe/t0p3iDQ==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.8.0.tgz", + "integrity": "sha512-nMAVwZB3rEp/khHI2BvFy0e/xCryf501p5NGjswmJtEM+Zrd3Biaw52JrB1qAZZIzCA8cmLKaOgdfamoDOpWdw==", "dev": true, "requires": { - "web3-eth-iban": "1.7.5", - "web3-utils": "1.7.5" + "web3-eth-iban": "1.8.0", + "web3-utils": "1.8.0" }, "dependencies": { "ethereumjs-util": { @@ -83351,9 +83709,9 @@ } }, "web3-utils": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.7.5.tgz", - "integrity": "sha512-9AqNOziQky4wNQadEwEfHiBdOZqopIHzQQVzmvvv6fJwDSMhP+khqmAZC7YTiGjs0MboyZ8tWNivqSO1699XQw==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.0.tgz", + "integrity": "sha512-7nUIl7UWpLVka2f09CMbKOSEvorvHnaugIabU4mj7zfMvm0tSByLcEu3eyV9qgS11qxxLuOkzBIwCstTflhmpQ==", "dev": true, "requires": { "bn.js": "^5.2.1", @@ -83368,16 +83726,16 @@ } }, "web3-core-method": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.7.5.tgz", - "integrity": "sha512-ApTvq1Llzlbxmy0n4L7QaE6NodIsR80VJqk8qN4kLg30SGznt/pNJFebryLI2kpyDmxSgj1TjEWzmHJBp6FhYg==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.8.0.tgz", + "integrity": "sha512-c94RAzo3gpXwf2rf8rL8C77jOzNWF4mXUoUfZYYsiY35cJFd46jQDPI00CB5+ZbICTiA5mlVzMj4e7jAsTqiLA==", "dev": true, "requires": { "@ethersproject/transactions": "^5.6.2", - "web3-core-helpers": "1.7.5", - "web3-core-promievent": "1.7.5", - "web3-core-subscriptions": "1.7.5", - "web3-utils": "1.7.5" + "web3-core-helpers": "1.8.0", + "web3-core-promievent": "1.8.0", + "web3-core-subscriptions": "1.8.0", + "web3-utils": "1.8.0" }, "dependencies": { "ethereumjs-util": { @@ -83394,9 +83752,9 @@ } }, "web3-utils": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.7.5.tgz", - "integrity": "sha512-9AqNOziQky4wNQadEwEfHiBdOZqopIHzQQVzmvvv6fJwDSMhP+khqmAZC7YTiGjs0MboyZ8tWNivqSO1699XQw==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.0.tgz", + "integrity": "sha512-7nUIl7UWpLVka2f09CMbKOSEvorvHnaugIabU4mj7zfMvm0tSByLcEu3eyV9qgS11qxxLuOkzBIwCstTflhmpQ==", "dev": true, "requires": { "bn.js": "^5.2.1", @@ -83411,9 +83769,9 @@ } }, "web3-core-promievent": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.7.5.tgz", - "integrity": "sha512-uZ1VRErVuhiLtHlyt3oEH/JSvAf6bWPndChHR9PG7i1Zfqm6ZVCeM91ICTPmiL8ddsGQOxASpnJk4vhApcTIww==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.8.0.tgz", + "integrity": "sha512-FGLyjAuOaAQ+ZhV6iuw9tg/9WvIkSZXKHQ4mdTyQ8MxVraOtFivOCbuLLsGgapfHYX+RPxsc1j1YzQjKoupagQ==", "dev": true, "requires": { "eventemitter3": "4.0.4" @@ -83428,16 +83786,16 @@ } }, "web3-core-requestmanager": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.7.5.tgz", - "integrity": "sha512-3KpfxW/wVH4mgwWEsSJGHKrtRVoijWlDxtUrm17xgtqRNZ2mFolifKnHAUKa0fY48C9CrxmcCiMIi3W4G6WYRw==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.8.0.tgz", + "integrity": "sha512-2AoYCs3Owl5foWcf4uKPONyqFygSl9T54L8b581U16nsUirjhoTUGK/PBhMDVcLCmW4QQmcY5A8oPFpkQc1TTg==", "dev": true, "requires": { "util": "^0.12.0", - "web3-core-helpers": "1.7.5", - "web3-providers-http": "1.7.5", - "web3-providers-ipc": "1.7.5", - "web3-providers-ws": "1.7.5" + "web3-core-helpers": "1.8.0", + "web3-providers-http": "1.8.0", + "web3-providers-ipc": "1.8.0", + "web3-providers-ws": "1.8.0" }, "dependencies": { "util": { @@ -83457,13 +83815,13 @@ } }, "web3-core-subscriptions": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.7.5.tgz", - "integrity": "sha512-YK6utQ7Wwjbe4XZOIA8quWGBPi1lFDS1A+jQYwxKKrCvm6BloBNc3FhvrcSYlDhLe/kOy8+2Je8i9amndgT4ww==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.8.0.tgz", + "integrity": "sha512-7lHVRzDdg0+Gcog55lG6Q3D8JV+jN+4Ly6F8cSn9xFUAwOkdbgdWsjknQG7t7CDWy21DQkvdiY2BJF8S68AqOA==", "dev": true, "requires": { "eventemitter3": "4.0.4", - "web3-core-helpers": "1.7.5" + "web3-core-helpers": "1.8.0" }, "dependencies": { "eventemitter3": { @@ -83475,23 +83833,23 @@ } }, "web3-eth": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.7.5.tgz", - "integrity": "sha512-BucjvqZyDWYkGlsFX+OnOBub0YutlC1KZiNGibdmvtNX0NQK+8iw1uzAoL9yTTwCSszL7lnkFe8N+HCOl9B4Dw==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.8.0.tgz", + "integrity": "sha512-hist52os3OT4TQFB/GxPSMxTh3995sz6LPvQpPvj7ktSbpg9RNSFaSsPlCT63wUAHA3PZb1FemkAIeQM5t72Lw==", "dev": true, "requires": { - "web3-core": "1.7.5", - "web3-core-helpers": "1.7.5", - "web3-core-method": "1.7.5", - "web3-core-subscriptions": "1.7.5", - "web3-eth-abi": "1.7.5", - "web3-eth-accounts": "1.7.5", - "web3-eth-contract": "1.7.5", - "web3-eth-ens": "1.7.5", - "web3-eth-iban": "1.7.5", - "web3-eth-personal": "1.7.5", - "web3-net": "1.7.5", - "web3-utils": "1.7.5" + "web3-core": "1.8.0", + "web3-core-helpers": "1.8.0", + "web3-core-method": "1.8.0", + "web3-core-subscriptions": "1.8.0", + "web3-eth-abi": "1.8.0", + "web3-eth-accounts": "1.8.0", + "web3-eth-contract": "1.8.0", + "web3-eth-ens": "1.8.0", + "web3-eth-iban": "1.8.0", + "web3-eth-personal": "1.8.0", + "web3-net": "1.8.0", + "web3-utils": "1.8.0" }, "dependencies": { "ethereumjs-util": { @@ -83508,9 +83866,9 @@ } }, "web3-utils": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.7.5.tgz", - "integrity": "sha512-9AqNOziQky4wNQadEwEfHiBdOZqopIHzQQVzmvvv6fJwDSMhP+khqmAZC7YTiGjs0MboyZ8tWNivqSO1699XQw==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.0.tgz", + "integrity": "sha512-7nUIl7UWpLVka2f09CMbKOSEvorvHnaugIabU4mj7zfMvm0tSByLcEu3eyV9qgS11qxxLuOkzBIwCstTflhmpQ==", "dev": true, "requires": { "bn.js": "^5.2.1", @@ -83525,12 +83883,12 @@ } }, "web3-eth-abi": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.7.5.tgz", - "integrity": "sha512-qWHvF7sayxql9BD1yqK9sZRLBQ66eJzGeaU53Y1PRq2iFPrhY6NUWxQ3c3ps0rg+dyObvRbloviWpKXcS4RE/A==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.8.0.tgz", + "integrity": "sha512-xPeMb2hS9YLQK/Q5YZpkcmzoRGM+/R8bogSrYHhNC3hjZSSU0YRH+1ZKK0f9YF4qDZaPMI8tKWIMSCDIpjG6fg==", "requires": { "@ethersproject/abi": "^5.6.3", - "web3-utils": "1.7.5" + "web3-utils": "1.8.0" }, "dependencies": { "ethereumjs-util": { @@ -83546,9 +83904,9 @@ } }, "web3-utils": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.7.5.tgz", - "integrity": "sha512-9AqNOziQky4wNQadEwEfHiBdOZqopIHzQQVzmvvv6fJwDSMhP+khqmAZC7YTiGjs0MboyZ8tWNivqSO1699XQw==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.0.tgz", + "integrity": "sha512-7nUIl7UWpLVka2f09CMbKOSEvorvHnaugIabU4mj7zfMvm0tSByLcEu3eyV9qgS11qxxLuOkzBIwCstTflhmpQ==", "requires": { "bn.js": "^5.2.1", "ethereum-bloom-filters": "^1.0.6", @@ -83562,9 +83920,9 @@ } }, "web3-eth-accounts": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.7.5.tgz", - "integrity": "sha512-AzMLoTj3RGwKpyp3x3TtHrEeU4VpR99iMOD6NKrWSDumS6QEi0lCo+y7QZhdTlINw3iIA3SFIdvbAOO4NCHSDg==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.8.0.tgz", + "integrity": "sha512-HQ/MDSv4bexwJLvnqsM6xpGE7c2NVOqyhzOZFyMUKXbIwIq85T3TaLnM9pCN7XqMpDcfxqiZ3q43JqQVkzHdmw==", "dev": true, "requires": { "@ethereumjs/common": "^2.5.0", @@ -83574,10 +83932,10 @@ "ethereumjs-util": "^7.0.10", "scrypt-js": "^3.0.1", "uuid": "3.3.2", - "web3-core": "1.7.5", - "web3-core-helpers": "1.7.5", - "web3-core-method": "1.7.5", - "web3-utils": "1.7.5" + "web3-core": "1.8.0", + "web3-core-helpers": "1.8.0", + "web3-core-method": "1.8.0", + "web3-utils": "1.8.0" }, "dependencies": { "eth-lib": { @@ -83619,9 +83977,9 @@ "dev": true }, "web3-utils": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.7.5.tgz", - "integrity": "sha512-9AqNOziQky4wNQadEwEfHiBdOZqopIHzQQVzmvvv6fJwDSMhP+khqmAZC7YTiGjs0MboyZ8tWNivqSO1699XQw==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.0.tgz", + "integrity": "sha512-7nUIl7UWpLVka2f09CMbKOSEvorvHnaugIabU4mj7zfMvm0tSByLcEu3eyV9qgS11qxxLuOkzBIwCstTflhmpQ==", "dev": true, "requires": { "bn.js": "^5.2.1", @@ -83636,19 +83994,19 @@ } }, "web3-eth-contract": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.7.5.tgz", - "integrity": "sha512-qab7NPJRKRlTs58ozsqK8YIEwWpxIm3vD/okSIKBGkFx5gIHWW+vGmMh5PDSfefLJM9rCd+T+Lc0LYvtME7uqg==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.8.0.tgz", + "integrity": "sha512-6xeXhW2YoCrz2Ayf2Vm4srWiMOB6LawkvxWJDnUWJ8SMATg4Pgu42C/j8rz/enXbYWt2IKuj0kk8+QszxQbK+Q==", "dev": true, "requires": { "@types/bn.js": "^5.1.0", - "web3-core": "1.7.5", - "web3-core-helpers": "1.7.5", - "web3-core-method": "1.7.5", - "web3-core-promievent": "1.7.5", - "web3-core-subscriptions": "1.7.5", - "web3-eth-abi": "1.7.5", - "web3-utils": "1.7.5" + "web3-core": "1.8.0", + "web3-core-helpers": "1.8.0", + "web3-core-method": "1.8.0", + "web3-core-promievent": "1.8.0", + "web3-core-subscriptions": "1.8.0", + "web3-eth-abi": "1.8.0", + "web3-utils": "1.8.0" }, "dependencies": { "ethereumjs-util": { @@ -83665,9 +84023,9 @@ } }, "web3-utils": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.7.5.tgz", - "integrity": "sha512-9AqNOziQky4wNQadEwEfHiBdOZqopIHzQQVzmvvv6fJwDSMhP+khqmAZC7YTiGjs0MboyZ8tWNivqSO1699XQw==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.0.tgz", + "integrity": "sha512-7nUIl7UWpLVka2f09CMbKOSEvorvHnaugIabU4mj7zfMvm0tSByLcEu3eyV9qgS11qxxLuOkzBIwCstTflhmpQ==", "dev": true, "requires": { "bn.js": "^5.2.1", @@ -83682,19 +84040,19 @@ } }, "web3-eth-ens": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.7.5.tgz", - "integrity": "sha512-k1Q0msdRv/wac2egpZBIwG3n/sa/KdrVmVJvFm471gLTL4xfUizV5qJjkDVf+ikf9JyDvWJTs5eWNUUbOFIw/A==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.8.0.tgz", + "integrity": "sha512-/eFbQEwvsMOEiOhw9/iuRXCsPkqAmHHWuFOrThQkozRgcnSTRnvxkkRC/b6koiT5/HaKeUs4yQDg+/ixsIxZxA==", "dev": true, "requires": { "content-hash": "^2.5.2", "eth-ens-namehash": "2.0.8", - "web3-core": "1.7.5", - "web3-core-helpers": "1.7.5", - "web3-core-promievent": "1.7.5", - "web3-eth-abi": "1.7.5", - "web3-eth-contract": "1.7.5", - "web3-utils": "1.7.5" + "web3-core": "1.8.0", + "web3-core-helpers": "1.8.0", + "web3-core-promievent": "1.8.0", + "web3-eth-abi": "1.8.0", + "web3-eth-contract": "1.8.0", + "web3-utils": "1.8.0" }, "dependencies": { "ethereumjs-util": { @@ -83711,9 +84069,9 @@ } }, "web3-utils": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.7.5.tgz", - "integrity": "sha512-9AqNOziQky4wNQadEwEfHiBdOZqopIHzQQVzmvvv6fJwDSMhP+khqmAZC7YTiGjs0MboyZ8tWNivqSO1699XQw==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.0.tgz", + "integrity": "sha512-7nUIl7UWpLVka2f09CMbKOSEvorvHnaugIabU4mj7zfMvm0tSByLcEu3eyV9qgS11qxxLuOkzBIwCstTflhmpQ==", "dev": true, "requires": { "bn.js": "^5.2.1", @@ -83728,13 +84086,13 @@ } }, "web3-eth-iban": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.7.5.tgz", - "integrity": "sha512-mn2W5t/1IpL8OZvzAabLKT4kvwRnZSJ9K0tctndl9sDNWkfITYQibEEhUaNNA50Q5fJKgVudHI/m0gwIVTyG8Q==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.8.0.tgz", + "integrity": "sha512-4RbvUxcMpo/e5811sE3a6inJ2H4+FFqUVmlRYs0RaXaxiHweahSRBNcpO0UWgmlePTolj0rXqPT2oEr0DuC8kg==", "dev": true, "requires": { "bn.js": "^5.2.1", - "web3-utils": "1.7.5" + "web3-utils": "1.8.0" }, "dependencies": { "ethereumjs-util": { @@ -83751,9 +84109,9 @@ } }, "web3-utils": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.7.5.tgz", - "integrity": "sha512-9AqNOziQky4wNQadEwEfHiBdOZqopIHzQQVzmvvv6fJwDSMhP+khqmAZC7YTiGjs0MboyZ8tWNivqSO1699XQw==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.0.tgz", + "integrity": "sha512-7nUIl7UWpLVka2f09CMbKOSEvorvHnaugIabU4mj7zfMvm0tSByLcEu3eyV9qgS11qxxLuOkzBIwCstTflhmpQ==", "dev": true, "requires": { "bn.js": "^5.2.1", @@ -83768,17 +84126,17 @@ } }, "web3-eth-personal": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.7.5.tgz", - "integrity": "sha512-txh2P/eN8I4AOUKFi9++KKddoD0tWfCuu9Y1Kc41jSRbk6smO88Fum0KWNmYFYhSCX2qiknS1DfqsONl3igoKQ==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.8.0.tgz", + "integrity": "sha512-L7FT4nR3HmsfZyIAhFpEctKkYGOjRC2h6iFKs9gnFCHZga8yLcYcGaYOBIoYtaKom99MuGBoosayWt/Twh7F5A==", "dev": true, "requires": { "@types/node": "^12.12.6", - "web3-core": "1.7.5", - "web3-core-helpers": "1.7.5", - "web3-core-method": "1.7.5", - "web3-net": "1.7.5", - "web3-utils": "1.7.5" + "web3-core": "1.8.0", + "web3-core-helpers": "1.8.0", + "web3-core-method": "1.8.0", + "web3-net": "1.8.0", + "web3-utils": "1.8.0" }, "dependencies": { "@types/node": { @@ -83801,9 +84159,9 @@ } }, "web3-utils": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.7.5.tgz", - "integrity": "sha512-9AqNOziQky4wNQadEwEfHiBdOZqopIHzQQVzmvvv6fJwDSMhP+khqmAZC7YTiGjs0MboyZ8tWNivqSO1699XQw==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.0.tgz", + "integrity": "sha512-7nUIl7UWpLVka2f09CMbKOSEvorvHnaugIabU4mj7zfMvm0tSByLcEu3eyV9qgS11qxxLuOkzBIwCstTflhmpQ==", "dev": true, "requires": { "bn.js": "^5.2.1", @@ -83818,14 +84176,14 @@ } }, "web3-net": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.7.5.tgz", - "integrity": "sha512-xwuCb2YWw49PmW81AJQ/G+Xi2ikRsYyZXSgyPt4LmZuKjiqg/6kSdK8lZvUi3Pi3wM+QDBXbpr73M/WEkW0KvA==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.8.0.tgz", + "integrity": "sha512-kX6EAacK7QrOe7DOh0t5yHS5q2kxZmTCxPVwSz9io9xBeE4n4UhmzGJ/VfhP2eM3OPKYeypcR3LEO6zZ8xn2vw==", "dev": true, "requires": { - "web3-core": "1.7.5", - "web3-core-method": "1.7.5", - "web3-utils": "1.7.5" + "web3-core": "1.8.0", + "web3-core-method": "1.8.0", + "web3-utils": "1.8.0" }, "dependencies": { "ethereumjs-util": { @@ -83842,9 +84200,9 @@ } }, "web3-utils": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.7.5.tgz", - "integrity": "sha512-9AqNOziQky4wNQadEwEfHiBdOZqopIHzQQVzmvvv6fJwDSMhP+khqmAZC7YTiGjs0MboyZ8tWNivqSO1699XQw==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.0.tgz", + "integrity": "sha512-7nUIl7UWpLVka2f09CMbKOSEvorvHnaugIabU4mj7zfMvm0tSByLcEu3eyV9qgS11qxxLuOkzBIwCstTflhmpQ==", "dev": true, "requires": { "bn.js": "^5.2.1", @@ -84041,35 +84399,35 @@ } }, "web3-providers-http": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.7.5.tgz", - "integrity": "sha512-vPgr4Kzy0M3CHtoP/Bh7qwK/D9h2fhjpoqctdMWVJseOfeTgfOphCKN0uwV8w2VpZgDPXA8aeTdBx5OjmDdStA==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.8.0.tgz", + "integrity": "sha512-/MqxwRzExohBWW97mqlCSW/+NHydGRyoEDUS1bAIF2YjfKFwyRtHgrEzOojzkC9JvB+8LofMvbXk9CcltpZapw==", "dev": true, "requires": { "abortcontroller-polyfill": "^1.7.3", "cross-fetch": "^3.1.4", "es6-promise": "^4.2.8", - "web3-core-helpers": "1.7.5" + "web3-core-helpers": "1.8.0" } }, "web3-providers-ipc": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.7.5.tgz", - "integrity": "sha512-aNHx+RAROzO+apDEzy8Zncj78iqWBadIXtpmFDg7uiTn8i+oO+IcP1Yni7jyzkltsysVJHgHWG4kPx50ANCK3Q==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.8.0.tgz", + "integrity": "sha512-tAXHtVXNUOgehaBU8pzAlB3qhjn/PRpjdzEjzHNFqtRRTwzSEKOJxFeEhaUA4FzHnTlbnrs8ujHWUitcp1elfg==", "dev": true, "requires": { "oboe": "2.1.5", - "web3-core-helpers": "1.7.5" + "web3-core-helpers": "1.8.0" } }, "web3-providers-ws": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.7.5.tgz", - "integrity": "sha512-9uJNVVkIGC8PmM9kNbgPth56HDMSSsxZh3ZEENdwO3LNWemaADiQYUDCsD/dMVkn0xsGLHP5dgAy4Q5msqySLg==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.8.0.tgz", + "integrity": "sha512-bcZtSifsqyJxwkfQYamfdIRp4nhj9eJd7cxHg1uUkfLJK125WP96wyJL1xbPt7qt0MpfnTFn8/UuIqIB6nFENg==", "dev": true, "requires": { "eventemitter3": "4.0.4", - "web3-core-helpers": "1.7.5", + "web3-core-helpers": "1.8.0", "websocket": "^1.0.32" }, "dependencies": { @@ -84082,15 +84440,15 @@ } }, "web3-shh": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.7.5.tgz", - "integrity": "sha512-aCIWJyLMH5H76OybU4ZpUCJ93yNOPATGhJ+KboRPU8QZDzS2CcVhtEzyl27bbvw+rSnVroMLqBgTXBB4mmKI7A==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.8.0.tgz", + "integrity": "sha512-DNRgSa9Jf9xYFUGKSMylrf+zt3MPjhI2qF+UWX07o0y3+uf8zalDGiJOWvIS4upAsdPiKKVJ7co+Neof47OMmg==", "dev": true, "requires": { - "web3-core": "1.7.5", - "web3-core-method": "1.7.5", - "web3-core-subscriptions": "1.7.5", - "web3-net": "1.7.5" + "web3-core": "1.8.0", + "web3-core-method": "1.8.0", + "web3-core-subscriptions": "1.8.0", + "web3-net": "1.8.0" } }, "web3-utils": { @@ -84139,9 +84497,9 @@ } }, "webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", "dev": true }, "webp-loader": { @@ -84710,12 +85068,23 @@ } }, "whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", "dev": true, "requires": { - "iconv-lite": "0.4.24" + "iconv-lite": "0.6.3" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } } }, "whatwg-fetch": { @@ -84725,20 +85094,19 @@ "dev": true }, "whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", "dev": true }, "whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-10.0.0.tgz", + "integrity": "sha512-CLxxCmdUby142H5FZzn4D8ikO1cmypvXVQktsgosNy4a4BHrDHeciBBGZhb0bNoR5/MltoCatso+vFjjGx8t0w==", "dev": true, "requires": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" } }, "whatwg-url-without-unicode": { @@ -85012,9 +85380,9 @@ } }, "xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", "dev": true }, "xmlchars": { @@ -85058,18 +85426,26 @@ "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" }, "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "version": "17.6.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.0.tgz", + "integrity": "sha512-8H/wTDqlSwoSnScvV2N/JHfLWOKuh5MVla9hqLjK3nsfyy6Y4kDSYSvkU5YCUEPOSnRXfIyx3Sq+B/IWudTo4g==", "dev": true, "requires": { - "cliui": "^7.0.2", + "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "string-width": "^4.2.0", + "string-width": "^4.2.3", "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" + "yargs-parser": "^21.0.0" + }, + "dependencies": { + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true + } } }, "yargs-parser": { @@ -85094,9 +85470,9 @@ "dev": true }, "zustand": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/zustand/-/zustand-4.1.1.tgz", - "integrity": "sha512-h4F3WMqsZgvvaE0n3lThx4MM81Ls9xebjvrABNzf5+jb3/03YjNTSgZXeyrvXDArMeV9untvWXRw1tY+ntPYbA==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/zustand/-/zustand-4.1.2.tgz", + "integrity": "sha512-gcRaKchcxFPbImrBb/BKgujOhHhik9YhVpIeP87ETT7uokEe2Szu7KkuZ9ghjtD+/KKkcrRNktR2AiLXPIbKIQ==", "requires": { "use-sync-external-store": "1.2.0" } diff --git a/package.json b/package.json index d629bfd24a..5194282103 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "kwenta", - "version": "3.2.5", + "version": "4.0.0", "scripts": { "dev": "next", "build": "next build", @@ -9,9 +9,9 @@ "tsc": "tsc --noEmit", "format": "prettier --write \"**/*.{ts,tsx}\"", "lint": "eslint . --ext ts,.tsx && tsc", - "lint:sarif": "node tests/lint.js . --ext ts,.tsx && tsc", + "lint:sarif": "node testing/lint.js . --ext ts,.tsx && tsc", "lint:fix": "eslint . --ext ts,.tsx --fix", - "test:unit": "jest", + "test:unit": "jest --coverage", "test:e2e": "start-server-and-test 'npm run build && npm run start' http-get://localhost:3000 'synpress run'", "test:e2e:only:tests": "synpress run", "test:e2e:open:testrunner": "synpress open", @@ -43,6 +43,7 @@ "bignumber.js": "9.0.0", "codegen-graph-ts": "^0.1.4", "cors": "^2.8.5", + "css-mediaquery": "^0.1.2", "date-fns": "2.21.3", "date-fns-tz": "1.1.4", "ethcall": "4.7.2", @@ -108,11 +109,11 @@ "@types/react-slick": "0.23.10", "@types/react-table": "7.0.22", "@types/styled-components": "5.1.2", - "@typescript-eslint/eslint-plugin": "4.33.0", - "@typescript-eslint/parser": "4.33.0", + "@typescript-eslint/eslint-plugin": "5.40.1", + "@typescript-eslint/parser": "5.40.1", "babel-eslint": "10.1.0", "eslint": "7.32.0", - "eslint-config-prettier": "6.10.1", + "eslint-config-prettier": "8.5.0", "eslint-config-react-app": "6.0.0", "eslint-plugin-chai-friendly": "^0.7.2", "eslint-plugin-cypress": "^2.12.1", @@ -126,8 +127,11 @@ "eslint-plugin-ui-testing": "^2.0.0", "html-to-image": "^1.9.0", "husky": "8.0.1", - "jest": "27.3.1", + "jest": "28.1.0", + "jest-environment-jsdom": "28.1.0", + "jest-transformer-svg": "^2.0.0", "lint-staged": "^13.0.3", + "next-router-mock": "^0.7.4", "pinst": "3.0.0", "prettier": "2.0.5", "react-test-renderer": "17.0.1", diff --git a/pages/_app.tsx b/pages/_app.tsx index deb6c8f3e7..9b6574464d 100644 --- a/pages/_app.tsx +++ b/pages/_app.tsx @@ -1,3 +1,4 @@ +import { createTheme, MuiThemeProvider } from '@material-ui/core'; import { darkTheme, lightTheme, RainbowKitProvider } from '@rainbow-me/rainbowkit'; import { NetworkId } from '@synthetixio/contracts-interface'; import { createQueryContext, SynthetixQueryContextProvider } from '@synthetixio/queries'; @@ -52,6 +53,8 @@ const InnerApp: FC = ({ Component, pageProps }: AppPropsWithLayout) => const isReady = useMemo(() => typeof window !== 'undefined', []); const currentTheme = useRecoilValue(currentThemeState); const theme = useMemo(() => themes[currentTheme], [currentTheme]); + // @ts-ignore palette options + const muiTheme = useMemo(() => createTheme(getDesignTokens(currentTheme)), [currentTheme]); return isReady ? ( = ({ Component, pageProps }: AppPropsWithLayout) => theme={currentTheme === 'dark' ? darkTheme() : lightTheme()} > - - - - {getLayout()} - - - - + + + + + {getLayout()} + + + + + ) : null; }; +const getDesignTokens = (mode: 'dark' | 'light') => ({ + palette: { + mode, + colors: themes[mode].colors, + }, +}); + const App: FC = (props) => { const { t } = useTranslation(); diff --git a/pages/market.tsx b/pages/market.tsx index 1b0662857b..5666108307 100644 --- a/pages/market.tsx +++ b/pages/market.tsx @@ -1,6 +1,6 @@ import Head from 'next/head'; import { useRouter } from 'next/router'; -import { useEffect, FC, useMemo } from 'react'; +import { useEffect, FC } from 'react'; import { useTranslation } from 'react-i18next'; import { useRecoilState, useRecoilValue, useSetRecoilState } from 'recoil'; import styled from 'styled-components'; @@ -8,13 +8,12 @@ import styled from 'styled-components'; import Error from 'components/Error'; import Loader from 'components/Loader'; import { DesktopOnlyView, MobileOrTabletView } from 'components/Media'; -import { CROSS_MARGIN_ENABLED, DEFAULT_FUTURES_MARGIN_TYPE } from 'constants/defaults'; import Connector from 'containers/Connector'; import { FuturesContext } from 'contexts/FuturesContext'; import { useRefetchContext } from 'contexts/RefetchContext'; import useFuturesData from 'hooks/useFuturesData'; import useIsL2 from 'hooks/useIsL2'; -import { FuturesAccountState, FuturesAccountType } from 'queries/futures/types'; +import { FuturesAccountState } from 'queries/futures/types'; import CrossMarginOnboard from 'sections/futures/CrossMarginOnboard'; import LeftSidebar from 'sections/futures/LeftSidebar/LeftSidebar'; import MarketInfo from 'sections/futures/MarketInfo'; @@ -87,25 +86,9 @@ function TradePanelDesktop({ walletAddress, account }: TradePanelProps) { const { handleRefetch } = useRefetchContext(); const router = useRouter(); const isL2 = useIsL2(); - const setSelectedAccountType = useSetRecoilState(futuresAccountTypeState); - - const accountType = useMemo(() => { - if (!CROSS_MARGIN_ENABLED) return DEFAULT_FUTURES_MARGIN_TYPE; - const routerType = - typeof router.query.accountType === 'string' - ? (router.query.accountType as FuturesAccountType) - : DEFAULT_FUTURES_MARGIN_TYPE; - return ['cross_margin', 'isolated_margin'].includes(routerType) - ? routerType - : DEFAULT_FUTURES_MARGIN_TYPE; - }, [router.query.accountType]); + const accountType = useRecoilValue(futuresAccountTypeState); - useEffect(() => { - setSelectedAccountType(accountType); - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [accountType]); - - if (!isL2) { + if (walletAddress && !isL2) { return ; } diff --git a/queries/futures/constants.ts b/queries/futures/constants.ts index 289e7144bc..60637f6662 100644 --- a/queries/futures/constants.ts +++ b/queries/futures/constants.ts @@ -47,3 +47,13 @@ export const FUTURES_POSITION_FRAGMENT = gql` } `; export const KWENTA_TRACKING_CODE = ethersUtils.formatBytes32String('KWENTA'); + +export const ORDER_PREVIEW_ERRORS = { insufficient_margin: 'Insufficient free margin' }; +export const ORDER_PREVIEW_ERRORS_I18N: Record = { + insufficient_margin: 'futures.market.trade.preview.insufficient-margin', + insufficient_margin_edit_leverage: 'futures.market.trade.edit-leverage.insufficient-margin', +}; + +export const previewErrorI18n = (message: string) => { + return ORDER_PREVIEW_ERRORS_I18N[message] || 'futures.market.trade.preview.error'; +}; diff --git a/queries/futures/subgraph.ts b/queries/futures/subgraph.ts index 375a65bca5..3ae897cdad 100644 --- a/queries/futures/subgraph.ts +++ b/queries/futures/subgraph.ts @@ -1834,6 +1834,14 @@ export type FuturesOrderFilter = { targetPrice_lte?: WeiSource | null; targetPrice_in?: WeiSource[]; targetPrice_not_in?: WeiSource[]; + marginDelta?: WeiSource | null; + marginDelta_not?: WeiSource | null; + marginDelta_gt?: WeiSource | null; + marginDelta_lt?: WeiSource | null; + marginDelta_gte?: WeiSource | null; + marginDelta_lte?: WeiSource | null; + marginDelta_in?: WeiSource[]; + marginDelta_not_in?: WeiSource[]; timestamp?: WeiSource | null; timestamp_not?: WeiSource | null; timestamp_gt?: WeiSource | null; @@ -1856,7 +1864,6 @@ export type FuturesOrderFilter = { keeper_not_in?: string[]; keeper_contains?: string | null; keeper_not_contains?: string | null; - _change_block?: any | null; }; export type FuturesOrderResult = { id: string; @@ -1868,6 +1875,7 @@ export type FuturesOrderResult = { orderId: Wei; targetRoundId: Wei; targetPrice: Wei; + marginDelta: Wei; timestamp: Wei; orderType: Partial; status: Partial; @@ -1883,6 +1891,7 @@ export type FuturesOrderFields = { orderId: true; targetRoundId: true; targetPrice: true; + marginDelta: true; timestamp: true; orderType: true; status: true; @@ -1914,6 +1923,7 @@ export const getFuturesOrderById = async function ( // additional types export type FuturesAccountType = 'isolated_margin' | 'cross_margin'; -export type FuturesOrderType = 'NextPrice' | 'Limit' | 'Market' | 'Liquidation'; -export type FuturesOrderStatus = 'Pending' | 'Filled' | 'Cancelled'; +export type FuturesOrderType = 'NextPrice' | 'Limit' | 'Market' | 'StopMarket'; +export type FuturesOrderStatus = 'Pending' | 'Filled' | 'Cancelled' | 'Open'; diff --git a/queries/futures/types.ts b/queries/futures/types.ts index ec770f7a8f..4511d19f49 100644 --- a/queries/futures/types.ts +++ b/queries/futures/types.ts @@ -46,8 +46,8 @@ export type FuturesFilledPosition = { liquidationPrice: Wei; initialLeverage: Wei; leverage: Wei; - roi: Wei; - roiChange: Wei; + pnl: Wei; + pnlPct: Wei; marginRatio: Wei; }; @@ -61,6 +61,7 @@ export type FuturesPosition = { export type FuturesMarket = { market: string; + marketKey?: FuturesMarketKey; marketName: string; asset: FuturesMarketAsset; assetHex: string; @@ -98,33 +99,6 @@ export type FuturesOpenInterest = { }; }; -export type RawPosition = { - id: string; - lastTxHash: string; - timestamp: number; - openTimestamp: number; - closeTimestamp: number; - market: string; - asset: string; - account: string; - isOpen: boolean; - isLiquidated: boolean; - size: Wei; - feesPaid: Wei; - netFunding: Wei; - netTransfers: Wei; - totalDeposits: Wei; - initialMargin: Wei; - margin: Wei; - entryPrice: Wei; - avgEntryPrice: Wei; - exitPrice: Wei; - pnl: Wei; - pnlWithFeesPaid: Wei; - totalVolume: Wei; - trades: number; -}; - export type MarginTransfer = { timestamp: number; market: string; @@ -142,10 +116,12 @@ export type PositionHistory = { transactionHash: string; timestamp: number; openTimestamp: number; - closeTimestamp: number; + closeTimestamp: number | undefined; market: string; asset: FuturesMarketAsset; account: string; + abstractAccount: string; + accountType: FuturesAccountType; isOpen: boolean; isLiquidated: boolean; size: Wei; @@ -199,6 +175,14 @@ export type FuturesTradeWithPrice = { price: string; }; +// This type exists to rename enum types from the subgraph to display-friendly types +export type FuturesOrderTypeDisplay = + | 'Next Price' + | 'Limit' + | 'Stop Market' + | 'Market' + | 'Liquidation'; + export type FuturesTrade = { size: Wei; asset: string; @@ -211,25 +195,28 @@ export type FuturesTrade = { side?: PositionSide | null; pnl: Wei; feesPaid: Wei; - orderType: 'NextPrice' | 'Limit' | 'Market' | 'Liquidation'; + orderType: FuturesOrderTypeDisplay; + accountType: FuturesAccountType; }; export type FuturesOrder = { id: string; account: string; - asset: string; + asset: FuturesMarketAsset; market: string; marketKey: FuturesMarketKey; size: Wei; targetPrice: Wei | null; + marginDelta: Wei; targetRoundId: Wei | null; timestamp: Wei; - orderType: 'NextPrice' | 'Next-Price' | 'Limit' | 'Stop'; + orderType: FuturesOrderTypeDisplay; sizeTxt?: string; targetPriceTxt?: string; side?: PositionSide; isStale?: boolean; isExecutable?: boolean; + isCancelling?: boolean; }; export type FuturesVolumes = { @@ -241,11 +228,23 @@ export type FuturesVolumes = { export type FuturesStat = { account: string; - pnlWithFeesPaid: string; - liquidations: number; + pnlWithFeesPaid: Wei; + liquidations: Wei; + totalTrades: Wei; + totalVolume: Wei; + pnl?: Wei; +}; + +export type AccountStat = { + rank: number; + account: string; + trader: string; + traderShort: string; + traderEns?: string | null; totalTrades: number; - totalVolume: number; - pnl?: number; + totalVolume: Wei; + liquidations: number; + pnl: Wei; }; export type FuturesCumulativeStats = { @@ -287,12 +286,24 @@ export type FuturesPotentialTradeDetailsQuery = { }; export type FuturesAccountType = 'cross_margin' | 'isolated_margin'; +export enum FuturesAccountTypes { + ISOLATED_MARGIN = 'isolated_margin', + CROSS_MARGIN = 'cross_margin', +} type Wallet = string; type CrossMarginAccount = string; type FactoryAddress = string; export type CrossMarginAccounts = Record>; +export type FuturesPositionsState = Record; +export type PositionHistoryState = Record; +export type Portfolio = { + total: Wei; + crossMarginFutures: Wei; + isolatedMarginFutures: Wei; +}; + export type FuturesAccountState = { walletAddress: string | null; crossMarginAddress: string | null; @@ -322,4 +333,4 @@ export type FuturesTradeInputs = { orderPrice?: Wei | undefined; }; -export type FuturesOrderType = 'market' | 'next-price' | 'stop' | 'limit'; +export type FuturesOrderType = 'market' | 'next price' | 'stop market' | 'limit'; diff --git a/queries/futures/useGetCrossMarginAccountOverview.ts b/queries/futures/useGetCrossMarginAccountOverview.ts index 18a6553fc5..b569155035 100644 --- a/queries/futures/useGetCrossMarginAccountOverview.ts +++ b/queries/futures/useGetCrossMarginAccountOverview.ts @@ -1,65 +1,68 @@ import { NetworkId } from '@synthetixio/contracts-interface'; import { wei } from '@synthetixio/wei'; +import { useState } from 'react'; import { useQuery } from 'react-query'; import { useRecoilValue, useSetRecoilState } from 'recoil'; import QUERY_KEYS from 'constants/queryKeys'; import Connector from 'containers/Connector'; import useCrossMarginAccountContracts from 'hooks/useCrossMarginContracts'; -import { - crossMarginAccountOverviewState, - crossMarginSettingsState, - futuresAccountState, -} from 'store/futures'; +import useSUSDContract from 'hooks/useSUSDContract'; +import { crossMarginAccountOverviewState, futuresAccountState } from 'store/futures'; import { zeroBN } from 'utils/formatters/number'; - -const BPS_CONVERSION = 10000; +import logError from 'utils/logError'; export default function useGetCrossMarginAccountOverview() { - const { network, provider } = Connector.useContainer(); + const { walletAddress, network, provider } = Connector.useContainer(); const { crossMarginAddress } = useRecoilValue(futuresAccountState); - const setCrossMarginSettings = useSetRecoilState(crossMarginSettingsState); const setAccountOverview = useSetRecoilState(crossMarginAccountOverviewState); - const { crossMarginAccountContract, crossMarginBaseSettings } = useCrossMarginAccountContracts(); + const { crossMarginAccountContract } = useCrossMarginAccountContracts(); + const [retryCount, setRetryCount] = useState(0); + const susdContract = useSUSDContract(); return useQuery( QUERY_KEYS.Futures.CrossMarginAccountOverview( network.id as NetworkId, crossMarginAddress || '', - crossMarginAccountContract?.address || '' + retryCount ), async () => { - if (!crossMarginAddress || !crossMarginAccountContract) { - setAccountOverview({ + if (!crossMarginAddress || !crossMarginAccountContract || !susdContract || !walletAddress) { + const overview = { freeMargin: zeroBN, keeperEthBal: zeroBN, - }); - return { freeMargin: zeroBN, keeperEthBal: zeroBN }; + allowance: zeroBN, + }; + setAccountOverview(overview); + return overview; } - const freeMargin = await crossMarginAccountContract.freeMargin(); - const tradeFee = await crossMarginBaseSettings?.tradeFee(); - const limitOrderFee = await crossMarginBaseSettings?.limitOrderFee(); - const stopOrderFee = await crossMarginBaseSettings?.stopOrderFee(); - const keeperEthBal = await provider.getBalance(crossMarginAddress); - - const settings = { - tradeFee: tradeFee ? wei(tradeFee.toNumber() / BPS_CONVERSION) : zeroBN, - limitOrderFee: limitOrderFee ? wei(limitOrderFee.toNumber() / BPS_CONVERSION) : zeroBN, - stopOrderFee: stopOrderFee ? wei(stopOrderFee.toNumber() / BPS_CONVERSION) : zeroBN, - }; + try { + const [freeMargin, keeperEthBal, allowance] = await Promise.all([ + crossMarginAccountContract.freeMargin(), + provider.getBalance(crossMarginAddress), + susdContract.allowance(walletAddress, crossMarginAccountContract.address), + ]); - setAccountOverview({ - freeMargin: wei(freeMargin), - keeperEthBal: wei(keeperEthBal), - }); - setCrossMarginSettings(settings); + const overview = { + freeMargin: wei(freeMargin), + keeperEthBal: wei(keeperEthBal), + allowance: wei(allowance), + }; + setRetryCount(0); + setAccountOverview(overview); - return { freeMargin: wei(freeMargin), settings: settings, keeperEthBal }; - }, - { - enabled: !!crossMarginAddress, + return overview; + } catch (err) { + // This a hacky workaround to deal with the delayed Metamask error + // which causes the logs query to fail on network switching + // https://github.com/MetaMask/metamask-extension/issues/13375#issuecomment-1046125113 + if (retryCount < 2) { + setRetryCount(retryCount + 1); + } + logError(err); + } } ); } diff --git a/queries/futures/useGetCrossMarginSettings.ts b/queries/futures/useGetCrossMarginSettings.ts new file mode 100644 index 0000000000..eda4d172dd --- /dev/null +++ b/queries/futures/useGetCrossMarginSettings.ts @@ -0,0 +1,50 @@ +import { NetworkId } from '@synthetixio/contracts-interface'; +import { wei } from '@synthetixio/wei'; +import { useQuery } from 'react-query'; +import { useSetRecoilState } from 'recoil'; + +import QUERY_KEYS from 'constants/queryKeys'; +import Connector from 'containers/Connector'; +import useCrossMarginAccountContracts from 'hooks/useCrossMarginContracts'; +import { crossMarginSettingsState } from 'store/futures'; +import { zeroBN } from 'utils/formatters/number'; +import logError from 'utils/logError'; + +const BPS_CONVERSION = 10000; + +export default function useGetCrossMarginSettings() { + const { network } = Connector.useContainer(); + const setCrossMarginSettings = useSetRecoilState(crossMarginSettingsState); + + const { crossMarginBaseSettings } = useCrossMarginAccountContracts(); + + return useQuery( + QUERY_KEYS.Futures.CrossMarginSettings( + network.id as NetworkId, + crossMarginBaseSettings?.address ?? '' + ), + async () => { + if (!crossMarginBaseSettings) { + return; + } + + try { + const [tradeFee, limitOrderFee, stopOrderFee] = await Promise.all([ + crossMarginBaseSettings?.tradeFee(), + crossMarginBaseSettings?.limitOrderFee(), + crossMarginBaseSettings?.stopOrderFee(), + ]); + const settings = { + tradeFee: tradeFee ? wei(tradeFee.toNumber() / BPS_CONVERSION) : zeroBN, + limitOrderFee: limitOrderFee ? wei(limitOrderFee.toNumber() / BPS_CONVERSION) : zeroBN, + stopOrderFee: stopOrderFee ? wei(stopOrderFee.toNumber() / BPS_CONVERSION) : zeroBN, + }; + setCrossMarginSettings(settings); + + return; + } catch (err) { + logError(err); + } + } + ); +} diff --git a/queries/futures/useGetCrossMarginTradePreview.ts b/queries/futures/useGetCrossMarginTradePreview.ts index d50e6575fd..f24cef7d94 100644 --- a/queries/futures/useGetCrossMarginTradePreview.ts +++ b/queries/futures/useGetCrossMarginTradePreview.ts @@ -1,12 +1,14 @@ import { SynthetixJS } from '@synthetixio/contracts-interface'; import { wei } from '@synthetixio/wei'; import BN from 'bn.js'; -import { BigNumber, Contract, ethers } from 'ethers'; +import { Provider, Contract as MultiCallContract } from 'ethcall'; +import { BigNumber, ethers, Contract } from 'ethers'; import { formatBytes32String } from 'ethers/lib/utils'; import { useCallback, useMemo } from 'react'; import Connector from 'containers/Connector'; import useIsL2 from 'hooks/useIsL2'; +import FuturesMarket from 'lib/abis/FuturesMarket.json'; import { PotentialTradeStatus } from 'sections/futures/types'; import { zeroBN, @@ -47,6 +49,8 @@ type Position = { lastFundingIndex: BigNumber; }; +const ethcallProvider = new Provider(); + export default function useGetCrossMarginTradePreview( marketAsset: FuturesMarketAsset, address: string | null | undefined @@ -87,6 +91,15 @@ class FuturesMarketInternal { _marketKeyBytes: string; _account: string; + _onChainData: { + assetPrice: BigNumber; + marketSkew: BigNumber; + marketSize: BigNumber; + fundingSequenceLength: BigNumber; + fundingLastRecomputed: number; + accruedFunding: BigNumber; + }; + _cache: Record; constructor( @@ -103,6 +116,14 @@ class FuturesMarketInternal { this._marketKeyBytes = formatBytes32String(MarketKeyByAsset[marketAsset]); this._account = account; this._cache = {}; + this._onChainData = { + assetPrice: BigNumber.from(0), + marketSkew: BigNumber.from(0), + marketSize: BigNumber.from(0), + fundingSequenceLength: BigNumber.from(0), + fundingLastRecomputed: 0, + accruedFunding: BigNumber.from(0), + }; } getTradePreview = async ( @@ -110,8 +131,34 @@ class FuturesMarketInternal { marginDelta: BigNumber, limitStopPrice?: BigNumber ) => { - const position = await this._futuresMarketContract.positions(this._account); - const price = limitStopPrice || (await this._futuresMarketContract.assetPrice()).price; + const multiCallContract = new MultiCallContract( + this._futuresMarketContract.address, + FuturesMarket + ); + await ethcallProvider.init(this._provider as any); + const preFetchedData = await ethcallProvider.all([ + multiCallContract.assetPrice(), + multiCallContract.marketSkew(), + multiCallContract.marketSize(), + multiCallContract.accruedFunding(this._account), + multiCallContract.fundingSequenceLength(), + multiCallContract.fundingLastRecomputed(), + multiCallContract.positions(this._account), + ]); + + this._onChainData = { + //@ts-ignore + assetPrice: preFetchedData[0].price as BigNumber, + marketSkew: preFetchedData[1] as BigNumber, + marketSize: preFetchedData[2] as BigNumber, + //@ts-ignore + accruedFunding: preFetchedData[3].funding as BigNumber, + fundingSequenceLength: preFetchedData[4] as BigNumber, + fundingLastRecomputed: preFetchedData[5] as number, + }; + + const position = preFetchedData[6] as Position; + const price = limitStopPrice || this._onChainData.assetPrice; const takerFee = await this._getSetting('takerFee', [this._marketKeyBytes]); const makerFee = await this._getSetting('makerFee', [this._marketKeyBytes]); @@ -220,7 +267,7 @@ class FuturesMarketInternal { _orderFee = async (tradeParams: TradeParams, dynamicFeeRate: BigNumber) => { const notionalDiff = multiplyDecimal(tradeParams.sizeDelta, tradeParams.price); - const marketSkew = await this._futuresMarketContract.marketSkew(); + const marketSkew = await this._onChainData.marketSkew; const sameSide = notionalDiff.gte(0) === marketSkew.gte(0); const staticRate = sameSide ? tradeParams.takerFee : tradeParams.makerFee; const feeRate = staticRate.add(dynamicFeeRate); @@ -248,7 +295,7 @@ class FuturesMarketInternal { }; _marginPlusProfitFunding = async (position: Position, price: BigNumber) => { - const { funding } = await this._futuresMarketContract.accruedFunding(this._account); + const funding = this._onChainData.accruedFunding; return position.margin.add(this._profitLoss(position, price)).add(funding); }; @@ -267,7 +314,7 @@ class FuturesMarketInternal { }; _latestFundingIndex = async () => { - const fundingSequenceLength = await this._futuresMarketContract.fundingSequenceLength(); + const fundingSequenceLength = this._onChainData.fundingSequenceLength; return fundingSequenceLength.sub(1); // at least one element is pushed in constructor }; @@ -292,7 +339,7 @@ class FuturesMarketInternal { _unrecordedFunding = async (price: BigNumber) => { const blockNum = await this._provider?.getBlockNumber(); const block = await this._provider?.getBlock(blockNum); - const fundingLastRecomputed = await this._futuresMarketContract.fundingLastRecomputed(); + const fundingLastRecomputed = this._onChainData.fundingLastRecomputed; const elapsed = BigNumber.from(block.timestamp).sub(fundingLastRecomputed); const currentFundingRatePerSecond = (await this._currentFundingRate(price)).div( BigNumber.from(86400) @@ -305,7 +352,7 @@ class FuturesMarketInternal { const skewScaleUSD = await this._getSetting('skewScaleUSD', [this._marketKeyBytes]); const skewScaleBaseAsset = divideDecimal(skewScaleUSD, price); if (skewScaleBaseAsset.isZero()) throw new Error('skewScale is zero'); - const marketSkew = await this._futuresMarketContract.marketSkew(); + const marketSkew = this._onChainData.marketSkew; return divideDecimal(marketSkew, skewScaleBaseAsset); }; @@ -349,8 +396,8 @@ class FuturesMarketInternal { return false; } - const marketSkew = await this._futuresMarketContract.marketSkew(); - const marketSize = await this._futuresMarketContract.marketSize(); + const marketSkew = this._onChainData.marketSkew; + const marketSize = this._onChainData.marketSize; const newSkew = marketSkew.sub(oldSize).add(newSize); const newMarketSize = marketSize.sub(oldSize.abs()).add(newSize); diff --git a/queries/futures/useGetCurrentPortfolioValue.ts b/queries/futures/useGetCurrentPortfolioValue.ts deleted file mode 100644 index 644e4225c4..0000000000 --- a/queries/futures/useGetCurrentPortfolioValue.ts +++ /dev/null @@ -1,85 +0,0 @@ -import { NetworkId } from '@synthetixio/contracts-interface'; -import { wei } from '@synthetixio/wei'; -import { utils as ethersUtils } from 'ethers'; -import { useQuery, UseQueryOptions } from 'react-query'; -import { useRecoilValue } from 'recoil'; - -import QUERY_KEYS from 'constants/queryKeys'; -import Connector from 'containers/Connector'; -import useIsL2 from 'hooks/useIsL2'; -import { futuresAccountState, marketKeysState } from 'store/futures'; -import { zeroBN } from 'utils/formatters/number'; -import { MarketAssetByKey } from 'utils/futures'; -import logError from 'utils/logError'; - -import useGetCrossMarginAccountOverview from './useGetCrossMarginAccountOverview'; -import { mapFuturesPosition } from './utils'; - -const useGetCurrentPortfolioValue = (options?: UseQueryOptions) => { - const { defaultSynthetixjs: synthetixjs, network, walletAddress } = Connector.useContainer(); - const isL2 = useIsL2(); - - const futuresAccount = useRecoilValue(futuresAccountState); - const marketKeys = useRecoilValue(marketKeysState); - - const query = useGetCrossMarginAccountOverview(); - const freeMargin = query.data?.freeMargin || zeroBN; - - return useQuery( - QUERY_KEYS.Futures.Positions( - network?.id as NetworkId, - marketKeys || [], - futuresAccount?.crossMarginAddress || '' - ), - async () => { - const { - contracts: { FuturesMarketData }, - } = synthetixjs!; - try { - const positionsForIsolatedMarkets = await Promise.all( - marketKeys.map((market) => - FuturesMarketData.positionDetailsForMarketKey( - ethersUtils.formatBytes32String(market), - walletAddress - ) - ) - ); - - const positionsForCrossMarginMarkets = futuresAccount?.crossMarginAddress - ? await Promise.all( - marketKeys.map((market) => - FuturesMarketData.positionDetailsForMarketKey( - ethersUtils.formatBytes32String(market), - futuresAccount.crossMarginAddress - ) - ) - ) - : []; - - const combined = [...positionsForIsolatedMarkets, ...positionsForCrossMarginMarkets]; - - const portfolioValue = combined - .map((position, i) => { - const mappedPosition = mapFuturesPosition( - position, - false, - MarketAssetByKey[marketKeys[i]] - ); - return mappedPosition.remainingMargin; - }) - .reduce((sum, val) => sum.add(val), wei(0)) - .add(freeMargin); - return !!portfolioValue ? portfolioValue : wei(0); - } catch (e) { - logError(e); - return null; - } - }, - { - enabled: isL2 && !!walletAddress && marketKeys.length > 0 && !!synthetixjs, - ...options, - } - ); -}; - -export default useGetCurrentPortfolioValue; diff --git a/queries/futures/useGetFuturesAccountPositionHistory.ts b/queries/futures/useGetFuturesAccountPositionHistory.ts deleted file mode 100644 index 9fec7aac9f..0000000000 --- a/queries/futures/useGetFuturesAccountPositionHistory.ts +++ /dev/null @@ -1,53 +0,0 @@ -import { NetworkId } from '@synthetixio/contracts-interface'; -import request, { gql } from 'graphql-request'; -import { useQuery, UseQueryOptions } from 'react-query'; - -import QUERY_KEYS from 'constants/queryKeys'; -import Connector from 'containers/Connector'; -import useIsL2 from 'hooks/useIsL2'; -import logError from 'utils/logError'; - -import { FUTURES_POSITION_FRAGMENT } from './constants'; -import { PositionHistory } from './types'; -import { mapTradeHistory, getFuturesEndpoint } from './utils'; - -const useGetFuturesAccountPositionHistory = ( - account: string, - options?: UseQueryOptions -) => { - const { network } = Connector.useContainer(); - const isL2 = useIsL2(); - const futuresEndpoint = getFuturesEndpoint(network?.id as NetworkId); - - return useQuery( - QUERY_KEYS.Futures.AllPositionHistory(network?.id as NetworkId, account || ''), - async () => { - try { - const response = await request( - futuresEndpoint, - gql` - ${FUTURES_POSITION_FRAGMENT} - query allPositionHistory($account: String!) { - futuresPositions( - where: { account: $account } - orderBy: timestamp - orderDirection: desc - ) { - ...FuturesPositionFragment - } - } - `, - { account: account } - ); - - return response ? mapTradeHistory(response.futuresPositions, false) : []; - } catch (e) { - logError(e); - return null; - } - }, - { enabled: isL2, ...options } - ); -}; - -export default useGetFuturesAccountPositionHistory; diff --git a/queries/futures/useGetFuturesMarkets.ts b/queries/futures/useGetFuturesMarkets.ts index 039519e0ff..c5bf5b346b 100644 --- a/queries/futures/useGetFuturesMarkets.ts +++ b/queries/futures/useGetFuturesMarkets.ts @@ -92,8 +92,9 @@ const useGetFuturesMarkets = (options?: UseQueryOptions) => { price, }: FuturesMarket, i: number - ) => ({ + ): FuturesMarket => ({ market, + marketKey: MarketKeyByAsset[utils.parseBytes32String(asset) as FuturesMarketAsset], marketName: getMarketName(utils.parseBytes32String(asset) as FuturesMarketAsset), asset: utils.parseBytes32String(asset) as FuturesMarketAsset, assetHex: asset, @@ -131,9 +132,7 @@ const useGetFuturesMarkets = (options?: UseQueryOptions) => { marketClosureReason: getReasonFromCode(reasons[i]) as FuturesClosureReason, }) ); - setFuturesMarkets(futuresMarkets); - return futuresMarkets; }, { diff --git a/queries/futures/useGetFuturesOpenOrders.ts b/queries/futures/useGetFuturesOpenOrders.ts index 5cebe875bc..f07ebf63ac 100644 --- a/queries/futures/useGetFuturesOpenOrders.ts +++ b/queries/futures/useGetFuturesOpenOrders.ts @@ -1,31 +1,22 @@ import { NetworkId } from '@synthetixio/contracts-interface'; -import Wei, { wei } from '@synthetixio/wei'; -import { utils as ethersUtils } from 'ethers'; import request, { gql } from 'graphql-request'; import { useQuery, UseQueryOptions } from 'react-query'; import { useSetRecoilState, useRecoilValue } from 'recoil'; import QUERY_KEYS from 'constants/queryKeys'; import Connector from 'containers/Connector'; -import { openOrdersState, marketInfoState, selectedFuturesAddressState } from 'store/futures'; -import { formatCurrency, formatDollars, weiFromWei } from 'utils/formatters/number'; -import { - FuturesMarketAsset, - getDisplayAsset, - getMarketName, - MarketKeyByAsset, -} from 'utils/futures'; +import { openOrdersState, futuresMarketsState, selectedFuturesAddressState } from 'store/futures'; import logError from 'utils/logError'; -import { PositionSide, FuturesOrder } from './types'; -import { getFuturesEndpoint } from './utils'; +import { FuturesOrder } from './types'; +import { getFuturesEndpoint, mapFuturesOrders } from './utils'; const useGetFuturesOpenOrders = (options?: UseQueryOptions) => { const selectedFuturesAddress = useRecoilValue(selectedFuturesAddressState); const { network } = Connector.useContainer(); const futuresEndpoint = getFuturesEndpoint(network?.id as NetworkId); - const marketInfo = useRecoilValue(marketInfoState); + const futuresMarkets = useRecoilValue(futuresMarketsState); const setOpenOrders = useSetRecoilState(openOrdersState); return useQuery( @@ -36,57 +27,31 @@ const useGetFuturesOpenOrders = (options?: UseQueryOptions) => { return []; } try { - const marketAsset = marketInfo?.assetHex; const response = await request( futuresEndpoint, gql` - query OpenOrders($account: String!, $asset: String!) { - futuresOrders(where: { abstractAccount: $account, asset: $asset, status: Pending }) { + query OpenOrders($account: String!) { + futuresOrders(where: { abstractAccount: $account, status: Pending }) { id account size market asset targetRoundId + marginDelta targetPrice timestamp orderType } } `, - { account: selectedFuturesAddress, asset: marketAsset } + { account: selectedFuturesAddress } ); const openOrders: FuturesOrder[] = response - ? response.futuresOrders.map((o: FuturesOrder) => { - const asset: FuturesMarketAsset = ethersUtils.parseBytes32String( - o.asset - ) as FuturesMarketAsset; - const size = weiFromWei(o.size); - const targetPrice = weiFromWei(o.targetPrice ?? 0); - const targetRoundId = new Wei(o.targetRoundId, 0); - const currentRoundId = wei(marketInfo?.currentRoundId ?? 0); - return { - ...o, - asset: asset, - targetRoundId: targetRoundId, - targetPrice: targetPrice.gt(0) ? targetPrice : null, - size: size, - market: getMarketName(asset), - marketKey: MarketKeyByAsset[asset], - orderType: o.orderType === 'NextPrice' ? 'Next-Price' : o.orderType, - sizeTxt: formatCurrency(asset, size.abs(), { - currencyKey: getDisplayAsset(asset) ?? '', - minDecimals: size.abs().lt(0.01) ? 4 : 2, - }), - targetPriceTxt: formatDollars(targetPrice), - side: size.gt(0) ? PositionSide.LONG : PositionSide.SHORT, - isStale: - o.orderType === 'NextPrice' && currentRoundId.gte(wei(o.targetRoundId).add(2)), - isExecutable: targetRoundId - ? currentRoundId.eq(targetRoundId) || currentRoundId.eq(targetRoundId.add(1)) - : false, - }; + ? response.futuresOrders.map((o: any) => { + const marketInfo = futuresMarkets.find((m) => m.asset === o.asset); + return mapFuturesOrders(o, marketInfo); }) : []; setOpenOrders(openOrders); @@ -97,7 +62,7 @@ const useGetFuturesOpenOrders = (options?: UseQueryOptions) => { } }, { - enabled: !!marketInfo?.market && !!selectedFuturesAddress, + enabled: futuresMarkets.length > 0 && !!selectedFuturesAddress, refetchInterval: 5000, ...options, } diff --git a/queries/futures/useGetFuturesPositionForAccount.ts b/queries/futures/useGetFuturesPositionForAccount.ts deleted file mode 100644 index a9a18918ee..0000000000 --- a/queries/futures/useGetFuturesPositionForAccount.ts +++ /dev/null @@ -1,57 +0,0 @@ -import { NetworkId } from '@synthetixio/contracts-interface'; -import request, { gql } from 'graphql-request'; -import { useQuery, UseQueryOptions } from 'react-query'; -import { useRecoilValue } from 'recoil'; - -import QUERY_KEYS from 'constants/queryKeys'; -import Connector from 'containers/Connector'; -import { futuresAccountTypeState, selectedFuturesAddressState } from 'store/futures'; -import logError from 'utils/logError'; - -import { FUTURES_POSITION_FRAGMENT } from './constants'; -import { PositionHistory } from './types'; -import { getFuturesEndpoint, mapTradeHistory } from './utils'; - -const useGetFuturesPositionForAccount = (options?: UseQueryOptions) => { - const { network, walletAddress } = Connector.useContainer(); - - const selectedAccountType = useRecoilValue(futuresAccountTypeState); - const selectedFuturesAddress = useRecoilValue(selectedFuturesAddressState); - const futuresEndpoint = getFuturesEndpoint(network?.id as NetworkId); - - return useQuery( - QUERY_KEYS.Futures.AccountPositions( - walletAddress, - network.id as NetworkId, - selectedAccountType - ), - async () => { - if (!walletAddress) return []; - try { - const response = await request( - futuresEndpoint, - gql` - ${FUTURES_POSITION_FRAGMENT} - query userAllPositions($account: String!, $accountType: String!) { - futuresPositions(where: { account: $account, accountType: $accountType }) { - ...FuturesPositionFragment - } - } - `, - { account: walletAddress, accountType: selectedAccountType } - ); - return response?.futuresPositions ? mapTradeHistory(response.futuresPositions, true) : []; - } catch (e) { - logError(e); - return null; - } - }, - { - enabled: !!selectedFuturesAddress, - refetchInterval: 5000, - ...options, - } - ); -}; - -export default useGetFuturesPositionForAccount; diff --git a/queries/futures/useGetFuturesPositionForMarket.ts b/queries/futures/useGetFuturesPositionForMarket.ts index 956000d991..5f23f8cc34 100644 --- a/queries/futures/useGetFuturesPositionForMarket.ts +++ b/queries/futures/useGetFuturesPositionForMarket.ts @@ -5,6 +5,7 @@ import { useRecoilValue, useSetRecoilState } from 'recoil'; import QUERY_KEYS from 'constants/queryKeys'; import Connector from 'containers/Connector'; +import useIsL2 from 'hooks/useIsL2'; import { marketKeyState, positionState, selectedFuturesAddressState } from 'store/futures'; import { MarketAssetByKey } from 'utils/futures'; @@ -13,6 +14,7 @@ import { mapFuturesPosition, getFuturesMarketContract } from './utils'; const useGetFuturesPositionForMarket = (options?: UseQueryOptions) => { const { defaultSynthetixjs: synthetixjs, network } = Connector.useContainer(); + const isL2 = useIsL2(); const selectedFuturesAddress = useRecoilValue(selectedFuturesAddressState); const market = useRecoilValue(marketKeyState); const setPosition = useSetRecoilState(positionState); @@ -24,7 +26,7 @@ const useGetFuturesPositionForMarket = (options?: UseQueryOptions { - if (!market || !selectedFuturesAddress || !synthetixjs) { + if (!isL2 || !market || !selectedFuturesAddress || !synthetixjs) { setPosition(null); return null; } diff --git a/queries/futures/useGetFuturesPositionForMarkets.ts b/queries/futures/useGetFuturesPositionForMarkets.ts index 1906c4499a..ed2dc57b24 100644 --- a/queries/futures/useGetFuturesPositionForMarkets.ts +++ b/queries/futures/useGetFuturesPositionForMarkets.ts @@ -9,44 +9,43 @@ import Connector from 'containers/Connector'; import useIsL2 from 'hooks/useIsL2'; import FuturesMarketABI from 'lib/abis/FuturesMarket.json'; import FuturesMarketDataABI from 'lib/abis/FuturesMarketData.json'; -import { futuresMarketsState, positionsState, selectedFuturesAddressState } from 'store/futures'; +import { positionsState, futuresAccountState, futuresMarketsState } from 'store/futures'; import { MarketKeyByAsset } from 'utils/futures'; -import { FuturesPosition, PositionDetail } from './types'; +import { FuturesAccountTypes, PositionDetail } from './types'; import { mapFuturesPosition } from './utils'; -const ethCallProvider = new Provider(); +const DEFAULT_POSITIONS = { + [FuturesAccountTypes.ISOLATED_MARGIN]: [], + [FuturesAccountTypes.CROSS_MARGIN]: [], +}; -const useGetFuturesPositionForMarkets = (options?: UseQueryOptions) => { - const { - defaultSynthetixjs, - l2Synthetixjs, - provider, - l2Provider, - network, - } = Connector.useContainer(); +const useGetFuturesPositionForMarkets = (options?: UseQueryOptions) => { + const { defaultSynthetixjs: synthetixjs, provider, network } = Connector.useContainer(); const isL2 = useIsL2(); - const synthetixjs = isL2 ? defaultSynthetixjs : l2Synthetixjs; - const setFuturesPositions = useSetRecoilState(positionsState); const futuresMarkets = useRecoilValue(futuresMarketsState); - const selectedFuturesAddress = useRecoilValue(selectedFuturesAddressState); - + const setPositions = useSetRecoilState(positionsState); + const { walletAddress, crossMarginAddress, crossMarginAvailable, status } = useRecoilValue( + futuresAccountState + ); const assets = futuresMarkets.map(({ asset }) => asset); - return useQuery( + return useQuery( QUERY_KEYS.Futures.MarketsPositions( network?.id as NetworkId, assets || [], - selectedFuturesAddress ?? '' + walletAddress ?? '', + crossMarginAddress ?? '' ), async () => { - if (!assets || (!provider && !l2Provider) || !selectedFuturesAddress) { - setFuturesPositions([]); - return []; + if (!isL2 || !provider || status !== 'complete') { + setPositions(DEFAULT_POSITIONS); + return; } - await ethCallProvider.init(isL2 ? provider : l2Provider); + const ethcallProvider = new Provider(); + await ethcallProvider.init(provider); const { contracts: { FuturesMarketData }, @@ -57,32 +56,69 @@ const useGetFuturesPositionForMarkets = (options?: UseQueryOptions { + const canLiquidate = canLiquidateStateIsolated[ind]; + const asset = assets[ind]; + return mapFuturesPosition(position, canLiquidate, asset); + }) + .filter(({ remainingMargin }) => remainingMargin.gt(0)); + + const crossPositions = positionDetailsCross + .map((position, ind) => { + const canLiquidate = canLiquidateStateCross[ind]; + const asset = assets[ind]; + return mapFuturesPosition(position, canLiquidate, asset); + }) + .filter(({ remainingMargin }) => remainingMargin.gt(0)); + + setPositions({ + [FuturesAccountTypes.ISOLATED_MARGIN]: isolatedPositions, + [FuturesAccountTypes.CROSS_MARGIN]: crossPositions, + }); }, { ...options, diff --git a/queries/futures/useGetFuturesPositionHistory.ts b/queries/futures/useGetFuturesPositionHistory.ts new file mode 100644 index 0000000000..aa31a09ea4 --- /dev/null +++ b/queries/futures/useGetFuturesPositionHistory.ts @@ -0,0 +1,29 @@ +import { useEffect } from 'react'; +import { useSetRecoilState } from 'recoil'; + +import Connector from 'containers/Connector'; +import { positionHistoryState } from 'store/futures'; + +import { FuturesAccountTypes, PositionHistoryState } from './types'; +import useGetFuturesPositionHistoryForAccount from './useGetFuturesPositionHistoryForAccount'; + +const DEFAULT_POSITION_HISTORY: PositionHistoryState = { + [FuturesAccountTypes.CROSS_MARGIN]: [], + [FuturesAccountTypes.ISOLATED_MARGIN]: [], +}; + +const useGetFuturesPositionHistory = () => { + const { walletAddress } = Connector.useContainer(); + + const setPositionHistory = useSetRecoilState(positionHistoryState); + const positionHistoryQuery = useGetFuturesPositionHistoryForAccount(walletAddress); + + useEffect(() => { + const positionHistory = positionHistoryQuery.data ?? DEFAULT_POSITION_HISTORY; + setPositionHistory(positionHistory); + }, [positionHistoryQuery.data, setPositionHistory]); + + return positionHistoryQuery; +}; + +export default useGetFuturesPositionHistory; diff --git a/queries/futures/useGetFuturesPositionHistoryForAccount.ts b/queries/futures/useGetFuturesPositionHistoryForAccount.ts new file mode 100644 index 0000000000..cba90b9991 --- /dev/null +++ b/queries/futures/useGetFuturesPositionHistoryForAccount.ts @@ -0,0 +1,93 @@ +import { NetworkId } from '@synthetixio/contracts-interface'; +import { useQuery, UseQueryOptions } from 'react-query'; + +import QUERY_KEYS from 'constants/queryKeys'; +import Connector from 'containers/Connector'; +import logError from 'utils/logError'; + +import { getFuturesPositions } from './subgraph'; +import { FuturesAccountTypes, PositionHistory, PositionHistoryState } from './types'; +import { getFuturesEndpoint, mapFuturesPositions } from './utils'; + +const DEFAULT_POSITION_HISTORY: PositionHistoryState = { + [FuturesAccountTypes.CROSS_MARGIN]: [], + [FuturesAccountTypes.ISOLATED_MARGIN]: [], +}; + +const useGetFuturesPositionHistoryForAccount = ( + account: string | null, + options?: UseQueryOptions +) => { + const { network } = Connector.useContainer(); + + const futuresEndpoint = getFuturesEndpoint(network?.id as NetworkId); + + return useQuery( + QUERY_KEYS.Futures.PositionHistory(account, network.id as NetworkId), + async () => { + try { + const response = await getFuturesPositions( + futuresEndpoint, + { + where: { + account: account, + }, + }, + { + id: true, + lastTxHash: true, + openTimestamp: true, + closeTimestamp: true, + timestamp: true, + market: true, + asset: true, + account: true, + abstractAccount: true, + accountType: true, + isOpen: true, + isLiquidated: true, + trades: true, + totalVolume: true, + size: true, + initialMargin: true, + margin: true, + pnl: true, + feesPaid: true, + netFunding: true, + pnlWithFeesPaid: true, + netTransfers: true, + totalDeposits: true, + fundingIndex: true, + entryPrice: true, + avgEntryPrice: true, + lastPrice: true, + exitPrice: true, + } + ); + const positionHistory = response ? mapFuturesPositions(response) : []; + + const positionHistoryByType = positionHistory.reduce( + (acc: PositionHistoryState, position: PositionHistory) => { + const accountType = position.accountType; + + return { + ...acc, + [accountType]: [...acc[accountType], position], + }; + }, + DEFAULT_POSITION_HISTORY + ); + return positionHistoryByType; + } catch (e) { + logError(e); + return DEFAULT_POSITION_HISTORY; + } + }, + { + enabled: !!account, + ...options, + } + ); +}; + +export default useGetFuturesPositionHistoryForAccount; diff --git a/queries/futures/useGetFuturesPotentialTradeDetails.ts b/queries/futures/useGetFuturesPotentialTradeDetails.ts index e46e4c24ad..a2c0e6d64d 100644 --- a/queries/futures/useGetFuturesPotentialTradeDetails.ts +++ b/queries/futures/useGetFuturesPotentialTradeDetails.ts @@ -12,6 +12,7 @@ import { futuresAccountTypeState, selectedFuturesAddressState, orderTypeState, + crossMarginAccountOverviewState, } from 'store/futures'; import logError from 'utils/logError'; @@ -31,11 +32,11 @@ const useGetFuturesPotentialTradeDetails = () => { const leverageSide = useRecoilValue(leverageSideState); const marketAsset = useRecoilValue(currentMarketState); const orderType = useRecoilValue(orderTypeState); + const { freeMargin } = useRecoilValue(crossMarginAccountOverviewState); + const setPotentialTradeDetails = useSetRecoilState(potentialTradeDetailsState); const getPreview = useGetCrossMarginPotentialTrade(marketAsset, selectedFuturesAddress); - const setPotentialTradeDetails = useSetRecoilState(potentialTradeDetailsState); - const generatePreview = useCallback( async ( nativeSizeDelta: Wei, @@ -48,13 +49,17 @@ const useGetFuturesPotentialTradeDetails = () => { !marketAsset || (!nativeSizeDelta && selectedAccountType === 'isolated_margin') || (!nativeSizeDelta && (!positionMarginDelta || positionMarginDelta.eq(0))) || - ((orderType === 'limit' || orderType === 'stop') && orderPrice?.eq(0)) || + ((orderType === 'limit' || orderType === 'stop market') && orderPrice?.eq(0)) || !isL2 || !selectedFuturesAddress ) { return null; } + if (positionMarginDelta.gt(freeMargin)) { + throw new Error('insufficient_margin'); + } + const { contracts: { FuturesMarketData }, } = synthetixjs!; @@ -111,6 +116,7 @@ const useGetFuturesPotentialTradeDetails = () => { leverageSide, synthetixjs, orderType, + freeMargin, getPreview, ] ); diff --git a/queries/futures/useGetStats.ts b/queries/futures/useGetStats.ts index f9da501ecf..7533af3e28 100644 --- a/queries/futures/useGetStats.ts +++ b/queries/futures/useGetStats.ts @@ -1,18 +1,18 @@ import { NetworkId } from '@synthetixio/contracts-interface'; -import request, { gql } from 'graphql-request'; import { useQuery, UseQueryOptions } from 'react-query'; +import { ETH_UNIT } from 'constants/network'; import QUERY_KEYS from 'constants/queryKeys'; import Connector from 'containers/Connector'; import useIsL2 from 'hooks/useIsL2'; +import { truncateAddress } from 'utils/formatters/string'; +import logError from 'utils/logError'; import { FUTURES_ENDPOINT_OP_MAINNET } from './constants'; -import { FuturesStat } from './types'; +import { getFuturesStats } from './subgraph'; +import { AccountStat, FuturesStat } from './types'; import { getFuturesEndpoint } from './utils'; -const PAGE_SIZE = 500; -const MAX_QUERY_LIMIT = 5000; - const useGetStats = (homepage?: boolean, options?: UseQueryOptions) => { const { network } = Connector.useContainer(); const isL2 = useIsL2(); @@ -20,38 +20,50 @@ const useGetStats = (homepage?: boolean, options?: UseQueryOptions) => { ? FUTURES_ENDPOINT_OP_MAINNET : getFuturesEndpoint(network?.id as NetworkId); - const query = async (existing: FuturesStat[], skip: number): Promise => { - const response = await request( - futuresEndpoint, - gql` - query userStats($skip: Int!) { - futuresStats(skip: $skip, first: ${PAGE_SIZE}) { - account - pnlWithFeesPaid - liquidations - totalTrades - totalVolume + return useQuery( + QUERY_KEYS.Futures.Stats(network?.id as NetworkId), + async () => { + try { + const response = await getFuturesStats( + futuresEndpoint, + { + first: 1000, + orderBy: 'pnlWithFeesPaid', + orderDirection: 'desc', + }, + { + account: true, + pnl: true, + pnlWithFeesPaid: true, + liquidations: true, + totalTrades: true, + totalVolume: true, } - } - `, - { skip } - ); - if (response) { - const combined = [...existing, ...response.futuresStats]; - if (response.futuresStats?.length === PAGE_SIZE && skip + PAGE_SIZE < MAX_QUERY_LIMIT) { - return query(combined, skip + PAGE_SIZE); + ); + + const stats = response.map((stat: FuturesStat, i: number) => ({ + ...stat, + trader: stat.account, + traderShort: truncateAddress(stat.account), + pnl: stat.pnlWithFeesPaid.div(ETH_UNIT), + totalVolume: stat.totalVolume.div(ETH_UNIT), + totalTrades: stat.totalTrades.toNumber(), + liquidations: stat.liquidations.toNumber(), + rank: i + 1, + rankText: (i + 1).toString(), + })); + + return stats as AccountStat[]; + } catch (e) { + logError(e); + return []; } - return combined; + }, + { + enabled: homepage || isL2, + ...options, } - return []; - }; - - return useQuery({ - queryKey: QUERY_KEYS.Futures.Stats(network?.id as NetworkId), - queryFn: () => query([], 0), - enabled: homepage || isL2, - ...options, - }); + ); }; export default useGetStats; diff --git a/queries/futures/useLeaderboard.ts b/queries/futures/useLeaderboard.ts new file mode 100644 index 0000000000..773c35065f --- /dev/null +++ b/queries/futures/useLeaderboard.ts @@ -0,0 +1,117 @@ +import { NetworkId } from '@synthetixio/contracts-interface'; +import { wei } from '@synthetixio/wei'; +import request, { gql } from 'graphql-request'; +import { useQuery, UseQueryOptions } from 'react-query'; + +import QUERY_KEYS from 'constants/queryKeys'; +import Connector from 'containers/Connector'; +import { weiFromWei } from 'utils/formatters/number'; +import { truncateAddress } from 'utils/formatters/string'; +import logError from 'utils/logError'; + +import { AccountStat, FuturesStat } from './types'; +import { getFuturesEndpoint } from './utils'; + +const mapStat = (stat: FuturesStat, i: number) => ({ + ...stat, + trader: stat.account, + traderShort: truncateAddress(stat.account), + pnl: weiFromWei(stat.pnlWithFeesPaid), + totalVolume: weiFromWei(stat.totalVolume), + totalTrades: wei(stat.totalTrades).toNumber(), + liquidations: wei(stat.liquidations).toNumber(), + rank: i + 1, + rankText: (i + 1).toString(), +}); + +type LeaderboardPart = 'top' | 'bottom' | 'wallet' | 'search' | 'all'; + +type LeaderboardResult = { + [part in LeaderboardPart]: AccountStat[]; +}; + +export const DEFAULT_LEADERBOARD_DATA = { + top: [], + bottom: [], + wallet: [], + search: [], + all: [], +}; + +const useLeaderboard = (searchTerm: string, options?: UseQueryOptions) => { + const { network, walletAddress } = Connector.useContainer(); + const futuresEndpoint = getFuturesEndpoint(network?.id as NetworkId); + + return useQuery( + QUERY_KEYS.Futures.Leaderboard(network?.id as NetworkId, searchTerm), + async () => { + try { + const qry = gql` + query leaderboardStats($account: String!, $searchTerm: String!) { + top: futuresStats(orderBy: pnlWithFeesPaid, orderDirection: desc, first: 100) { + account + pnl + pnlWithFeesPaid + liquidations + totalTrades + totalVolume + } + bottom: futuresStats(orderBy: pnlWithFeesPaid, orderDirection: asc, first: 100) { + account + pnl + pnlWithFeesPaid + liquidations + totalTrades + totalVolume + } + wallet: futuresStats(where: { account: $account }) { + account + pnl + pnlWithFeesPaid + liquidations + totalTrades + totalVolume + } + search: futuresStats(where: { account_contains: $searchTerm }) { + account + pnl + pnlWithFeesPaid + liquidations + totalTrades + totalVolume + } + } + `; + + const response: Record = await request( + futuresEndpoint, + qry, + { + account: walletAddress ?? '', + searchTerm, + } + ); + + const stats: LeaderboardResult = { + top: response.top.map(mapStat), + bottom: response.bottom.map(mapStat), + wallet: response.wallet.map(mapStat), + search: response.search.map(mapStat), + all: [], + }; + + stats.all = [...stats.top, ...stats.bottom, ...stats.wallet, ...stats.search]; + + return stats; + } catch (e) { + logError(e); + return DEFAULT_LEADERBOARD_DATA; + } + }, + { + ...options, + } + ); +}; + +export default useLeaderboard; diff --git a/queries/futures/useQueryCrossMarginAccount.ts b/queries/futures/useQueryCrossMarginAccount.ts index 33feeb0f01..d135888f1f 100644 --- a/queries/futures/useQueryCrossMarginAccount.ts +++ b/queries/futures/useQueryCrossMarginAccount.ts @@ -1,10 +1,7 @@ -import { NetworkId } from '@synthetixio/contracts-interface'; -import request, { gql } from 'graphql-request'; -import { useQuery } from 'react-query'; +import { useEffect, useState } from 'react'; import { useRecoilState } from 'recoil'; import { CROSS_MARGIN_ACCOUNT_FACTORY } from 'constants/address'; -import QUERY_KEYS from 'constants/queryKeys'; import Connector from 'containers/Connector'; import usePersistedRecoilState from 'hooks/usePersistedRecoilState'; import { crossMarginAccountsState, futuresAccountState } from 'store/futures'; @@ -12,116 +9,137 @@ import logError from 'utils/logError'; import useCrossMarginAccountContracts from '../../hooks/useCrossMarginContracts'; import { FuturesAccountState } from './types'; -import { getFuturesEndpoint } from './utils'; const SUPPORTED_NETWORKS = Object.keys(CROSS_MARGIN_ACCOUNT_FACTORY); export default function useQueryCrossMarginAccount() { const { crossMarginContractFactory } = useCrossMarginAccountContracts(); - const { network, walletAddress } = Connector.useContainer(); - const futuresEndpoint = getFuturesEndpoint(network?.id as NetworkId); + const { network, walletAddress, signer } = Connector.useContainer(); const [futuresAccount, setFuturesAccount] = useRecoilState(futuresAccountState); const [storedCrossMarginAccounts, setStoredCrossMarginAccount] = usePersistedRecoilState( crossMarginAccountsState ); - - return useQuery( - QUERY_KEYS.Futures.CrossMarginAccount( - walletAddress || '', - crossMarginContractFactory?.address || '' - ), - async () => { - // TODO: Improve Cross margin loading states - - if (!SUPPORTED_NETWORKS.includes(String(network.id))) { - const accountState: FuturesAccountState = { - crossMarginAvailable: false, - crossMarginAddress: null, - walletAddress, - status: 'complete', - }; - setFuturesAccount(accountState); - return null; + const [retryCount, setRetryCount] = useState(0); + + const handleAccountQuery = async () => { + const queryAccountFromLogs = async (address: string): Promise => { + if (!signer || !crossMarginContractFactory) return null; + const accountFilter = crossMarginContractFactory.filters.NewAccount(address); + if (accountFilter) { + const logs = await crossMarginContractFactory.queryFilter(accountFilter); + if (logs.length) { + return logs[0].args?.[1] || null; + } } + return null; + }; - if (!crossMarginContractFactory?.address || !walletAddress) { - setFuturesAccount({ - ...futuresAccount, - status: 'idle', - crossMarginAddress: null, - crossMarginAvailable: true, - walletAddress, - }); - return null; - } + if (!SUPPORTED_NETWORKS.includes(String(network.id))) { + const accountState: FuturesAccountState = { + crossMarginAvailable: false, + crossMarginAddress: null, + walletAddress, + status: 'complete', + }; + setFuturesAccount(accountState); + return null; + } - const existing = crossMarginContractFactory?.address - ? storedCrossMarginAccounts[crossMarginContractFactory?.address]?.[walletAddress] - : null; + if (!crossMarginContractFactory?.address || !walletAddress) { + setFuturesAccount({ + ...futuresAccount, + status: 'idle', + crossMarginAddress: null, + crossMarginAvailable: true, + walletAddress, + }); + return null; + } - if (existing) { - setFuturesAccount({ - ...futuresAccount, - status: 'complete', - crossMarginAddress: existing, - crossMarginAvailable: true, - walletAddress, - }); - return existing; - } + const existing = crossMarginContractFactory?.address + ? storedCrossMarginAccounts[crossMarginContractFactory?.address]?.[walletAddress] + : null; + if (existing) { setFuturesAccount({ ...futuresAccount, - status: futuresAccount.status === 'initial-fetch' ? 'initial-fetch' : 'refetching', - crossMarginAddress: null, + status: 'complete', + crossMarginAddress: existing, crossMarginAvailable: true, walletAddress, }); + return existing; + } - try { - const response = await request( - futuresEndpoint, - gql` - query crossMarginAccounts($owner: String!) { - crossMarginAccounts(where: { owner: $owner }) { - id - owner - } - } - `, - { owner: walletAddress } - ); - - const crossMarginAccount = response?.crossMarginAccounts[0]?.id || null; - - const existingAccounts = crossMarginContractFactory - ? storedCrossMarginAccounts[crossMarginContractFactory.address] - : {}; - - setStoredCrossMarginAccount({ - ...storedCrossMarginAccounts, - [crossMarginContractFactory!.address]: { - ...existingAccounts, - [walletAddress]: crossMarginAccount, - }, - }); + setFuturesAccount({ + ...futuresAccount, + status: futuresAccount.status === 'initial-fetch' ? 'initial-fetch' : 'refetching', + crossMarginAddress: null, + crossMarginAvailable: true, + walletAddress, + }); + + const crossMarginAccount = await queryAccountFromLogs(walletAddress); + + const existingAccounts = crossMarginContractFactory + ? storedCrossMarginAccounts[crossMarginContractFactory.address] + : {}; + + if (crossMarginAccount) { + setStoredCrossMarginAccount({ + ...storedCrossMarginAccounts, + [crossMarginContractFactory!.address]: { + ...existingAccounts, + [walletAddress]: crossMarginAccount, + }, + }); + } - const accountState: FuturesAccountState = { - status: 'complete', - crossMarginAvailable: true, - crossMarginAddress: crossMarginAccount, - walletAddress, - }; - setFuturesAccount(accountState); - return crossMarginAccount; - } catch (err) { + const accountState: FuturesAccountState = { + status: 'complete', + crossMarginAvailable: true, + crossMarginAddress: crossMarginAccount, + walletAddress, + }; + setFuturesAccount(accountState); + return crossMarginAccount; + }; + + const queryAccount = async () => { + try { + return await handleAccountQuery(); + } catch (err) { + // This a hacky workaround to deal with the delayed Metamask error + // which causes the logs query to fail on network switching + // https://github.com/MetaMask/metamask-extension/issues/13375#issuecomment-1046125113 + if (err.message.includes('underlying network changed') && retryCount < 5) { + setTimeout(() => { + setRetryCount(retryCount + 1); + }, 500); + } else { + setRetryCount(0); logError(err); setFuturesAccount({ ...futuresAccount, status: 'error', }); + return null; } } - ); + }; + + useEffect(() => { + queryAccount(); + // eslint-disable-next-line + }, [walletAddress, crossMarginContractFactory?.address]); + + useEffect(() => { + if (retryCount) { + queryAccount(); + } + // eslint-disable-next-line + }, [retryCount]); + + return queryAccount; } diff --git a/queries/futures/utils.ts b/queries/futures/utils.ts index 62e8d7c1ec..62d6f044b4 100644 --- a/queries/futures/utils.ts +++ b/queries/futures/utils.ts @@ -2,18 +2,27 @@ import { BigNumber } from '@ethersproject/bignumber'; import { ContractsMap, NetworkId } from '@synthetixio/contracts-interface'; import Wei, { wei } from '@synthetixio/wei'; import { utils } from 'ethers'; +import { parseBytes32String } from 'ethers/lib/utils'; import { chain } from 'wagmi'; import { ETH_UNIT } from 'constants/network'; import { MarketClosureReason } from 'hooks/useMarketClosed'; import { SynthsTrades, SynthsVolumes } from 'queries/synths/type'; -import { formatDollars, zeroBN } from 'utils/formatters/number'; -import { FuturesMarketAsset } from 'utils/futures'; +import { formatCurrency, formatDollars, weiFromWei, zeroBN } from 'utils/formatters/number'; +import { + FuturesMarketAsset, + getDisplayAsset, + getMarketName, + MarketKeyByAsset, +} from 'utils/futures'; import { SECONDS_PER_DAY, FUTURES_ENDPOINTS } from './constants'; import { FuturesHourlyStatResult, FuturesMarginTransferResult, + FuturesOrderResult, + FuturesOrderType, + FuturesPositionResult, FuturesTradeResult, } from './subgraph'; import { @@ -23,11 +32,13 @@ import { PositionDetail, PositionSide, FuturesVolumes, - RawPosition, PositionHistory, FundingRateUpdate, FuturesTrade, MarginTransfer, + FuturesMarket, + FuturesOrder, + FuturesOrderTypeDisplay, } from './types'; export const getFuturesEndpoint = (networkId: NetworkId): string => { @@ -58,7 +69,9 @@ export const mapFuturesPosition = ( liquidationPrice, profitLoss, } = positionDetail; - const roi = wei(profitLoss).add(wei(accruedFunding)); + const initialMargin = wei(margin); + const pnl = wei(profitLoss).add(wei(accruedFunding)); + const pnlPct = initialMargin.gt(0) ? pnl.div(wei(initialMargin)) : wei(0); return { asset, order: !!orderPending @@ -76,17 +89,19 @@ export const mapFuturesPosition = ( : { canLiquidatePosition: !!canLiquidatePosition, side: wei(size).gt(zeroBN) ? PositionSide.LONG : PositionSide.SHORT, - notionalValue: wei(notionalValue), + notionalValue: wei(notionalValue).abs(), accruedFunding: wei(accruedFunding), - initialMargin: wei(margin), + initialMargin, profitLoss: wei(profitLoss), fundingIndex: Number(fundingIndex), lastPrice: wei(lastPrice), size: wei(size).abs(), liquidationPrice: wei(liquidationPrice), - initialLeverage: wei(size).mul(wei(lastPrice)).div(wei(margin)).abs(), - roi, - roiChange: wei(margin).eq(zeroBN) ? zeroBN : roi.div(wei(margin)), + initialLeverage: initialMargin.gt(0) + ? wei(size).mul(wei(lastPrice)).div(initialMargin).abs() + : wei(0), + pnl, + pnlPct, marginRatio: wei(notionalValue).eq(zeroBN) ? zeroBN : wei(remainingMargin).div(wei(notionalValue).abs()), @@ -97,6 +112,48 @@ export const mapFuturesPosition = ( }; }; +const mapOrderType = (orderType: Partial): FuturesOrderTypeDisplay => { + return orderType === 'NextPrice' + ? 'Next Price' + : orderType === 'StopMarket' + ? 'Stop Market' + : orderType; +}; + +export const mapFuturesOrders = ( + o: FuturesOrderResult, + marketInfo: FuturesMarket | undefined +): FuturesOrder => { + const asset: FuturesMarketAsset = parseBytes32String(o.asset) as FuturesMarketAsset; + const size = weiFromWei(o.size); + const targetPrice = weiFromWei(o.targetPrice ?? 0); + const targetRoundId = new Wei(o.targetRoundId, 0); + const currentRoundId = wei(marketInfo?.currentRoundId ?? 0); + const marginDelta = weiFromWei(o.marginDelta); + return { + ...o, + asset, + targetRoundId, + marginDelta, + targetPrice: targetPrice.gt(0) ? targetPrice : null, + size: size, + market: getMarketName(asset), + marketKey: MarketKeyByAsset[asset], + orderType: mapOrderType(o.orderType), + sizeTxt: formatCurrency(asset, size.abs(), { + currencyKey: getDisplayAsset(asset) ?? '', + minDecimals: size.abs().lt(0.01) ? 4 : 2, + }), + targetPriceTxt: formatDollars(targetPrice), + side: size.gt(0) ? PositionSide.LONG : PositionSide.SHORT, + isStale: o.orderType === 'NextPrice' && currentRoundId.gte(wei(o.targetRoundId).add(2)), + isExecutable: + o.orderType === 'NextPrice' && targetRoundId + ? currentRoundId.eq(targetRoundId) || currentRoundId.eq(targetRoundId.add(1)) + : false, + }; +}; + type MarketSizes = { short: BigNumber; long: BigNumber; @@ -290,92 +347,73 @@ export const mapMarginTransfers = ( ); }; -export const mapTradeHistory = ( - futuresPositions: RawPosition[], - openOnly: boolean +export const mapFuturesPositions = ( + futuresPositions: FuturesPositionResult[] ): PositionHistory[] => { - return ( - futuresPositions - ?.map( - ({ - id, - lastTxHash, - timestamp, - market, - asset, - account, - isOpen, - isLiquidated, - size, - feesPaid, - netFunding, - netTransfers, - totalDeposits, - initialMargin, - margin, - entryPrice, - exitPrice, - pnl, - pnlWithFeesPaid, - openTimestamp, - closeTimestamp, - totalVolume, - trades, - avgEntryPrice, - }: RawPosition) => { - const entryPriceWei = new Wei(entryPrice, 18, true); - const exitPriceWei = new Wei(exitPrice || 0, 18, true); - const sizeWei = new Wei(size, 18, true); - const feesWei = new Wei(feesPaid || 0, 18, true); - const netFundingWei = new Wei(netFunding || 0, 18, true); - const netTransfersWei = new Wei(netTransfers || 0, 18, true); - const totalDepositsWei = new Wei(totalDeposits || 0, 18, true); - const initialMarginWei = new Wei(initialMargin, 18, true); - const marginWei = new Wei(margin, 18, true); - const pnlWei = new Wei(pnl, 18, true); - const pnlWithFeesPaidWei = new Wei(pnlWithFeesPaid, 18, true); - const totalVolumeWei = new Wei(totalVolume, 18, true); - const avgEntryPriceWei = new Wei(avgEntryPrice, 18, true); - return { - id: Number(id.split('-')[1].toString()), - transactionHash: lastTxHash, - timestamp: timestamp * 1000, - openTimestamp: openTimestamp * 1000, - closeTimestamp: closeTimestamp * 1000, - market, - asset: utils.parseBytes32String(asset) as FuturesMarketAsset, - account, - isOpen, - isLiquidated, - size: sizeWei.abs(), - feesPaid: feesWei, - netFunding: netFundingWei, - netTransfers: netTransfersWei, - totalDeposits: totalDepositsWei, - initialMargin: initialMarginWei, - margin: marginWei, - entryPrice: entryPriceWei, - exitPrice: exitPriceWei, - pnl: pnlWei, - pnlWithFeesPaid: pnlWithFeesPaidWei, - totalVolume: totalVolumeWei, - trades, - avgEntryPrice: avgEntryPriceWei, - leverage: marginWei.eq(wei(0)) - ? wei(0) - : sizeWei.mul(entryPriceWei).div(marginWei).abs(), - side: sizeWei.gte(wei(0)) ? PositionSide.LONG : PositionSide.SHORT, - }; - } - ) - .filter(({ isOpen }: { isOpen: boolean }) => { - if (openOnly) { - return isOpen; - } else { - return true; - } - }) - .filter(({ id }: { id: number }) => id !== 0) ?? null + return futuresPositions.map( + ({ + id, + lastTxHash, + openTimestamp, + closeTimestamp, + timestamp, + market, + asset, + account, + abstractAccount, + accountType, + isOpen, + isLiquidated, + trades, + totalVolume, + size, + initialMargin, + margin, + pnl, + feesPaid, + netFunding, + pnlWithFeesPaid, + netTransfers, + totalDeposits, + entryPrice, + avgEntryPrice, + exitPrice, + }: FuturesPositionResult) => { + const entryPriceWei = weiFromWei(entryPrice); + const feesWei = weiFromWei(feesPaid || 0); + const sizeWei = weiFromWei(size); + const marginWei = weiFromWei(margin); + return { + id: Number(id.split('-')[1].toString()), + transactionHash: lastTxHash, + timestamp: timestamp.mul(1000).toNumber(), + openTimestamp: openTimestamp.mul(1000).toNumber(), + closeTimestamp: closeTimestamp?.mul(1000).toNumber(), + market, + asset: utils.parseBytes32String(asset) as FuturesMarketAsset, + account, + abstractAccount, + accountType, + isOpen, + isLiquidated, + size: sizeWei.abs(), + feesPaid: feesWei, + netFunding: weiFromWei(netFunding || 0), + netTransfers: weiFromWei(netTransfers || 0), + totalDeposits: weiFromWei(totalDeposits || 0), + initialMargin: weiFromWei(initialMargin), + margin: marginWei, + entryPrice: entryPriceWei, + exitPrice: weiFromWei(exitPrice || 0), + pnl: weiFromWei(pnl), + pnlWithFeesPaid: weiFromWei(pnlWithFeesPaid), + totalVolume: weiFromWei(totalVolume), + trades: trades.toNumber(), + avgEntryPrice: weiFromWei(avgEntryPrice), + leverage: marginWei.eq(wei(0)) ? wei(0) : sizeWei.mul(entryPriceWei).div(marginWei).abs(), + side: sizeWei.gte(wei(0)) ? PositionSide.LONG : PositionSide.SHORT, + }; + } ); }; @@ -392,10 +430,12 @@ export const mapTrades = (futuresTrades: FuturesTradeResult[]): FuturesTrade[] = pnl, feesPaid, orderType, + accountType, }: FuturesTradeResult) => { return { + asset, + accountType, size: new Wei(size, 18, true), - asset: asset, price: new Wei(price, 18, true), txnHash: id.split('-')[0].toString(), timestamp: timestamp, @@ -404,7 +444,7 @@ export const mapTrades = (futuresTrades: FuturesTradeResult[]): FuturesTrade[] = side: size.gt(0) ? PositionSide.LONG : PositionSide.SHORT, pnl: new Wei(pnl, 18, true), feesPaid: new Wei(feesPaid, 18, true), - orderType: orderType, + orderType: mapOrderType(orderType), }; } ); diff --git a/sections/dashboard/FuturesHistoryTable/FuturesHistoryTable.tsx b/sections/dashboard/FuturesHistoryTable/FuturesHistoryTable.tsx index f2a81a515b..e0b1e3c080 100644 --- a/sections/dashboard/FuturesHistoryTable/FuturesHistoryTable.tsx +++ b/sections/dashboard/FuturesHistoryTable/FuturesHistoryTable.tsx @@ -2,40 +2,52 @@ import { wei } from '@synthetixio/wei'; import { utils as ethersUtils } from 'ethers'; import * as _ from 'lodash/fp'; import Link from 'next/link'; -import React, { FC, useMemo, ReactElement } from 'react'; +import { FC, useMemo, ReactElement, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { CellProps } from 'react-table'; import { useRecoilValue } from 'recoil'; import styled from 'styled-components'; import Currency from 'components/Currency'; +import { DesktopOnlyView, MobileOrTabletView } from 'components/Media'; +import FuturesIcon from 'components/Nav/FuturesIcon'; import Table, { TableNoResults } from 'components/Table'; import PositionType from 'components/Text/PositionType'; import { DEFAULT_CRYPTO_DECIMALS } from 'constants/defaults'; import { ETH_UNIT } from 'constants/network'; import { NO_VALUE } from 'constants/placeholder'; import ROUTES from 'constants/routes'; +import Connector from 'containers/Connector'; import useIsL2 from 'hooks/useIsL2'; import useNetworkSwitcher from 'hooks/useNetworkSwitcher'; import useSelectedPriceCurrency from 'hooks/useSelectedPriceCurrency'; import { FuturesTrade } from 'queries/futures/types'; import useGetAllFuturesTradesForAccount from 'queries/futures/useGetAllFuturesTradesForAccount'; +import TradeDrawer from 'sections/futures/MobileTrade/drawers/TradeDrawer'; import { TradeStatus } from 'sections/futures/types'; -import { futuresAccountTypeState, selectedFuturesAddressState } from 'store/futures'; +import { futuresAccountTypeState } from 'store/futures'; +import { formatShortDateWithoutYear } from 'utils/formatters/date'; import { formatCryptoCurrency, formatDollars } from 'utils/formatters/number'; -import { FuturesMarketAsset, getMarketName, isDecimalFour, MarketKeyByAsset } from 'utils/futures'; +import { + FuturesMarketAsset, + getDisplayAsset, + getMarketName, + isDecimalFour, + MarketKeyByAsset, +} from 'utils/futures'; import TimeDisplay from '../../futures/Trades/TimeDisplay'; const FuturesHistoryTable: FC = () => { - const selectedFuturesAddress = useRecoilValue(selectedFuturesAddressState); + const [selectedTrade, setSelectedTrade] = useState(); const accountType = useRecoilValue(futuresAccountTypeState); + const { walletAddress } = Connector.useContainer(); const { t } = useTranslation(); const isL2 = useIsL2(); const { selectPriceCurrencyRate, selectedPriceCurrency } = useSelectedPriceCurrency(); const { switchToL2 } = useNetworkSwitcher(); - const futuresTradesQuery = useGetAllFuturesTradesForAccount(selectedFuturesAddress); + const futuresTradesQuery = useGetAllFuturesTradesForAccount(walletAddress); const trades: FuturesTrade[] = useMemo( () => (futuresTradesQuery.isSuccess ? futuresTradesQuery?.data ?? [] : []), [futuresTradesQuery.isSuccess, futuresTradesQuery.data] @@ -48,14 +60,15 @@ const FuturesHistoryTable: FC = () => { return { ...trade, asset: parsedAsset, + displayAsset: getDisplayAsset(parsedAsset), market: getMarketName(parsedAsset), price: Number(trade.price?.div(ETH_UNIT)), size: Number(trade.size.div(ETH_UNIT).abs()), timestamp: Number(trade.timestamp.mul(1000)), + date: formatShortDateWithoutYear(new Date(trade.timestamp.mul(1000).toNumber())), pnl: trade.pnl.div(ETH_UNIT), feesPaid: trade.feesPaid.div(ETH_UNIT), id: trade.txnHash, - orderType: trade.orderType === 'NextPrice' ? 'Next Price' : trade.orderType, status: trade.positionClosed ? TradeStatus.CLOSED : TradeStatus.OPEN, }; }), @@ -66,147 +79,263 @@ const FuturesHistoryTable: FC = () => { _.isNil(prop) ?

{NO_VALUE}

: children; return ( - - - {t('common.l2-cta')} -
{t('homepage.l2.cta-buttons.switch-l2')}
- - ) : ( - - {t('dashboard.history.futures-history-table.no-result')} - -
{t('common.perp-cta')}
- -
- ) - } - highlightRowsOnHover - sortBy={[{ id: 'dateTime', asec: true }]} - columns={[ - { - Header:
{t('dashboard.history.futures-history-table.date-time')}
, - accessor: 'dateTime', - Cell: (cellProps: CellProps) => { - return conditionalRender( - cellProps.row.original.timestamp, - - - - ); - }, - width: 100, - }, - { - Header:
{t('dashboard.history.futures-history-table.market')}
, - accessor: 'market', - Cell: (cellProps: CellProps) => { - return conditionalRender( - cellProps.row.original.asset, - - {cellProps.row.original.asset && ( + <> + + + + {t('common.l2-cta')} +
{t('homepage.l2.cta-buttons.switch-l2')}
+ + ) : ( + + {t('dashboard.history.futures-history-table.no-result')} + +
{t('common.perp-cta')}
+ +
+ ) + } + highlightRowsOnHover + sortBy={[{ id: 'dateTime', asec: true }]} + columns={[ + { + Header:
{t('dashboard.history.futures-history-table.date-time')}
, + accessor: 'dateTime', + Cell: (cellProps: CellProps) => { + return conditionalRender( + cellProps.row.original.timestamp, + + + + ); + }, + width: 100, + }, + { + Header:
{t('dashboard.history.futures-history-table.market')}
, + accessor: 'market', + Cell: (cellProps: CellProps) => { + return conditionalRender( + cellProps.row.original.asset, <> - - - - {cellProps.row.original.market} + {cellProps.row.original.asset && ( + + + {cellProps.value} + + + )} - )} -
- ); - }, - width: 120, - }, - { - Header:
{t('dashboard.history.futures-history-table.side')}
, - accessor: 'side', - Cell: (cellProps: CellProps) => { - return conditionalRender( - cellProps.row.original.side, - - ); - }, - width: 70, - }, - { - Header:
{t('dashboard.history.futures-history-table.size')}
, - accessor: 'size', - Cell: (cellProps: CellProps) => { - return conditionalRender( - cellProps.row.original.size, - <>{formatCryptoCurrency(cellProps.value)} - ); - }, - width: 100, - }, - { - Header:
{t('dashboard.history.futures-history-table.price')}
, - accessor: 'price', - Cell: (cellProps: CellProps) => { - const formatOptions = isDecimalFour(cellProps.row.original.asset) - ? { sign: '$', minDecimals: DEFAULT_CRYPTO_DECIMALS } - : { sign: '$' }; - return conditionalRender( - cellProps.row.original.price, - <>{formatDollars(cellProps.value, formatOptions)} - ); - }, - width: 120, - }, - { - Header:
{t('dashboard.history.futures-history-table.pnl')}
, - accessor: 'pnl', - Cell: (cellProps: CellProps) => { - return conditionalRender( - cellProps.row.original.pnl, - cellProps.row.original.pnl.eq(wei(0)) ? ( - -- - ) : ( - {formatDollars(cellProps.value)} - ) - ); - }, - width: 120, - }, - { - Header:
{t('dashboard.history.futures-history-table.fees')}
, - accessor: 'fees', - Cell: (cellProps: CellProps) => { - return conditionalRender( - cellProps.row.original.feesPaid, - - ); - }, - width: 120, - }, - { - Header:
{t('dashboard.history.futures-history-table.order-type')}
, - accessor: 'orderType', - Cell: (cellProps: CellProps) => { - return conditionalRender( - cellProps.row.original.orderType, - {cellProps.row.original.orderType} - ); - }, - width: 80, - }, - ]} - /> -
+ ); + }, + width: 120, + }, + { + Header:
{t('dashboard.history.futures-history-table.side')}
, + accessor: 'side', + Cell: (cellProps: CellProps) => { + return conditionalRender( + cellProps.row.original.side, + + ); + }, + width: 70, + }, + { + Header:
{t('dashboard.history.futures-history-table.size')}
, + accessor: 'size', + Cell: (cellProps: CellProps) => { + return conditionalRender( + cellProps.row.original.size, + <>{formatCryptoCurrency(cellProps.value)} + ); + }, + width: 100, + }, + { + Header:
{t('dashboard.history.futures-history-table.price')}
, + accessor: 'price', + Cell: (cellProps: CellProps) => { + const formatOptions = isDecimalFour(cellProps.row.original.asset) + ? { sign: '$', minDecimals: DEFAULT_CRYPTO_DECIMALS } + : { sign: '$' }; + return conditionalRender( + cellProps.row.original.price, + <>{formatDollars(cellProps.value, formatOptions)} + ); + }, + width: 120, + }, + { + Header:
{t('dashboard.history.futures-history-table.pnl')}
, + accessor: 'pnl', + Cell: (cellProps: CellProps) => { + return conditionalRender( + cellProps.row.original.pnl, + cellProps.row.original.pnl.eq(wei(0)) ? ( + -- + ) : ( + + {formatDollars(cellProps.value)} + + ) + ); + }, + width: 120, + }, + { + Header:
{t('dashboard.history.futures-history-table.fees')}
, + accessor: 'fees', + Cell: (cellProps: CellProps) => { + return conditionalRender( + cellProps.row.original.feesPaid, + + ); + }, + width: 120, + }, + { + Header:
{t('dashboard.history.futures-history-table.type')}
, + accessor: 'orderType', + Cell: (cellProps: CellProps) => { + return conditionalRender( + cellProps.row.original.orderType, + {cellProps.row.original.orderType} + ); + }, + width: 80, + }, + ]} + /> + + + + + { + setSelectedTrade(row.original); + }} + isLoading={futuresTradesQuery.isLoading} + noResultsMessage={ + !isL2 ? ( + + {t('common.l2-cta')} +
{t('homepage.l2.cta-buttons.switch-l2')}
+
+ ) : ( + + {t('dashboard.history.futures-history-table.no-result')} + +
{t('common.perp-cta')}
+ +
+ ) + } + sortBy={[{ id: 'dateTime', asc: false }]} + columns={[ + { + Header:
{t('dashboard.history.futures-history-table.asset')}
, + accessor: 'displayAsset', + Cell: (cellProps: CellProps) => { + return conditionalRender( + cellProps.row.original.asset, + <> + {cellProps.row.original.asset && ( + + + + {cellProps.value} + + + {cellProps.row.original.date} + + )} + + ); + }, + width: 60, + }, + { + Header: () => ( +
+
{t('dashboard.history.futures-history-table.side')}
+
{t('dashboard.history.futures-history-table.type')}
+
+ ), + accessor: 'side', + Cell: (cellProps: CellProps) => { + return conditionalRender( + cellProps.row.original.side, +
+ +
{cellProps.row.original.orderType}
+
+ ); + }, + width: 60, + }, + { + Header: () => ( +
+
{t('dashboard.history.futures-history-table.size')}
+
{t('dashboard.history.futures-history-table.price')}
+
+ ), + accessor: 'size', + Cell: (cellProps: CellProps) => { + return conditionalRender( + cellProps.row.original.price, +
+
{formatCryptoCurrency(cellProps.value)}
+
{formatDollars(cellProps.row.original.price ?? 0)}
+
+ ); + }, + width: 60, + }, + { + Header:
{t('dashboard.history.futures-history-table.pnl')}
, + accessor: 'pnl', + Cell: (cellProps: CellProps) => { + return conditionalRender( + cellProps.row.original.pnl, + cellProps.row.original.pnl.eq(wei(0)) ? ( + -- + ) : ( + + {formatDollars(cellProps.value)} + + ) + ); + }, + width: 60, + }, + ]} + /> +
+ setSelectedTrade(undefined)} /> +
+ ); }; @@ -219,12 +348,12 @@ const StyledTimeDisplay = styled.div` const StyledCurrencyIcon = styled(Currency.Icon)` width: 30px; height: 30px; - margin-right: 5px; `; -const IconContainer = styled.div` - grid-column: 1; +const MobileStyledCurrencyIcon = styled(Currency.Icon)` grid-row: 1 / span 2; + width: 20px; + height: 20px; `; const TableContainer = styled.div` @@ -240,22 +369,41 @@ const StyledTable = styled(Table)` margin-bottom: 20px; `; +const MobileStyledTable = styled(Table)` + margin-bottom: 20px; + border-radius: initial; + border-top: none; + border-left: none; + border-right: none; +`; + const StyledText = styled.div` - display: flex; - align-items: center; - grid-column: 2; - grid-row: 1; color: ${(props) => props.theme.colors.selectedTheme.button.text.primary}; `; + const SynthContainer = styled.div` display: flex; align-items: center; - grid-column: 3; - grid-row: 1; column-gap: 5px; margin-left: -4px; `; +const MobileSynthContainer = styled.div` + display: grid; + align-items: center; + grid-template-columns: repeat(2, auto); + grid-template-rows: repeat(2, auto); + column-gap: 5px; + margin-left: -4px; +`; + +const MobileMarketContainer = styled.div` + display: flex; + flex-direction: row; + align-items: center; + gap: 5px; +`; + const PNL = styled.div<{ negative?: boolean; normal?: boolean }>` color: ${(props) => props.normal diff --git a/sections/dashboard/FuturesMarketsTable/FuturesMarketsTable.tsx b/sections/dashboard/FuturesMarketsTable/FuturesMarketsTable.tsx index ab4092d6d7..75cbbf9c95 100644 --- a/sections/dashboard/FuturesMarketsTable/FuturesMarketsTable.tsx +++ b/sections/dashboard/FuturesMarketsTable/FuturesMarketsTable.tsx @@ -12,6 +12,7 @@ import Currency from 'components/Currency'; import { DesktopOnlyView, MobileOrTabletView } from 'components/Media'; import Table from 'components/Table'; import { DEFAULT_CRYPTO_DECIMALS } from 'constants/defaults'; +import ROUTES from 'constants/routes'; import Connector from 'containers/Connector'; import { FundingRateResponse } from 'queries/futures/useGetAverageFundingRateForMarkets'; import { @@ -19,6 +20,7 @@ import { pastRatesState, fundingRatesState, futuresVolumesState, + futuresAccountTypeState, } from 'store/futures'; import { getSynthDescription, @@ -36,6 +38,7 @@ const FuturesMarketsTable: FC = () => { const fundingRates = useRecoilValue(fundingRatesState); const pastRates = useRecoilValue(pastRatesState); const futuresVolumes = useRecoilValue(futuresVolumesState); + const accountType = useRecoilValue(futuresAccountTypeState); let data = useMemo(() => { return futuresMarkets.map((market) => { @@ -75,7 +78,7 @@ const FuturesMarketsTable: FC = () => { data={data} showPagination onTableRowClick={(row) => { - router.push(`/market/?asset=${row.original.asset}`); + router.push(ROUTES.Markets.MarketPair(row.original.asset, accountType)); }} highlightRowsOnHover sortBy={[{ id: 'dailyVolume', desc: true }]} @@ -269,7 +272,7 @@ const FuturesMarketsTable: FC = () => { data={data} showPagination onTableRowClick={(row) => { - router.push(`/market/?asset=${row.original.asset}`); + router.push(ROUTES.Markets.MarketPair(row.original.asset, accountType)); }} columns={[ { diff --git a/sections/dashboard/FuturesPositionsTable/FuturesPositionsTable.tsx b/sections/dashboard/FuturesPositionsTable/FuturesPositionsTable.tsx index 846be2be34..063622217c 100644 --- a/sections/dashboard/FuturesPositionsTable/FuturesPositionsTable.tsx +++ b/sections/dashboard/FuturesPositionsTable/FuturesPositionsTable.tsx @@ -18,30 +18,25 @@ import ROUTES from 'constants/routes'; import Connector from 'containers/Connector'; import useIsL2 from 'hooks/useIsL2'; import useNetworkSwitcher from 'hooks/useNetworkSwitcher'; -import { PositionHistory } from 'queries/futures/types'; +import { FuturesAccountType } from 'queries/futures/subgraph'; import { + positionsState, currentMarketState, - futuresAccountTypeState, futuresMarketsState, - positionsState, + positionHistoryState, } from 'store/futures'; import { formatNumber } from 'utils/formatters/number'; -import { - FuturesMarketAsset, - getSynthDescription, - isDecimalFour, - MarketKeyByAsset, -} from 'utils/futures'; +import { getSynthDescription, isDecimalFour } from 'utils/futures'; import MobilePositionRow from './MobilePositionRow'; type FuturesPositionTableProps = { - futuresPositionHistory: PositionHistory[]; + accountType: FuturesAccountType; showCurrentMarket?: boolean; }; const FuturesPositionsTable: FC = ({ - futuresPositionHistory, + accountType, showCurrentMarket = true, }: FuturesPositionTableProps) => { const { t } = useTranslation(); @@ -51,53 +46,40 @@ const FuturesPositionsTable: FC = ({ const isL2 = useIsL2(); - const futuresPositions = useRecoilValue(positionsState); + const positions = useRecoilValue(positionsState); + const positionHistory = useRecoilValue(positionHistoryState); const futuresMarkets = useRecoilValue(futuresMarketsState); const currentMarket = useRecoilValue(currentMarketState); - const accountType = useRecoilValue(futuresAccountTypeState); let data = useMemo(() => { - const activePositions = futuresPositions?.filter((position) => position?.position) ?? []; - - return activePositions + return positions[accountType] .map((position) => { const market = futuresMarkets.find((market) => market.asset === position.asset); const description = getSynthDescription(position.asset, synthsMap, t); - const positionHistory = futuresPositionHistory?.find((positionHistory) => { + const thisPositionHistory = positionHistory[accountType].find((positionHistory) => { return positionHistory.isOpen && positionHistory.asset === position.asset; }); return { - asset: position.asset, - market: market?.marketName, - marketKey: MarketKeyByAsset[position.asset], + market, + position: position.position, description, - price: market?.price, - size: position?.position?.size, - notionalValue: position?.position?.notionalValue.abs(), - position: position?.position?.side, - lastPrice: position?.position?.lastPrice, - avgEntryPrice: positionHistory?.entryPrice, - liquidationPrice: position?.position?.liquidationPrice, - pnl: position?.position?.profitLoss.add(position?.position?.accruedFunding), - pnlPct: position?.position?.profitLoss - .add(position?.position?.accruedFunding) - .div(position?.position?.initialMargin), - margin: position.accessibleMargin, - leverage: position?.position?.leverage, - isSuspended: market?.isSuspended, - marketClosureReason: market?.marketClosureReason, + avgEntryPrice: thisPositionHistory?.entryPrice, }; }) - .filter((position) => position.asset !== currentMarket || showCurrentMarket); + .filter( + (position) => + position.position && (position?.market?.asset !== currentMarket || showCurrentMarket) + ); }, [ - futuresPositions, + positions, + accountType, futuresMarkets, + positionHistory, currentMarket, synthsMap, t, showCurrentMarket, - futuresPositionHistory, ]); return ( @@ -108,7 +90,7 @@ const FuturesPositionsTable: FC = ({ data={data} showPagination onTableRowClick={(row) => - router.push(ROUTES.Markets.MarketPair(row.original.asset, accountType)) + router.push(ROUTES.Markets.MarketPair(row.original.market.asset, accountType)) } noResultsMessage={ !isL2 ? ( @@ -141,18 +123,14 @@ const FuturesPositionsTable: FC = ({ return ( - + - {cellProps.row.original.market} + {cellProps.row.original.market.marketName} {cellProps.row.original.description} @@ -163,13 +141,11 @@ const FuturesPositionsTable: FC = ({ }, { Header: ( - - {t('dashboard.overview.futures-positions-table.position')} - + {t('dashboard.overview.futures-positions-table.side')} ), accessor: 'position', Cell: (cellProps: CellProps) => { - return ; + return ; }, width: 90, }, @@ -181,14 +157,14 @@ const FuturesPositionsTable: FC = ({ ), accessor: 'notionalValue', Cell: (cellProps: CellProps) => { - const formatOptions = cellProps.row.original.notionalValue.gte(1e6) + const formatOptions = cellProps.row.original.position.notionalValue.gte(1e6) ? { truncation: { divisor: 1e6, unit: 'M' } } : {}; return ( = ({ accessor: 'leverage', Cell: (cellProps: CellProps) => { return ( - {formatNumber(cellProps.row.original.leverage ?? 0)}x + + {formatNumber(cellProps.row.original.position.leverage ?? 0)}x + ); }, width: 90, @@ -219,11 +197,11 @@ const FuturesPositionsTable: FC = ({ Cell: (cellProps: CellProps) => { return ( - +
@@ -241,7 +219,7 @@ const FuturesPositionsTable: FC = ({ ), accessor: 'avgEntryPrice', Cell: (cellProps: CellProps) => { - const formatOptions = isDecimalFour(cellProps.row.original.asset) + const formatOptions = isDecimalFour(cellProps.row.original.market.asset) ? { minDecimals: DEFAULT_CRYPTO_DECIMALS } : {}; return cellProps.row.original.avgEntryPrice === undefined ? ( @@ -266,13 +244,13 @@ const FuturesPositionsTable: FC = ({ ), accessor: 'liquidationPrice', Cell: (cellProps: CellProps) => { - const formatOptions = isDecimalFour(cellProps.row.original.asset) + const formatOptions = isDecimalFour(cellProps.row.original.market.asset) ? { minDecimals: DEFAULT_CRYPTO_DECIMALS } : {}; return ( = ({ ) : ( data.map((row) => ( router.push(`/market/?asset=${row.asset}`)} - key={row.asset} + onClick={() => + router.push(ROUTES.Markets.MarketPair(row.market?.asset ?? 'sETH', accountType)) + } + key={row.market?.asset} row={row} /> )) diff --git a/sections/dashboard/FuturesPositionsTable/MobilePositionRow.tsx b/sections/dashboard/FuturesPositionsTable/MobilePositionRow.tsx index b756bbabcd..c5b861b002 100644 --- a/sections/dashboard/FuturesPositionsTable/MobilePositionRow.tsx +++ b/sections/dashboard/FuturesPositionsTable/MobilePositionRow.tsx @@ -16,18 +16,20 @@ type MobilePositionRowProps = { const MobilePositionRow: React.FC = ({ row, onClick }) => { return ( - + - +
- {formatNumber(row.size ?? 0)} - {getDisplayAsset(row.asset)} + {formatNumber(row.position.size ?? 0)} + {getDisplayAsset(row.market.asset)} - - {row.position ?? PositionSide.LONG}{' '} + + {row.position.side ?? PositionSide.LONG}{' '} @{' '} - {formatNumber(row.leverage ?? 0, { maxDecimals: 1 })}x + + {formatNumber(row.position.leverage ?? 0, { maxDecimals: 1 })}x +
@@ -36,7 +38,7 @@ const MobilePositionRow: React.FC = ({ row, onClick }) =
= ({ row, onClick }) = price={row.avgEntryPrice ?? 0} sign="$" formatOptions={ - isDecimalFour(row.asset) ? { minDecimals: DEFAULT_CRYPTO_DECIMALS } : {} + isDecimalFour(row.market.asset) ? { minDecimals: DEFAULT_CRYPTO_DECIMALS } : {} } />
- +
- +
diff --git a/sections/dashboard/History/History.tsx b/sections/dashboard/History/History.tsx index 1034dfad70..64ab677f44 100644 --- a/sections/dashboard/History/History.tsx +++ b/sections/dashboard/History/History.tsx @@ -3,6 +3,7 @@ import { useTranslation } from 'react-i18next'; import styled from 'styled-components'; import TabButton from 'components/Button/TabButton'; +import { DesktopOnlyView, MobileOrTabletView } from 'components/Media'; import { TabPanel } from 'components/Tab'; import FuturesHistoryTable from '../FuturesHistoryTable'; @@ -42,13 +43,23 @@ const History: FC = () => { return ( <> - - {HISTORY_TABS.map(({ name, label, active, onClick }) => ( - - ))} - + + + {HISTORY_TABS.map(({ name, label, active, onClick }) => ( + + ))} + + + + + {HISTORY_TABS.map(({ name, label, active, onClick }) => ( + + ))} + + + - + @@ -58,11 +69,13 @@ const History: FC = () => { ); }; -const TabButtonsContainer = styled.div` +const TabButtonsContainer = styled.div<{ mobile?: boolean }>` display: flex; margin-top: 16px; margin-bottom: 16px; + margin-left: ${(props) => (props.mobile ? '16px' : '0')}; + & > button { height: 38px; font-size: 13px; diff --git a/sections/dashboard/Markets/Markets.tsx b/sections/dashboard/Markets/Markets.tsx index 0ec19b3001..3de3441838 100644 --- a/sections/dashboard/Markets/Markets.tsx +++ b/sections/dashboard/Markets/Markets.tsx @@ -1,11 +1,10 @@ import { FC, useState, useMemo } from 'react'; import { useTranslation } from 'react-i18next'; -import { useRecoilValue } from 'recoil'; import styled from 'styled-components'; import TabButton from 'components/Button/TabButton'; +import { DesktopOnlyView, MobileOrTabletView } from 'components/Media'; import { TabPanel } from 'components/Tab'; -import { ratesState } from 'store/futures'; import FuturesMarketsTable from '../FuturesMarketsTable'; import SpotMarketsTable from '../SpotMarketsTable'; @@ -18,8 +17,6 @@ export enum MarketsTab { const Markets: FC = () => { const { t } = useTranslation(); - const exchangeRates = useRecoilValue(ratesState); - const [activeMarketsTab, setActiveMarketsTab] = useState(MarketsTab.FUTURES); const MARKETS_TABS = useMemo( @@ -46,27 +43,39 @@ const Markets: FC = () => { return ( <> - - {MARKETS_TABS.map(({ name, label, active, onClick }) => ( - - ))} - + + + {MARKETS_TABS.map(({ name, label, active, onClick }) => ( + + ))} + + + + + {MARKETS_TABS.map(({ name, label, active, onClick }) => ( + + ))} + + + - + ); }; -const TabButtonsContainer = styled.div` +const TabButtonsContainer = styled.div<{ mobile?: boolean }>` display: flex; margin-top: 16px; margin-bottom: 16px; + margin-left: ${(props) => (props.mobile ? '16px' : '0')}; + & > button { height: 38px; font-size: 13px; diff --git a/sections/dashboard/MobileDashboard/MobileDashboard.tsx b/sections/dashboard/MobileDashboard/MobileDashboard.tsx index c0d1c89f11..a17172794f 100644 --- a/sections/dashboard/MobileDashboard/MobileDashboard.tsx +++ b/sections/dashboard/MobileDashboard/MobileDashboard.tsx @@ -1,16 +1,13 @@ -import React from 'react'; +import { FC } from 'react'; import { useRecoilState } from 'recoil'; import { CompetitionBanner } from 'sections/shared/components/CompetitionBanner'; import { activePositionsTabState } from 'store/ui'; -import { MarketsTab } from '../Markets/Markets'; -import FuturesMarkets from './FuturesMarkets'; import OpenPositions from './OpenPositions'; import Portfolio from './Portfolio'; -import SpotMarkets from './SpotMarkets'; -const MobileDashboard: React.FC = () => { +const MobileDashboard: FC = () => { // in the mobile dashboard, there are no differences between positions and markets tab const [activePositionsTab, setActivePositionsTab] = useRecoilState(activePositionsTabState); @@ -22,8 +19,6 @@ const MobileDashboard: React.FC = () => { activePositionsTab={activePositionsTab} setActivePositionsTab={setActivePositionsTab} /> - {activePositionsTab === MarketsTab.FUTURES && } - {activePositionsTab === MarketsTab.SPOT && }
); }; diff --git a/sections/dashboard/MobileDashboard/OpenPositions.tsx b/sections/dashboard/MobileDashboard/OpenPositions.tsx index a250012959..4bd456179b 100644 --- a/sections/dashboard/MobileDashboard/OpenPositions.tsx +++ b/sections/dashboard/MobileDashboard/OpenPositions.tsx @@ -1,26 +1,23 @@ -import useSynthetixQueries from '@synthetixio/queries'; -import { wei } from '@synthetixio/wei'; -import React from 'react'; +import { useMemo } from 'react'; import { useTranslation } from 'react-i18next'; import { SetterOrUpdater, useRecoilValue } from 'recoil'; import styled from 'styled-components'; import TabButton from 'components/Button/TabButton'; import { TabPanel } from 'components/Tab'; -import Connector from 'containers/Connector'; -import useGetCurrentPortfolioValue from 'queries/futures/useGetCurrentPortfolioValue'; -import useGetFuturesPositionForAccount from 'queries/futures/useGetFuturesPositionForAccount'; +import { FuturesAccountTypes } from 'queries/futures/types'; import { SectionHeader, SectionTitle } from 'sections/futures/MobileTrade/common'; -import { ratesState } from 'store/futures'; -import { formatDollars, zeroBN } from 'utils/formatters/number'; +import { balancesState, portfolioState, positionsState } from 'store/futures'; +import { formatDollars } from 'utils/formatters/number'; import FuturesPositionsTable from '../FuturesPositionsTable'; import { MarketsTab } from '../Markets/Markets'; +import { PositionsTab } from '../Overview/Overview'; import SynthBalancesTable from '../SynthBalancesTable'; type OpenPositionsProps = { - activePositionsTab: MarketsTab; - setActivePositionsTab: SetterOrUpdater; + activePositionsTab: PositionsTab; + setActivePositionsTab: SetterOrUpdater; }; const OpenPositions: React.FC = ({ @@ -28,55 +25,40 @@ const OpenPositions: React.FC = ({ setActivePositionsTab, }) => { const { t } = useTranslation(); - const { walletAddress } = Connector.useContainer(); - const { useSynthsBalancesQuery } = useSynthetixQueries(); + const positions = useRecoilValue(positionsState); + const portfolio = useRecoilValue(portfolioState); + const balances = useRecoilValue(balancesState); - const portfolioValueQuery = useGetCurrentPortfolioValue(); - const portfolioValue = portfolioValueQuery?.data ?? null; - - const futuresPositionQuery = useGetFuturesPositionForAccount(); - const futuresPositionHistory = futuresPositionQuery?.data ?? []; - - const exchangeRates = useRecoilValue(ratesState); - - const synthsBalancesQuery = useSynthsBalancesQuery(walletAddress); - const synthBalances = - synthsBalancesQuery.isSuccess && synthsBalancesQuery.data != null - ? synthsBalancesQuery.data - : null; - - const totalSpotBalancesValue = formatDollars(wei(synthBalances?.totalUSDBalance ?? zeroBN)); - - const totalFuturesPortfolioValue = formatDollars(wei(portfolioValue ?? zeroBN)); - - const POSITIONS_TABS = React.useMemo( + const POSITIONS_TABS = useMemo( () => [ { - name: MarketsTab.FUTURES, - label: t('dashboard.overview.positions-tabs.futures'), - badge: futuresPositionQuery?.data?.length, - active: activePositionsTab === MarketsTab.FUTURES, - detail: totalFuturesPortfolioValue, + name: PositionsTab.CROSS_MARGIN, + label: t('dashboard.overview.positions-tabs.cross-margin'), + badge: positions[FuturesAccountTypes.CROSS_MARGIN].length, + active: activePositionsTab === PositionsTab.CROSS_MARGIN, + detail: formatDollars(portfolio.crossMarginFutures), disabled: false, - onClick: () => setActivePositionsTab(MarketsTab.FUTURES), + onClick: () => setActivePositionsTab(PositionsTab.CROSS_MARGIN), }, { - name: MarketsTab.SPOT, + name: PositionsTab.ISOLATED_MARGIN, + label: t('dashboard.overview.positions-tabs.isolated-margin'), + badge: positions[FuturesAccountTypes.ISOLATED_MARGIN].length, + active: activePositionsTab === PositionsTab.ISOLATED_MARGIN, + detail: formatDollars(portfolio.isolatedMarginFutures), + disabled: false, + onClick: () => setActivePositionsTab(PositionsTab.ISOLATED_MARGIN), + }, + { + name: PositionsTab.SPOT, label: t('dashboard.overview.positions-tabs.spot'), - active: activePositionsTab === MarketsTab.SPOT, - detail: totalSpotBalancesValue, + active: activePositionsTab === PositionsTab.SPOT, + detail: formatDollars(balances.totalUSDBalance), disabled: false, - onClick: () => setActivePositionsTab(MarketsTab.SPOT), + onClick: () => setActivePositionsTab(PositionsTab.SPOT), }, ], - [ - futuresPositionQuery?.data?.length, - activePositionsTab, - setActivePositionsTab, - t, - totalFuturesPortfolioValue, - totalSpotBalancesValue, - ] + [positions, activePositionsTab, setActivePositionsTab, t, portfolio, balances] ); return ( @@ -93,18 +75,16 @@ const OpenPositions: React.FC = ({ - - + + + + + + - + ); diff --git a/sections/dashboard/MobileDashboard/SpotMarkets.tsx b/sections/dashboard/MobileDashboard/SpotMarkets.tsx index 8a2a814edb..24972006d6 100644 --- a/sections/dashboard/MobileDashboard/SpotMarkets.tsx +++ b/sections/dashboard/MobileDashboard/SpotMarkets.tsx @@ -1,17 +1,14 @@ import React from 'react'; import { useTranslation } from 'react-i18next'; -import { useRecoilValue } from 'recoil'; import styled from 'styled-components'; import { SectionHeader, SectionTitle } from 'sections/futures/MobileTrade/common'; -import { ratesState } from 'store/futures'; import SpotMarketsTable from '../SpotMarketsTable'; import { HeaderContainer } from './common'; const SpotMarkets: React.FC = () => { const { t } = useTranslation(); - const exchangeRates = useRecoilValue(ratesState); return ( <> @@ -21,7 +18,7 @@ const SpotMarkets: React.FC = () => { - + ); }; diff --git a/sections/dashboard/Overview/Overview.tsx b/sections/dashboard/Overview/Overview.tsx index 624daff8d2..1ac4939566 100644 --- a/sections/dashboard/Overview/Overview.tsx +++ b/sections/dashboard/Overview/Overview.tsx @@ -1,5 +1,3 @@ -import useSynthetixQueries from '@synthetixio/queries'; -import { wei } from '@synthetixio/wei'; import { FC, useMemo, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { useRecoilState, useRecoilValue } from 'recoil'; @@ -7,14 +5,13 @@ import styled from 'styled-components'; import TabButton from 'components/Button/TabButton'; import { DesktopOnlyView, MobileOrTabletView } from 'components/Media'; +import FuturesIcon from 'components/Nav/FuturesIcon'; import { TabPanel } from 'components/Tab'; -import Connector from 'containers/Connector'; -import useGetCurrentPortfolioValue from 'queries/futures/useGetCurrentPortfolioValue'; -import useGetFuturesPositionForAccount from 'queries/futures/useGetFuturesPositionForAccount'; +import { FuturesAccountTypes } from 'queries/futures/types'; import { CompetitionBanner } from 'sections/shared/components/CompetitionBanner'; -import { ratesState } from 'store/futures'; +import { balancesState, portfolioState, positionsState } from 'store/futures'; import { activePositionsTabState } from 'store/ui'; -import { formatDollars, zeroBN } from 'utils/formatters/number'; +import { formatDollars } from 'utils/formatters/number'; import FuturesMarketsTable from '../FuturesMarketsTable'; import FuturesPositionsTable from '../FuturesPositionsTable'; @@ -24,62 +21,58 @@ import PortfolioChart from '../PortfolioChart'; import SpotMarketsTable from '../SpotMarketsTable'; import SynthBalancesTable from '../SynthBalancesTable'; +export enum PositionsTab { + CROSS_MARGIN = 'cross margin', + ISOLATED_MARGIN = 'isolated margin', + SPOT = 'spot', +} + const Overview: FC = () => { const { t } = useTranslation(); - const { useSynthsBalancesQuery } = useSynthetixQueries(); - - const portfolioValueQuery = useGetCurrentPortfolioValue(); - const portfolioValue = portfolioValueQuery?.data ?? null; - - const futuresPositionQuery = useGetFuturesPositionForAccount(); - const futuresPositionHistory = futuresPositionQuery?.data ?? []; - - const exchangeRates = useRecoilValue(ratesState); - - const { walletAddress } = Connector.useContainer(); - const synthsBalancesQuery = useSynthsBalancesQuery(walletAddress); - const synthBalances = - synthsBalancesQuery.isSuccess && synthsBalancesQuery.data != null - ? synthsBalancesQuery.data - : null; + const balances = useRecoilValue(balancesState); + const portfolio = useRecoilValue(portfolioState); + const positions = useRecoilValue(positionsState); - const [activePositionsTab, setActivePositionsTab] = useRecoilState(activePositionsTabState); + const [activePositionsTab, setActivePositionsTab] = useRecoilState( + activePositionsTabState + ); const [activeMarketsTab, setActiveMarketsTab] = useState(MarketsTab.FUTURES); - const totalSpotBalancesValue = formatDollars(wei(synthBalances?.totalUSDBalance ?? zeroBN)); - - const totalFuturesPortfolioValue = formatDollars(wei(portfolioValue ?? zeroBN)); - - const POSITIONS_TABS = useMemo( - () => [ + const POSITIONS_TABS = useMemo(() => { + const crossPositions = positions.cross_margin.filter(({ position }) => !!position).length; + const isolatedPositions = positions.isolated_margin.filter(({ position }) => !!position).length; + return [ { - name: MarketsTab.FUTURES, - label: t('dashboard.overview.positions-tabs.futures'), - badge: futuresPositionQuery?.data?.length, - active: activePositionsTab === MarketsTab.FUTURES, - detail: totalFuturesPortfolioValue, + name: PositionsTab.CROSS_MARGIN, + label: t('dashboard.overview.positions-tabs.cross-margin'), + badge: crossPositions, + titleIcon: , + active: activePositionsTab === PositionsTab.CROSS_MARGIN, + detail: formatDollars(portfolio.crossMarginFutures), disabled: false, - onClick: () => setActivePositionsTab(MarketsTab.FUTURES), + onClick: () => setActivePositionsTab(PositionsTab.CROSS_MARGIN), }, { - name: MarketsTab.SPOT, + name: PositionsTab.ISOLATED_MARGIN, + label: t('dashboard.overview.positions-tabs.isolated-margin'), + badge: isolatedPositions, + active: activePositionsTab === PositionsTab.ISOLATED_MARGIN, + titleIcon: , + detail: formatDollars(portfolio.isolatedMarginFutures), + disabled: false, + onClick: () => setActivePositionsTab(PositionsTab.ISOLATED_MARGIN), + }, + { + name: PositionsTab.SPOT, label: t('dashboard.overview.positions-tabs.spot'), - active: activePositionsTab === MarketsTab.SPOT, - detail: totalSpotBalancesValue, + active: activePositionsTab === PositionsTab.SPOT, + detail: formatDollars(balances.totalUSDBalance), disabled: false, - onClick: () => setActivePositionsTab(MarketsTab.SPOT), + onClick: () => setActivePositionsTab(PositionsTab.SPOT), }, - ], - [ - futuresPositionQuery?.data?.length, - activePositionsTab, - setActivePositionsTab, - t, - totalFuturesPortfolioValue, - totalSpotBalancesValue, - ] - ); + ]; + }, [positions, balances, activePositionsTab, setActivePositionsTab, t, portfolio]); const MARKETS_TABS = useMemo( () => [ @@ -111,15 +104,16 @@ const Overview: FC = () => { ))} - - + + + + + + - - + + @@ -132,7 +126,7 @@ const Overview: FC = () => { - + diff --git a/sections/dashboard/PortfolioChart/PortfolioChart.tsx b/sections/dashboard/PortfolioChart/PortfolioChart.tsx index 0e83bb2098..3a2432925b 100644 --- a/sections/dashboard/PortfolioChart/PortfolioChart.tsx +++ b/sections/dashboard/PortfolioChart/PortfolioChart.tsx @@ -1,23 +1,16 @@ -import useSynthetixQueries from '@synthetixio/queries'; -import { FC } from 'react'; +import { FC, useMemo } from 'react'; +import { useRecoilValue } from 'recoil'; import styled from 'styled-components'; import Currency from 'components/Currency'; import { MobileHiddenView, MobileOnlyView } from 'components/Media'; -import Connector from 'containers/Connector'; -import useGetCurrentPortfolioValue from 'queries/futures/useGetCurrentPortfolioValue'; -import { zeroBN } from 'utils/formatters/number'; +import { balancesState, portfolioState } from 'store/futures'; const PortfolioChart: FC = () => { - const portfolioValueQuery = useGetCurrentPortfolioValue(); - const portfolioValue = portfolioValueQuery?.data ?? null; - const { walletAddress } = Connector.useContainer(); + const portfolio = useRecoilValue(portfolioState); + const balances = useRecoilValue(balancesState); - const { useSynthsBalancesQuery } = useSynthetixQueries(); - const synthsBalancesQuery = useSynthsBalancesQuery(walletAddress); - const synthBalances = synthsBalancesQuery.data ?? null; - - const total = (portfolioValue ?? zeroBN).add(synthBalances?.totalUSDBalance ?? zeroBN); + const total = useMemo(() => portfolio.total.add(balances.totalUSDBalance), [portfolio, balances]); return ( <> diff --git a/sections/dashboard/SpotMarketsTable/SpotMarketsTable.tsx b/sections/dashboard/SpotMarketsTable/SpotMarketsTable.tsx index 8cc31048b1..ed5cd278f9 100644 --- a/sections/dashboard/SpotMarketsTable/SpotMarketsTable.tsx +++ b/sections/dashboard/SpotMarketsTable/SpotMarketsTable.tsx @@ -4,7 +4,6 @@ import values from 'lodash/values'; import { useRouter } from 'next/router'; import { FC, useMemo } from 'react'; import { useTranslation } from 'react-i18next'; -import { useQueryClient } from 'react-query'; import { CellProps } from 'react-table'; import { useRecoilValue } from 'recoil'; import styled from 'styled-components'; @@ -14,43 +13,27 @@ import ChangePercent from 'components/ChangePercent'; import Currency from 'components/Currency'; import { DesktopOnlyView, MobileOrTabletView } from 'components/Media'; import Table from 'components/Table'; -import { CurrencyKey } from 'constants/currency'; import { DEFAULT_CRYPTO_DECIMALS } from 'constants/defaults'; import Connector from 'containers/Connector'; -import { Price, Rates } from 'queries/rates/types'; +import { Price } from 'queries/rates/types'; import useGetSynthsTradingVolumeForAllMarkets from 'queries/synths/useGetSynthsTradingVolumeForAllMarkets'; -import { pastRatesState } from 'store/futures'; +import { pastRatesState, ratesState } from 'store/futures'; import { isDecimalFour, MarketKeyByAsset, FuturesMarketAsset } from 'utils/futures'; -type SpotMarketsTableProps = { - exchangeRates: Rates | null; -}; - -const SpotMarketsTable: FC = ({ exchangeRates }) => { +const SpotMarketsTable: FC = () => { const { t } = useTranslation(); const router = useRouter(); const pastRates = useRecoilValue(pastRatesState); + const exchangeRates = useRecoilValue(ratesState); - const { network, synthsMap } = Connector.useContainer(); - + const { synthsMap } = Connector.useContainer(); const synths = useMemo(() => values(synthsMap) || [], [synthsMap]); - const queryCache = useQueryClient().getQueryCache(); - // KM-NOTE: come back and delete - const frozenSynthsQuery = queryCache.find(['synths', 'frozenSynths', network.id]); - - const unfrozenSynths = - frozenSynthsQuery && frozenSynthsQuery.state.status === 'success' - ? synths.filter( - (synth) => !(frozenSynthsQuery.state.data as Set).has(synth.name) - ) - : synths; - const yesterday = Math.floor(new Date().setDate(new Date().getDate() - 1) / 1000); const synthVolumesQuery = useGetSynthsTradingVolumeForAllMarkets(yesterday); let data = useMemo(() => { - return unfrozenSynths.map((synth: Synth) => { + return synths.map((synth: Synth) => { const description = synth.description ? t('common.currency.synthetic-currency-name', { currencyName: synth.description, @@ -74,7 +57,7 @@ const SpotMarketsTable: FC = ({ exchangeRates }) => { volume: synthVolumes[synth.name] ?? 0, }; }); - }, [synthsMap, unfrozenSynths, synthVolumesQuery, pastRates, exchangeRates, t]); + }, [synthsMap, synths, synthVolumesQuery, pastRates, exchangeRates, t]); return ( <> diff --git a/sections/dashboard/SynthBalancesTable/SynthBalancesTable.tsx b/sections/dashboard/SynthBalancesTable/SynthBalancesTable.tsx index 3d1bd14c7c..8be27ca542 100644 --- a/sections/dashboard/SynthBalancesTable/SynthBalancesTable.tsx +++ b/sections/dashboard/SynthBalancesTable/SynthBalancesTable.tsx @@ -1,5 +1,5 @@ import { CurrencyKey } from '@synthetixio/contracts-interface'; -import { Rates, SynthBalance } from '@synthetixio/queries'; +import { SynthBalance } from '@synthetixio/queries'; import Wei, { wei } from '@synthetixio/wei'; import * as _ from 'lodash/fp'; import { FC, ReactElement, useMemo } from 'react'; @@ -15,15 +15,10 @@ import Table, { TableNoResults } from 'components/Table'; import { NO_VALUE } from 'constants/placeholder'; import Connector from 'containers/Connector'; import { Price } from 'queries/rates/types'; -import { pastRatesState } from 'store/futures'; +import { balancesState, pastRatesState, ratesState } from 'store/futures'; import { formatNumber, zeroBN } from 'utils/formatters/number'; import { isDecimalFour } from 'utils/futures'; -type SynthBalancesTableProps = { - exchangeRates: Rates | null; - synthBalances: SynthBalance[]; -}; - type Cell = { synth: CurrencyKey; description: string | undefined; @@ -46,16 +41,15 @@ const calculatePriceChange = (current: Wei | null, past: Price | undefined) => { const conditionalRender = (prop: T, children: ReactElement): ReactElement => _.isNil(prop) ? {NO_VALUE} : children; -const SynthBalancesTable: FC = ({ - exchangeRates, - synthBalances, -}: SynthBalancesTableProps) => { +const SynthBalancesTable: FC = () => { const { t } = useTranslation(); const { synthsMap } = Connector.useContainer(); const pastRates = useRecoilValue(pastRatesState); + const exchangeRates = useRecoilValue(ratesState); + const { balances } = useRecoilValue(balancesState); let data = useMemo(() => { - return synthBalances.map((synthBalance: SynthBalance) => { + return balances.map((synthBalance: SynthBalance) => { const { currencyKey, balance, usdBalance } = synthBalance; const price = exchangeRates && exchangeRates[currencyKey]; @@ -71,7 +65,7 @@ const SynthBalancesTable: FC = ({ priceChange: calculatePriceChange(price, pastPrice), }; }); - }, [pastRates, exchangeRates, synthBalances, synthsMap]); + }, [pastRates, exchangeRates, balances, synthsMap]); return ( <> diff --git a/sections/exchange/MobileSwap/RatioSelect.tsx b/sections/exchange/MobileSwap/RatioSelect.tsx index 973b770f55..d4fdbb3d49 100644 --- a/sections/exchange/MobileSwap/RatioSelect.tsx +++ b/sections/exchange/MobileSwap/RatioSelect.tsx @@ -52,8 +52,8 @@ const RatioButton = styled.button<{ $selected: boolean }>` ${(props) => props.$selected && css` - color: ${(props) => props.theme.colors.selectedTheme.gold}; - background: linear-gradient(180deg, #161515 0%, #1e1d1d 100%); + color: ${(props) => props.theme.colors.selectedTheme.white}; + background: ${(props) => props.theme.colors.selectedTheme.button.hover}; `} &:first-of-type { diff --git a/sections/futures/CrossMarginOnboard/CrossMarginFAQ.tsx b/sections/futures/CrossMarginOnboard/CrossMarginFAQ.tsx index c9bd7c89c4..0e0a5897d8 100644 --- a/sections/futures/CrossMarginOnboard/CrossMarginFAQ.tsx +++ b/sections/futures/CrossMarginOnboard/CrossMarginFAQ.tsx @@ -1,11 +1,13 @@ import { useTranslation } from 'react-i18next'; import styled from 'styled-components'; +import { EXTERNAL_LINKS } from 'constants/links'; + export default function CrossMarginFAQ() { const { t } = useTranslation(); const onClick = () => { - window.open('https://docs.kwenta.io/products/futures/cross-margin-accounts'); + window.open(EXTERNAL_LINKS.Docs.CrossMarginFaq); }; return ( diff --git a/sections/futures/CrossMarginOnboard/CrossMarginOnboard.tsx b/sections/futures/CrossMarginOnboard/CrossMarginOnboard.tsx index e9bda2d61c..e942c3e298 100644 --- a/sections/futures/CrossMarginOnboard/CrossMarginOnboard.tsx +++ b/sections/futures/CrossMarginOnboard/CrossMarginOnboard.tsx @@ -89,13 +89,8 @@ export default function CrossMarginOnboard({ onClose, isOpen }: Props) { monitorTransaction({ txHash: tx.hash, onTxConfirmed: async () => { - try { - await refetchUntilUpdate('cross-margin-account-change'); - } catch (err) { - logError(err); - } finally { - setSubmitting(null); - } + await refetchUntilUpdate('cross-margin-account-change'); + setSubmitting(null); }, onTxFailed: () => { setSubmitting(null); diff --git a/sections/futures/FeeInfoBox/FeeInfoBox.tsx b/sections/futures/FeeInfoBox/FeeInfoBox.tsx index db6ee3a7e4..4f2da0163b 100644 --- a/sections/futures/FeeInfoBox/FeeInfoBox.tsx +++ b/sections/futures/FeeInfoBox/FeeInfoBox.tsx @@ -47,7 +47,8 @@ const FeeInfoBox: React.FC = () => { ]); const orderFeeRate = useMemo( - () => (orderType === 'limit' ? limitOrderFee : orderType === 'stop' ? stopOrderFee : null), + () => + orderType === 'limit' ? limitOrderFee : orderType === 'stop market' ? stopOrderFee : null, [orderType, stopOrderFee, limitOrderFee] ); @@ -99,7 +100,7 @@ const FeeInfoBox: React.FC = () => { }), }, }; - if (orderType === 'limit' || orderType === 'stop') { + if (orderType === 'limit' || orderType === 'stop market') { return { ...crossMarginFeeInfo, 'Keeper Deposit': { @@ -109,7 +110,7 @@ const FeeInfoBox: React.FC = () => { }, }; } - if (orderType === 'next-price') { + if (orderType === 'next price') { return { 'Keeper Deposit': { value: !!marketInfo?.keeperDeposit ? formatDollars(marketInfo.keeperDeposit) : NO_VALUE, @@ -123,7 +124,7 @@ const FeeInfoBox: React.FC = () => { value: formatDollars(totalDeposit), spaceBeneath: true, }, - 'Next-Price Discount': { + 'Next Price Discount': { value: !!nextPriceDiscount ? formatDollars(nextPriceDiscount) : NO_VALUE, color: nextPriceDiscount.lt(0) ? 'green' : nextPriceDiscount.gt(0) ? 'red' : undefined, }, diff --git a/sections/futures/LeverageInput/LeverageInput.tsx b/sections/futures/LeverageInput/LeverageInput.tsx index 07beae94c4..b35254667d 100644 --- a/sections/futures/LeverageInput/LeverageInput.tsx +++ b/sections/futures/LeverageInput/LeverageInput.tsx @@ -65,7 +65,7 @@ const LeverageInput: FC = () => { {modeButton} - {orderType === 'next-price' && isDisclaimerDisplayed && ( + {orderType === 'next price' && isDisclaimerDisplayed && ( {t('futures.market.trade.input.leverage.disclaimer')} diff --git a/sections/futures/LeverageSlider/LeverageSlider.tsx b/sections/futures/LeverageSlider/LeverageSlider.tsx index d9cb9c62da..d72eb97f97 100644 --- a/sections/futures/LeverageSlider/LeverageSlider.tsx +++ b/sections/futures/LeverageSlider/LeverageSlider.tsx @@ -35,7 +35,7 @@ const LeverageSlider: React.FC = ({ { value: minValue ?? 0, label: `${minValue}x` }, { value: maxValue ?? 10, label: `${maxValue}x` }, ]} - valueLabelDisplay="on" + valueLabelDisplay="auto" valueLabelFormat={(v) => `${v}x`} $currentMark={value ?? defaultValue ?? 0} /> diff --git a/sections/futures/MarketInfoBox/MarketInfoBox.tsx b/sections/futures/MarketInfoBox/MarketInfoBox.tsx index 31697c89ef..9efdf9e3a9 100644 --- a/sections/futures/MarketInfoBox/MarketInfoBox.tsx +++ b/sections/futures/MarketInfoBox/MarketInfoBox.tsx @@ -38,7 +38,7 @@ const MarketInfoBox: React.FC = () => { ? totalMargin.sub(availableMargin).div(totalMargin) : zeroBN; - const isNextPriceOrder = orderType === 'next-price'; + const isNextPriceOrder = orderType === 'next price'; const positionSize = position?.position?.size ? wei(position?.position?.size) : zeroBN; const orderDetails = useMemo(() => { @@ -115,7 +115,7 @@ const MarketInfoBox: React.FC = () => { details={{ 'Total Margin': { value: `${formatDollars(totalMargin, { - currencyKey: 'sUSD', + currencyKey: undefined, })}`, }, 'Available Margin': { diff --git a/sections/futures/MobileTrade/UserTabs/TradesTab.tsx b/sections/futures/MobileTrade/UserTabs/TradesTab.tsx index 6120fc5d91..38a493eaff 100644 --- a/sections/futures/MobileTrade/UserTabs/TradesTab.tsx +++ b/sections/futures/MobileTrade/UserTabs/TradesTab.tsx @@ -1,3 +1,4 @@ +import { utils as ethersUtils } from 'ethers'; import React from 'react'; import { useTranslation } from 'react-i18next'; import { CellProps } from 'react-table'; @@ -6,25 +7,27 @@ import styled, { css } from 'styled-components'; import Table, { TableNoResults } from 'components/Table'; import { ETH_UNIT } from 'constants/network'; +import Connector from 'containers/Connector'; import { FuturesTrade } from 'queries/futures/types'; import useGetFuturesTradesForAccount from 'queries/futures/useGetFuturesTradesForAccount'; import TimeDisplay from 'sections/futures/Trades/TimeDisplay'; import { PositionSide, TradeStatus } from 'sections/futures/types'; -import { currentMarketState, selectedFuturesAddressState } from 'store/futures'; +import { currentMarketState } from 'store/futures'; import { GridDivCenteredRow } from 'styles/common'; import { formatCryptoCurrency } from 'utils/formatters/number'; +import { FuturesMarketAsset, getMarketName } from 'utils/futures'; import { SectionHeader, SectionTitle } from '../common'; import TradeDrawer from '../drawers/TradeDrawer'; const TradesTab: React.FC = () => { const { t } = useTranslation(); - const selectedFuturesAddress = useRecoilValue(selectedFuturesAddressState); + const { walletAddress } = Connector.useContainer(); const marketAsset = useRecoilValue(currentMarketState); const [selectedTrade, setSelectedTrade] = React.useState(); - const futuresTradesQuery = useGetFuturesTradesForAccount(marketAsset, selectedFuturesAddress); + const futuresTradesQuery = useGetFuturesTradesForAccount(marketAsset, walletAddress); const { isLoading, isFetched: isLoaded } = futuresTradesQuery; @@ -34,26 +37,29 @@ const TradesTab: React.FC = () => { ); const historyData = React.useMemo(() => { - return history.map((trade: FuturesTrade) => ({ - value: Number(trade?.price?.div(ETH_UNIT)), - amount: Number(trade?.size.div(ETH_UNIT).abs()), - time: Number(trade?.timestamp.mul(1000)), - pnl: trade?.pnl.div(ETH_UNIT), - feesPaid: trade?.feesPaid.div(ETH_UNIT), - id: trade?.txnHash, - asset: marketAsset, - type: trade?.orderType === 'NextPrice' ? 'Next Price' : trade?.orderType, - status: trade?.positionClosed ? TradeStatus.CLOSED : TradeStatus.OPEN, - side: trade?.side, - })); - }, [history, marketAsset]); + return history.map((trade: FuturesTrade) => { + const parsedAsset = ethersUtils.parseBytes32String(trade.asset) as FuturesMarketAsset; + return { + ...trade, + asset: parsedAsset, + market: getMarketName(parsedAsset), + price: Number(trade.price?.div(ETH_UNIT)), + size: Number(trade.size.div(ETH_UNIT).abs()), + timestamp: Number(trade.timestamp.mul(1000)), + pnl: trade.pnl.div(ETH_UNIT), + feesPaid: trade.feesPaid.div(ETH_UNIT), + id: trade.txnHash, + status: trade.positionClosed ? TradeStatus.CLOSED : TradeStatus.OPEN, + }; + }); + }, [history]); const columnsDeps = React.useMemo(() => [historyData], [historyData]); return (
- Trades + {t('futures.market.user.trades.tab')} { @@ -64,7 +70,7 @@ const TradesTab: React.FC = () => { Header: ( {t('futures.market.user.trades.table.date')} ), - accessor: 'time', + accessor: 'timestamp', Cell: (cellProps: CellProps) => ( @@ -74,7 +80,11 @@ const TradesTab: React.FC = () => { sortable: true, }, { - Header: Side/Type, + Header: ( + + {t('futures.market.user.trades.table.side-type')} + + ), accessor: 'side', sortType: 'basic', Cell: (cellProps: CellProps) => ( @@ -92,7 +102,7 @@ const TradesTab: React.FC = () => { {t('futures.market.user.trades.table.trade-size')} ), - accessor: 'amount', + accessor: 'size', sortType: 'basic', Cell: (cellProps: CellProps) => ( <>{formatCryptoCurrency(cellProps.value)} @@ -133,12 +143,12 @@ const StyledPositionSide = styled.div<{ side: PositionSide }>` ${(props) => props.side === PositionSide.LONG && css` - color: ${props.theme.colors.common.primaryGreen}; + color: ${props.theme.colors.selectedTheme.green}; `} ${(props) => props.side === PositionSide.SHORT && css` - color: ${props.theme.colors.common.primaryRed}; + color: ${props.theme.colors.selectedTheme.red}; `} `; diff --git a/sections/futures/MobileTrade/UserTabs/TransfersTab.tsx b/sections/futures/MobileTrade/UserTabs/TransfersTab.tsx index 5437e03280..c7faffc218 100644 --- a/sections/futures/MobileTrade/UserTabs/TransfersTab.tsx +++ b/sections/futures/MobileTrade/UserTabs/TransfersTab.tsx @@ -88,7 +88,7 @@ const TransfersTab: React.FC = () => { }; const DefaultCell = styled.p` - color: ${(props) => props.theme.colors.common.primaryWhite}; + color: ${(props) => props.theme.colors.selectedTheme.button.text.primary}; `; const StyledActionCell = styled(DefaultCell)` @@ -96,7 +96,7 @@ const StyledActionCell = styled(DefaultCell)` `; const StyledTitle = styled.p` - color: ${(props) => props.theme.colors.common.primaryWhite}; + color: ${(props) => props.theme.colors.selectedTheme.button.text.primary}; font-size: 16px; margin: 0; `; @@ -104,8 +104,8 @@ const StyledTitle = styled.p` const StyledAmountCell = styled(DefaultCell)<{ isPositive: boolean }>` color: ${(props: any) => props.isPositive - ? props.theme.colors.common.primaryGreen - : props.theme.colors.common.primaryRed}; + ? props.theme.colors.selectedTheme.green + : props.theme.colors.selectedTheme.red}; `; const StyledTableHeader = styled.div` diff --git a/sections/futures/MobileTrade/common.ts b/sections/futures/MobileTrade/common.ts index fc83d631c7..67755d029c 100644 --- a/sections/futures/MobileTrade/common.ts +++ b/sections/futures/MobileTrade/common.ts @@ -9,10 +9,10 @@ export const SectionHeader = styled.div` export const SectionTitle = styled.div` font-family: ${(props) => props.theme.fonts.bold}; - color: ${(props) => props.theme.colors.common.primaryGold}; + color: ${(props) => props.theme.colors.selectedTheme.yellow}; text-transform: uppercase; font-size: 13px; - text-shadow: 0px 1px 3px rgba(0, 0, 0, 0.4); + text-shadow: 0px 1px 3px rgb(242, 242, 242); `; export const SectionSubTitle = styled.div` diff --git a/sections/futures/MobileTrade/drawers/BaseDrawer.tsx b/sections/futures/MobileTrade/drawers/BaseDrawer.tsx index ec1017d3c2..b1b2f5dc2c 100644 --- a/sections/futures/MobileTrade/drawers/BaseDrawer.tsx +++ b/sections/futures/MobileTrade/drawers/BaseDrawer.tsx @@ -76,7 +76,7 @@ const Background = styled.div` `; const Foreground = styled.div` - background: linear-gradient(180deg, #1e1d1d 0%, #161515 100%); + background: ${(props) => props.theme.colors.selectedTheme.background}; padding: 15px; border-radius: 8px 8px 0 0; `; @@ -89,11 +89,11 @@ const Row = styled.div` .key { text-transform: capitalize; - color: ${(props) => props.theme.colors.common.secondaryGray}; + color: ${(props) => props.theme.colors.selectedTheme.button.text.primary}; } .value { - color: ${(props) => props.theme.colors.common.primaryWhite}; + color: ${(props) => props.theme.colors.selectedTheme.gray}; max-width: 60%; } @@ -102,7 +102,7 @@ const Row = styled.div` } &:not(:last-of-type) { - border-bottom: 1px solid #2b2a2a; + border-bottom: 1px solid #a7a7a7; } `; @@ -120,7 +120,7 @@ const CloseButtonRow = styled.div` const CloseButton = styled.button` ${resetButtonCSS}; - color: ${(props) => props.theme.colors.common.secondaryGray}; + color: ${(props) => props.theme.colors.selectedTheme.gray2}; `; export default BaseDrawer; diff --git a/sections/futures/MobileTrade/drawers/TradeDrawer.tsx b/sections/futures/MobileTrade/drawers/TradeDrawer.tsx index be307aaac7..9542792f7b 100644 --- a/sections/futures/MobileTrade/drawers/TradeDrawer.tsx +++ b/sections/futures/MobileTrade/drawers/TradeDrawer.tsx @@ -5,7 +5,6 @@ import styled, { css } from 'styled-components'; import { PositionSide } from 'queries/futures/types'; import TimeDisplay from 'sections/futures/Trades/TimeDisplay'; import { formatCryptoCurrency, formatDollars } from 'utils/formatters/number'; -import { getDisplayAsset } from 'utils/futures'; import BaseDrawer from './BaseDrawer'; @@ -21,7 +20,7 @@ const TradeDrawer: React.FC = ({ trade, closeDrawer }) => { return [ { label: 'Market', - value: getDisplayAsset(trade.asset), + value: trade.market, }, { label: 'Side', @@ -29,18 +28,18 @@ const TradeDrawer: React.FC = ({ trade, closeDrawer }) => { }, { label: 'Type', - value: trade.type, + value: trade.orderType, }, { label: 'Status', value: trade.status, }, - { label: 'Size', value: formatCryptoCurrency(trade.amount) }, + { label: 'Size', value: formatCryptoCurrency(trade.size) }, { label: 'Price', - value: formatDollars(trade.value), + value: formatDollars(trade.price), }, - { label: 'Date/Time', value: }, + { label: 'Date/Time', value: }, { label: 'PnL', value: trade.pnl.eq(wei(0)) ? ( diff --git a/sections/futures/OrderPriceInput/OrderPriceInput.tsx b/sections/futures/OrderPriceInput/OrderPriceInput.tsx index 6552a2c60b..788d00c88e 100644 --- a/sections/futures/OrderPriceInput/OrderPriceInput.tsx +++ b/sections/futures/OrderPriceInput/OrderPriceInput.tsx @@ -1,5 +1,4 @@ import { wei } from '@synthetixio/wei'; -import { capitalize } from 'lodash'; import { ChangeEvent, useEffect, useMemo } from 'react'; import { useTranslation } from 'react-i18next'; import { useRecoilState, useRecoilValue } from 'recoil'; @@ -8,6 +7,7 @@ import styled from 'styled-components'; import CustomInput from 'components/Input/CustomInput'; import InputTitle from 'components/Input/InputTitle'; import SegmentedControl from 'components/SegmentedControl'; +import StyledTooltip from 'components/Tooltip/StyledTooltip'; import { FuturesOrderType } from 'queries/futures/types'; import { leverageSideState, marketAssetRateState, orderFeeCapState } from 'store/futures'; import { ceilNumber, floorNumber, weiToString, zeroBN } from 'utils/formatters/number'; @@ -65,7 +65,7 @@ export default function OrderPriceInput({ return ( <> - {capitalize(orderType)} Price{' '} + {orderType} Price{' '} {minMaxLabelString && ( <>   โ€”  {minMaxLabelString} @@ -74,7 +74,7 @@ export default function OrderPriceInput({ - - {t('futures.market.trade.orders.fee-rejection-label')}: - + + + {t('futures.market.trade.orders.fee-rejection-label')}: + + props.theme.colors.selectedTheme.red}; } + cursor: default; `; const FeeCapContainer = styled.div` @@ -113,4 +122,5 @@ const FeeRejectionLabel = styled.div` min-width: 100px; font-size: 12px; color: ${(props) => props.theme.colors.selectedTheme.text.label}; + cursor: default; `; diff --git a/sections/futures/OrderSizing/OrderSizeSlider.tsx b/sections/futures/OrderSizing/OrderSizeSlider.tsx new file mode 100644 index 0000000000..8dfb72aadd --- /dev/null +++ b/sections/futures/OrderSizing/OrderSizeSlider.tsx @@ -0,0 +1,97 @@ +import { wei } from '@synthetixio/wei'; +import { useCallback, useEffect, useState } from 'react'; +import { useTranslation } from 'react-i18next'; +import { useRecoilValue } from 'recoil'; +import styled from 'styled-components'; + +import ErrorView from 'components/Error'; +import StyledSlider from 'components/Slider/StyledSlider'; +import { useFuturesContext } from 'contexts/FuturesContext'; +import { + aboveMaxLeverageState, + crossMarginAccountOverviewState, + futuresTradeInputsState, + leverageSideState, + maxLeverageState, + positionState, +} from 'store/futures'; +import { FlexDivRow } from 'styles/common'; + +export default function OrderSizeSlider() { + const { t } = useTranslation(); + const { onTradeAmountChange, maxUsdInputAmount } = useFuturesContext(); + + const { freeMargin: freeCrossMargin } = useRecoilValue(crossMarginAccountOverviewState); + const { susdSize } = useRecoilValue(futuresTradeInputsState); + const aboveMaxLeverage = useRecoilValue(aboveMaxLeverageState); + const maxLeverage = useRecoilValue(maxLeverageState); + const position = useRecoilValue(positionState); + const leverageSide = useRecoilValue(leverageSideState); + + const [percent, setPercent] = useState(0); + const [usdValue, setUsdValue] = useState(susdSize); + + // eslint-disable-next-line + const onChangeMarginPercent = useCallback( + (value, commit = false) => { + setPercent(value); + const fraction = value / 100; + const usdAmount = maxUsdInputAmount.mul(fraction).toString(); + const usdValue = Number(usdAmount).toFixed(0); + setUsdValue(usdValue); + onTradeAmountChange(usdValue, 'usd', { simulateChange: !commit }); + }, + [onTradeAmountChange, maxUsdInputAmount] + ); + + useEffect(() => { + if (susdSize !== usdValue) { + if (!susdSize || maxUsdInputAmount.eq(0)) { + setPercent(0); + return; + } + + const percent = wei(susdSize).div(maxUsdInputAmount).mul(100).toNumber(); + setPercent(Number(percent.toFixed(2))); + } + // eslint-disable-next-line + }, [susdSize]); + + if (aboveMaxLeverage && position?.position?.side === leverageSide) { + return ( + + ); + } + + return ( + + onChangeMarginPercent(value, false)} + onChangeCommitted={(_, value) => onChangeMarginPercent(value, true)} + marks={[ + { value: 0, label: `0%` }, + { value: 100, label: `100%` }, + ]} + valueLabelDisplay="auto" + valueLabelFormat={(v) => `${v}%`} + $currentMark={percent} + /> + + ); +} + +const SliderRow = styled(FlexDivRow)` + margin-top: 8px; + margin-bottom: 32px; + position: relative; +`; diff --git a/sections/futures/OrderSizing/OrderSizing.tsx b/sections/futures/OrderSizing/OrderSizing.tsx index ad75dfe45c..1552a71cf0 100644 --- a/sections/futures/OrderSizing/OrderSizing.tsx +++ b/sections/futures/OrderSizing/OrderSizing.tsx @@ -22,11 +22,14 @@ import { FlexDivRow } from 'styles/common'; import { floorNumber, isZero, zeroBN } from 'utils/formatters/number'; import { getDisplayAsset } from 'utils/futures'; +import OrderSizeSlider from './OrderSizeSlider'; + type OrderSizingProps = { + isMobile?: boolean; disabled?: boolean; }; -const OrderSizing: React.FC = ({ disabled }) => { +const OrderSizing: React.FC = ({ disabled, isMobile }) => { const { onTradeAmountChange, maxUsdInputAmount } = useFuturesContext(); const { nativeSize, susdSize } = useRecoilValue(futuresTradeInputsState); @@ -101,7 +104,7 @@ const OrderSizing: React.FC = ({ disabled }) => { }, [debounceOnChangeValue]); const onChangeValue = (_: ChangeEvent, v: string) => { - setUsdValue(v); + assetInputType === 'usd' ? setUsdValue(v) : setAssetValue(v); debounceOnChangeValue(v, assetInputType); }; @@ -114,43 +117,46 @@ const OrderSizing: React.FC = ({ disabled }) => { }, [position?.remainingMargin, disabled, selectedAccountType, freeCrossMargin]); const showPosSizeHelper = - position?.position?.size && (orderType === 'limit' || orderType === 'stop'); + position?.position?.size && (orderType === 'limit' || orderType === 'stop market'); const invalid = (assetInputType === 'usd' && usdValue !== '' && maxUsdInputAmount.lte(usdValue || 0)) || (assetInputType === 'native' && assetValue !== '' && maxNativeValue.lte(assetValue || 0)); return ( - - - - Amount  โ€”  Set order size - - - Max - {showPosSizeHelper && ( - Position Size - )} - - - - setAssetInputType(assetInputType === 'usd' ? 'native' : 'usd')} - > - {assetInputType === 'usd' ? 'sUSD' : getDisplayAsset(marketKey)}{' '} - {} - - } - value={assetInputType === 'usd' ? usdValue : assetValue} - placeholder="0.0" - onChange={onChangeValue} - /> - + <> + + + + Amount  โ€”  Set order size + + + Max + {showPosSizeHelper && ( + Position Size + )} + + + + setAssetInputType(assetInputType === 'usd' ? 'native' : 'usd')} + > + {assetInputType === 'usd' ? 'sUSD' : getDisplayAsset(marketKey)}{' '} + {} + + } + value={assetInputType === 'usd' ? usdValue : assetValue} + placeholder="0.0" + onChange={onChangeValue} + /> + + {selectedAccountType === 'cross_margin' && } + ); }; @@ -163,10 +169,13 @@ const OrderSizingRow = styled(FlexDivRow)` width: 100%; align-items: center; margin-bottom: 8px; + cursor: default; `; const MaxButton = styled.button` text-decoration: underline; + font-variant: small-caps; + text-transform: lowercase; font-size: 13px; line-height: 11px; color: ${(props) => props.theme.colors.selectedTheme.gray}; @@ -177,13 +186,18 @@ const MaxButton = styled.button` const InputButton = styled.button` height: 22px; - padding: 4px 10px; + padding: 3px 2px 4px 10px; border: none; background: transparent; font-size: 16px; line-height: 16px; color: ${(props) => props.theme.colors.selectedTheme.text.label}; cursor: pointer; + &:hover { + svg > path { + fill: ${(props) => props.theme.colors.selectedTheme.input.hover}; + } + } `; const InputHelpers = styled.div` diff --git a/sections/futures/PositionButtons/PositionButtons.tsx b/sections/futures/PositionButtons/PositionButtons.tsx index c670c471e3..a3907ee1d8 100644 --- a/sections/futures/PositionButtons/PositionButtons.tsx +++ b/sections/futures/PositionButtons/PositionButtons.tsx @@ -74,7 +74,7 @@ const StyledPositionButton = styled(Button)` ${props.$isActive && css` border: 1px solid ${(props) => props.theme.colors.selectedTheme.green}; - border-radius: 11px; + border-radius: 8px; background: linear-gradient( 180deg, rgba(127, 212, 130, 0.15) 0%, @@ -102,7 +102,7 @@ const StyledPositionButton = styled(Button)` ${props.$isActive && css` border: 1px solid rgba(239, 104, 104, 0.7); - border-radius: 11px; + border-radius: 8px; background: linear-gradient( 180deg, rgba(239, 104, 104, 0.15) 0%, diff --git a/sections/futures/PositionCard/ClosePositionModal.tsx b/sections/futures/PositionCard/ClosePositionModal.tsx index c66bd1b746..deaed970e3 100644 --- a/sections/futures/PositionCard/ClosePositionModal.tsx +++ b/sections/futures/PositionCard/ClosePositionModal.tsx @@ -88,7 +88,7 @@ function ClosePositionModal({ }, { label: t('futures.market.user.position.modal.ROI'), - value: formatDollars(positionDetails?.roi ?? zeroBN), + value: formatDollars(positionDetails?.pnl ?? zeroBN), }, { label: t('futures.market.user.position.modal.fee'), @@ -139,9 +139,6 @@ const StyledBaseModal = styled(BaseModal)` [data-reach-dialog-content] { max-width: 400px; } - .card-body { - padding: 28px; - } `; const Row = styled(FlexDivCentered)` diff --git a/sections/futures/PositionCard/ClosePositionModalCrossMargin.tsx b/sections/futures/PositionCard/ClosePositionModalCrossMargin.tsx index 7e0df5eaf4..c541ac79b5 100644 --- a/sections/futures/PositionCard/ClosePositionModalCrossMargin.tsx +++ b/sections/futures/PositionCard/ClosePositionModalCrossMargin.tsx @@ -12,6 +12,7 @@ import useEstimateGasCost from 'hooks/useEstimateGasCost'; import { currentMarketState, positionState } from 'store/futures'; import { isUserDeniedError } from 'utils/formatters/error'; import { zeroBN } from 'utils/formatters/number'; +import { MarketKeyByAsset } from 'utils/futures'; import logError from 'utils/logError'; import { PositionSide } from '../types'; @@ -23,7 +24,7 @@ type Props = { export default function ClosePositionModalCrossMargin({ onDismiss }: Props) { const { t } = useTranslation(); - const { handleRefetch } = useRefetchContext(); + const { handleRefetch, refetchUntilUpdate } = useRefetchContext(); const { crossMarginAccountContract } = useCrossMarginAccountContracts(); const { monitorTransaction } = TransactionNotifier.useContainer(); const { resetTradeState } = useFuturesContext(); @@ -40,7 +41,7 @@ export default function ClosePositionModalCrossMargin({ onDismiss }: Props) { const crossMarginCloseParams = useMemo(() => { return { - marketKey: formatBytes32String(currencyKey), + marketKey: formatBytes32String(MarketKeyByAsset[currencyKey]), marginDelta: zeroBN.toBN(), sizeDelta: position?.position?.side === PositionSide.LONG @@ -70,7 +71,7 @@ export default function ClosePositionModalCrossMargin({ onDismiss }: Props) { onDismiss(); resetTradeState(); handleRefetch('close-position'); - handleRefetch('account-margin-change'); + refetchUntilUpdate('account-margin-change'); }, }); } diff --git a/sections/futures/PositionCard/ClosePositionModalIsolatedMargin.tsx b/sections/futures/PositionCard/ClosePositionModalIsolatedMargin.tsx index 2c7080111b..2b23adcd1e 100644 --- a/sections/futures/PositionCard/ClosePositionModalIsolatedMargin.tsx +++ b/sections/futures/PositionCard/ClosePositionModalIsolatedMargin.tsx @@ -18,7 +18,7 @@ type Props = { }; export default function ClosePositionModalIsolatedMargin({ onDismiss }: Props) { - const { handleRefetch } = useRefetchContext(); + const { handleRefetch, refetchUntilUpdate } = useRefetchContext(); const { useEthGasPriceQuery, useSynthetixTxn } = useSynthetixQueries(); const ethGasPriceQuery = useEthGasPriceQuery(); const gasSpeed = useRecoilValue(gasSpeedState); @@ -58,7 +58,7 @@ export default function ClosePositionModalIsolatedMargin({ onDismiss }: Props) { onDismiss(); resetTradeState(); handleRefetch('close-position'); - handleRefetch('account-margin-change'); + refetchUntilUpdate('account-margin-change'); }, }); } diff --git a/sections/futures/PositionCard/PositionCard.tsx b/sections/futures/PositionCard/PositionCard.tsx index a29be80b3c..3f02ff9f12 100644 --- a/sections/futures/PositionCard/PositionCard.tsx +++ b/sections/futures/PositionCard/PositionCard.tsx @@ -13,10 +13,11 @@ import { useFuturesContext } from 'contexts/FuturesContext'; import useFuturesMarketClosed from 'hooks/useFuturesMarketClosed'; import useSelectedPriceCurrency from 'hooks/useSelectedPriceCurrency'; import { PositionSide } from 'queries/futures/types'; -import useGetFuturesPositionForAccount from 'queries/futures/useGetFuturesPositionForAccount'; import { currentMarketState, + futuresAccountTypeState, marketKeyState, + positionHistoryState, positionState, potentialTradeDetailsState, } from 'store/futures'; @@ -65,14 +66,13 @@ const PositionCard: React.FC = () => { const position = useRecoilValue(positionState); const marketAsset = useRecoilValue(currentMarketState); const marketKey = useRecoilValue(marketKeyState); + const futuresAccountType = useRecoilValue(futuresAccountTypeState); const positionDetails = position?.position ?? null; - const futuresPositionsQuery = useGetFuturesPositionForAccount(); const { isFuturesMarketClosed } = useFuturesMarketClosed(marketKey); const potentialTrade = useRecoilValue(potentialTradeDetailsState); - - const futuresPositions = futuresPositionsQuery?.data ?? null; + const positionHistory = useRecoilValue(positionHistoryState); const { synthsMap } = Connector.useContainer(); @@ -82,26 +82,28 @@ const PositionCard: React.FC = () => { ? DEFAULT_CRYPTO_DECIMALS : undefined; - const positionHistory = futuresPositions?.find( - ({ asset, isOpen }) => isOpen && asset === marketAsset - ); + const thisPositionHistory = useMemo(() => { + return positionHistory[futuresAccountType].find( + ({ asset, isOpen }) => isOpen && asset === marketAsset + ); + }, [positionHistory, marketAsset, futuresAccountType]); const { marketAssetRate } = useFuturesContext(); const { data: previewTradeData } = useRecoilValue(potentialTradeDetailsState); const modifiedAverage = useMemo(() => { - if (positionHistory && previewTradeData && potentialTrade.data) { - const totalSize = positionHistory.size.add(potentialTrade.data.size); + if (thisPositionHistory && previewTradeData && potentialTrade.data) { + const totalSize = thisPositionHistory.size.add(potentialTrade.data.size); - const existingValue = positionHistory.avgEntryPrice.mul(positionHistory.size); + const existingValue = thisPositionHistory.avgEntryPrice.mul(thisPositionHistory.size); const newValue = previewTradeData.price.mul(potentialTrade.data.size); const totalValue = existingValue.add(newValue); return totalSize.gt(0) ? totalValue.div(totalSize) : null; } return null; - }, [positionHistory, previewTradeData, potentialTrade.data]); + }, [thisPositionHistory, previewTradeData, potentialTrade.data]); const previewData: PositionPreviewData = React.useMemo(() => { if (positionDetails === null || previewTradeData === null) { @@ -126,16 +128,17 @@ const PositionCard: React.FC = () => { }, [positionDetails, previewTradeData, modifiedAverage]); const data: PositionData = React.useMemo(() => { - const pnl = positionDetails?.profitLoss.add(positionDetails?.accruedFunding) ?? zeroBN; - const pnlPct = pnl.abs().gt(0) ? pnl.div(positionDetails?.initialMargin) : zeroBN; + const pnl = positionDetails?.pnl ?? zeroBN; + const pnlPct = positionDetails?.pnlPct ?? zeroBN; const realizedPnl = - positionHistory?.pnl.add(positionHistory?.netFunding).sub(positionHistory?.feesPaid) ?? - zeroBN; + thisPositionHistory?.pnl + .add(thisPositionHistory?.netFunding) + .sub(thisPositionHistory?.feesPaid) ?? zeroBN; const realizedPnlPct = realizedPnl.abs().gt(0) - ? realizedPnl.div(positionHistory?.initialMargin.add(positionHistory?.totalDeposits)) + ? realizedPnl.div(thisPositionHistory?.initialMargin.add(thisPositionHistory?.totalDeposits)) : zeroBN; const netFunding = - positionDetails?.accruedFunding.add(positionHistory?.netFunding ?? zeroBN) ?? zeroBN; + positionDetails?.accruedFunding.add(thisPositionHistory?.netFunding ?? zeroBN) ?? zeroBN; return { currencyIconKey: MarketKeyByAsset[marketAsset], @@ -225,7 +228,7 @@ const PositionCard: React.FC = () => { })} (${formatPercent(pnlPct)})` : NO_VALUE, realizedPnlText: - positionHistory && realizedPnl + thisPositionHistory && realizedPnl ? `${formatDollars(realizedPnl, { minDecimals: realizedPnl.abs().lt(0.01) ? 4 : 2, })} (${formatPercent(realizedPnlPct)})` @@ -236,10 +239,10 @@ const PositionCard: React.FC = () => { minDecimals: netFunding.abs().lt(0.01) ? 4 : 2, })}` : null, - fees: positionDetails ? formatDollars(positionHistory?.feesPaid ?? zeroBN) : NO_VALUE, + fees: positionDetails ? formatDollars(thisPositionHistory?.feesPaid ?? zeroBN) : NO_VALUE, avgEntryPrice: positionDetails ? ( <> - {formatDollars(positionHistory?.entryPrice ?? zeroBN, { + {formatDollars(thisPositionHistory?.entryPrice ?? zeroBN, { minDecimals, })} { @@ -256,7 +259,7 @@ const PositionCard: React.FC = () => { }; }, [ positionDetails, - positionHistory, + thisPositionHistory, marketAssetRate, marketAsset, synthsMap, diff --git a/sections/futures/PositionChart/PositionChart.tsx b/sections/futures/PositionChart/PositionChart.tsx index 5663cf6434..b6927085bf 100644 --- a/sections/futures/PositionChart/PositionChart.tsx +++ b/sections/futures/PositionChart/PositionChart.tsx @@ -3,24 +3,27 @@ import { useRecoilValue } from 'recoil'; import styled from 'styled-components'; import TVChart from 'components/TVChart'; -import useGetFuturesPositionForAccount from 'queries/futures/useGetFuturesPositionForAccount'; import { currentMarketState, positionState, potentialTradeDetailsState, futuresTradeInputsState, + positionHistoryState, + futuresAccountTypeState, } from 'store/futures'; export default function PositionChart() { const [isChartReady, setIsChartReady] = useState(false); const marketAsset = useRecoilValue(currentMarketState); const position = useRecoilValue(positionState); + const positionHistory = useRecoilValue(positionHistoryState); + const futuresAccountType = useRecoilValue(futuresAccountTypeState); const { data: previewTrade } = useRecoilValue(potentialTradeDetailsState); - const futuresPositionsQuery = useGetFuturesPositionForAccount(); - const positionHistory = futuresPositionsQuery.data ?? []; - const subgraphPosition = positionHistory.find((p) => p.isOpen && p.asset === marketAsset); + const subgraphPosition = useMemo(() => { + return positionHistory[futuresAccountType].find((p) => p.isOpen && p.asset === marketAsset); + }, [positionHistory, marketAsset, futuresAccountType]); const { nativeSize } = useRecoilValue(futuresTradeInputsState); diff --git a/sections/futures/ShareModal/AmountContainer.tsx b/sections/futures/ShareModal/AmountContainer.tsx index 1e47012e3a..8ac70a54ec 100644 --- a/sections/futures/ShareModal/AmountContainer.tsx +++ b/sections/futures/ShareModal/AmountContainer.tsx @@ -28,15 +28,15 @@ const AmountContainer: FC = ({ position }) => { const positionDetails = position?.position ?? null; const leverage = formatNumber(positionDetails?.leverage ?? zeroBN) + 'x'; const side = positionDetails?.side === 'long' ? PositionSide.LONG : PositionSide.SHORT; - const roiChange = positionDetails?.roiChange.mul(100); + const pnlPct = positionDetails?.pnlPct.mul(100); const amount = () => { - if (roiChange) { - return roiChange.gt(0) - ? `+${roiChange.toNumber().toFixed(2)}%` - : roiChange.eq(0) + if (pnlPct) { + return pnlPct.gt(0) + ? `+${pnlPct.toNumber().toFixed(2)}%` + : pnlPct.eq(0) ? `+0.00%` - : `${roiChange.toNumber().toFixed(2)}%`; + : `${pnlPct.toNumber().toFixed(2)}%`; } }; diff --git a/sections/futures/ShareModal/PositionMetadata.tsx b/sections/futures/ShareModal/PositionMetadata.tsx index 4b24ea70dd..958bc394ec 100644 --- a/sections/futures/ShareModal/PositionMetadata.tsx +++ b/sections/futures/ShareModal/PositionMetadata.tsx @@ -1,15 +1,15 @@ import { format } from 'date-fns'; import { FC, useLayoutEffect, useState } from 'react'; import { useTranslation } from 'react-i18next'; +import { useRecoilValue } from 'recoil'; import styled from 'styled-components'; import { useFuturesContext } from 'contexts/FuturesContext'; -import { PositionHistory } from 'queries/futures/types'; +import { futuresAccountTypeState, positionHistoryState } from 'store/futures'; import getLocale from 'utils/formatters/getLocale'; type PositionMetadataProps = { marketAsset: string; - futuresPositionHistory: PositionHistory[]; }; function getColor(props: any) { @@ -66,11 +66,13 @@ function getFontFamily(props: any) { } } -const PositionMetadata: FC = ({ marketAsset, futuresPositionHistory }) => { +const PositionMetadata: FC = ({ marketAsset }) => { const { t } = useTranslation(); const [currentTimestamp, setCurrentTimestamp] = useState(0); const { marketAssetRate } = useFuturesContext(); + const futuresPositionHistory = useRecoilValue(positionHistoryState); + const futuresAccountType = useRecoilValue(futuresAccountTypeState); let avgEntryPrice = '', openAtDate = '', @@ -78,13 +80,12 @@ const PositionMetadata: FC = ({ marketAsset, futuresPosit createdOnDate = '', createdOnTime = ''; - const currentPosition = futuresPositionHistory.filter( - (obj: PositionHistory) => obj.asset === marketAsset + const currentPosition = futuresPositionHistory[futuresAccountType].find( + (position) => position.isOpen && position.asset === marketAsset ); - avgEntryPrice = currentPosition[0].avgEntryPrice.toNumber().toFixed(2); - - const openTimestamp = currentPosition[0].openTimestamp; + avgEntryPrice = currentPosition?.avgEntryPrice.toNumber().toFixed(2) ?? ''; + const openTimestamp = currentPosition?.openTimestamp ?? 0; openAtDate = format(openTimestamp, 'PP', { locale: getLocale() }); openAtTime = format(openTimestamp, 'HH:mm:ss', { locale: getLocale() }); diff --git a/sections/futures/ShareModal/ShareModal.tsx b/sections/futures/ShareModal/ShareModal.tsx index 11af4f20d4..f912fcca00 100644 --- a/sections/futures/ShareModal/ShareModal.tsx +++ b/sections/futures/ShareModal/ShareModal.tsx @@ -4,7 +4,7 @@ import styled from 'styled-components'; import PNLGraphicPNG from 'assets/png/pnl-graphic.png'; import BaseModal from 'components/BaseModal'; -import { FuturesPosition, PositionHistory } from 'queries/futures/types'; +import { FuturesPosition } from 'queries/futures/types'; import { FuturesMarketAsset } from 'utils/futures'; import AmountContainer from './AmountContainer'; @@ -15,15 +15,9 @@ type ShareModalProps = { position: FuturesPosition | null; marketAsset: FuturesMarketAsset; setShowShareModal: React.Dispatch>; - futuresPositionHistory: PositionHistory[]; }; -const ShareModal: FC = ({ - position, - marketAsset, - setShowShareModal, - futuresPositionHistory, -}) => { +const ShareModal: FC = ({ position, marketAsset, setShowShareModal }) => { const { t } = useTranslation(); return ( @@ -39,10 +33,7 @@ const ShareModal: FC = ({ - + diff --git a/sections/futures/Trade/DepositMarginModal.tsx b/sections/futures/Trade/DepositMarginModal.tsx index b0c4808e21..fb1e1077a5 100644 --- a/sections/futures/Trade/DepositMarginModal.tsx +++ b/sections/futures/Trade/DepositMarginModal.tsx @@ -152,7 +152,7 @@ export const BalanceContainer = styled(FlexDivRowCentered)` export const BalanceText = styled.p<{ $gold?: boolean }>` color: ${(props) => - props.$gold ? props.theme.colors.common.primaryGold : props.theme.colors.selectedTheme.gray}; + props.$gold ? props.theme.colors.selectedTheme.yellow : props.theme.colors.selectedTheme.gray}; span { color: ${(props) => props.theme.colors.selectedTheme.button.text.primary}; } diff --git a/sections/futures/Trade/ManagePosition.tsx b/sections/futures/Trade/ManagePosition.tsx index 5f9ff6ea3d..965cbbaaea 100644 --- a/sections/futures/Trade/ManagePosition.tsx +++ b/sections/futures/Trade/ManagePosition.tsx @@ -5,7 +5,9 @@ import styled from 'styled-components'; import Button from 'components/Button'; import Error from 'components/Error'; +import Loader from 'components/Loader'; import { useFuturesContext } from 'contexts/FuturesContext'; +import { previewErrorI18n } from 'queries/futures/constants'; import { PositionSide } from 'queries/futures/types'; import { confirmationModalOpenState, @@ -23,6 +25,7 @@ import { crossMarginMarginDeltaState, futuresOrderPriceState, marketAssetRateState, + isAdvancedOrderState, } from 'store/futures'; import { isZero } from 'utils/formatters/number'; import { orderPriceInvalidLabel } from 'utils/futures'; @@ -47,7 +50,9 @@ const ManagePosition: React.FC = () => { const maxLeverageValue = useRecoilValue(maxLeverageState); const marketInfo = useRecoilValue(marketInfoState); const selectedAccountType = useRecoilValue(futuresAccountTypeState); - const { data: previewTrade, error: previewError } = useRecoilValue(potentialTradeDetailsState); + const { data: previewTrade, error: previewError, status } = useRecoilValue( + potentialTradeDetailsState + ); const orderType = useRecoilValue(orderTypeState); const [leverageSide, setLeverageSide] = useRecoilState(leverageSideState); const { leverage } = useRecoilValue(futuresTradeInputsState); @@ -56,17 +61,17 @@ const ManagePosition: React.FC = () => { ); const isMarketCapReached = useRecoilValue(isMarketCapReachedState); const placeOrderTranslationKey = useRecoilValue(placeOrderTranslationKeyState); - const potentialTradeDetails = useRecoilValue(potentialTradeDetailsState); const orderPrice = useRecoilValue(futuresOrderPriceState); const marketAssetRate = useRecoilValue(marketAssetRateState); const tradeInputs = useRecoilValue(futuresTradeInputsState); + const isAdvancedOrder = useRecoilValue(isAdvancedOrderState); const [isCancelModalOpen, setCancelModalOpen] = React.useState(false); const positionDetails = position?.position; const orderError = useMemo(() => { - if (previewError) return t('futures.market.trade.preview.error'); + if (previewError) return t(previewErrorI18n(previewError)); const orderTxnError = orderTxn.error as OrderTxnError; if (orderTxnError?.reason) return orderTxnError.reason; if (error) return error; @@ -96,13 +101,12 @@ const ManagePosition: React.FC = () => { ); if (!leverageValid || !!error || marketInfo?.isSuspended || isMarketCapReached) return true; - if ((orderType === 'limit' || orderType === 'stop') && !!invalidReason) return true; + if ((orderType === 'limit' || orderType === 'stop market') && !!invalidReason) return true; if (tradeInputs.susdSizeDelta.abs().gt(maxUsdInputAmount)) return true; if (placeOrderTranslationKey === 'futures.market.trade.button.deposit-margin-minimum') return true; if (selectedAccountType === 'cross_margin') { - if ((isZero(marginDelta) && isZero(sizeDelta)) || potentialTradeDetails.status !== 'complete') - return true; + if ((isZero(marginDelta) && isZero(sizeDelta)) || status !== 'complete') return true; if (orderType !== 'market' && isZero(orderPrice)) return true; } else if (isZero(sizeDelta)) { return true; @@ -123,7 +127,7 @@ const ManagePosition: React.FC = () => { maxUsdInputAmount, selectedAccountType, isMarketCapReached, - potentialTradeDetails, + status, ]); return ( @@ -141,7 +145,7 @@ const ManagePosition: React.FC = () => { disabled={placeOrderDisabled} onClick={() => setConfirmationModalOpen(true)} > - {t(placeOrderTranslationKey)} + {status === 'fetching' ? : t(placeOrderTranslationKey)} { noOutline variant="danger" onClick={() => { - if (orderType === 'next-price' && position?.position?.size) { + if (orderType === 'next price' && position?.position?.size) { const newTradeSize = position.position.size; const newLeverageSide = position.position.side === PositionSide.LONG @@ -163,7 +167,7 @@ const ManagePosition: React.FC = () => { setCancelModalOpen(true); } }} - disabled={!positionDetails || marketInfo?.isSuspended} + disabled={!positionDetails || marketInfo?.isSuspended || isAdvancedOrder} > {t('futures.market.user.position.close-position')} @@ -188,7 +192,7 @@ const ManagePosition: React.FC = () => { ))} - {isConfirmationModalOpen && orderType === 'next-price' && } + {isConfirmationModalOpen && orderType === 'next price' && } ); }; @@ -221,10 +225,6 @@ const CloseOrderButton = styled(Button)` } &:disabled { - border: ${(props) => props.theme.colors.selectedTheme.border}; - background: transparent; - color: ${(props) => props.theme.colors.selectedTheme.button.disabled.text}; - transform: none; display: none; } `; diff --git a/sections/futures/Trade/MarketsDropdown.tsx b/sections/futures/Trade/MarketsDropdown.tsx index 408a0c555a..5b292769ca 100644 --- a/sections/futures/Trade/MarketsDropdown.tsx +++ b/sections/futures/Trade/MarketsDropdown.tsx @@ -187,7 +187,7 @@ const MarketsDropdown: React.FC = ({ mobile }) => { })} options={options} isSearchable={false} - variant="gradient" + variant="flat" components={{ SingleValue: MarketsDropdownSingleValue, Option: MarketsDropdownOption, diff --git a/sections/futures/Trade/MarketsDropdownSingleValue.tsx b/sections/futures/Trade/MarketsDropdownSingleValue.tsx index cf57edefe8..4a77bb0d4f 100644 --- a/sections/futures/Trade/MarketsDropdownSingleValue.tsx +++ b/sections/futures/Trade/MarketsDropdownSingleValue.tsx @@ -65,7 +65,7 @@ export const SingleValueContainer = styled(FlexDivCentered)` .price { font-family: ${(props) => props.theme.fonts.mono}; - color: ${(props) => props.theme.colors.common.primaryWhite}; + color: ${(props) => props.theme.colors.selectedTheme.gray}; font-size: 15px; } @@ -80,11 +80,11 @@ export const SingleValueContainer = styled(FlexDivCentered)` } .green { - color: ${(props) => props.theme.colors.common.primaryGreen}; + color: ${(props) => props.theme.colors.selectedTheme.green}; } .red { - color: ${(props) => props.theme.colors.common.primaryRed}; + color: ${(props) => props.theme.colors.selectedTheme.red}; } `; diff --git a/sections/futures/Trade/TradeConfirmationModal.tsx b/sections/futures/Trade/TradeConfirmationModal.tsx index f1f503d88c..490d7cc0f8 100644 --- a/sections/futures/Trade/TradeConfirmationModal.tsx +++ b/sections/futures/Trade/TradeConfirmationModal.tsx @@ -12,6 +12,7 @@ import { DesktopOnlyView, MobileOrTabletView } from 'components/Media'; import { currentMarketState, futuresOrderPriceState, + leverageSideState, orderTypeState, positionState, potentialTradeDetailsState, @@ -47,6 +48,7 @@ export default function TradeConfirmationModal({ const orderType = useRecoilValue(orderTypeState); const orderPrice = useRecoilValue(futuresOrderPriceState); const position = useRecoilValue(positionState); + const leverageSide = useRecoilValue(leverageSideState); const positionSide = useMemo(() => { if (potentialTradeDetails?.size.eq(zeroBN)) { @@ -74,7 +76,7 @@ export default function TradeConfirmationModal({ const dataRows = useMemo( () => [ - { label: 'side', value: (positionDetails?.side ?? PositionSide.LONG).toUpperCase() }, + { label: 'side', value: leverageSide.toUpperCase() }, { label: 'order Type', value: capitalize(orderType) }, { label: 'size', @@ -91,7 +93,7 @@ export default function TradeConfirmationModal({ value: `${formatNumber(positionDetails?.leverage ?? zeroBN)}x`, }, - orderType === 'limit' || orderType === 'stop' + orderType === 'limit' || orderType === 'stop market' ? { label: orderType + ' order price', value: formatDollars(orderPrice), @@ -105,7 +107,7 @@ export default function TradeConfirmationModal({ value: formatDollars(positionDetails?.liqPrice ?? zeroBN), }, { - label: 'margin', + label: 'resulting margin', value: formatDollars(positionDetails?.margin ?? zeroBN), }, { @@ -123,7 +125,7 @@ export default function TradeConfirmationModal({ value: formatDollars(gasFee ?? zeroBN), }, ], - [positionDetails, market, keeperFee, gasFee, tradeFee, orderType, orderPrice] + [positionDetails, market, keeperFee, gasFee, tradeFee, orderType, orderPrice, leverageSide] ); const disabledReason = useMemo(() => { @@ -170,7 +172,7 @@ export default function TradeConfirmationModal({ items={dataRows} buttons={ diff --git a/sections/futures/Trade/TradeConfirmationModalCrossMargin.tsx b/sections/futures/Trade/TradeConfirmationModalCrossMargin.tsx index 9d590c73e9..41800782e9 100644 --- a/sections/futures/Trade/TradeConfirmationModalCrossMargin.tsx +++ b/sections/futures/Trade/TradeConfirmationModalCrossMargin.tsx @@ -18,6 +18,7 @@ import { } from 'store/futures'; import { isUserDeniedError } from 'utils/formatters/error'; import { zeroBN } from 'utils/formatters/number'; +import { MarketKeyByAsset } from 'utils/futures'; import logError from 'utils/logError'; import TradeConfirmationModal from './TradeConfirmationModal'; @@ -25,7 +26,7 @@ import TradeConfirmationModal from './TradeConfirmationModal'; export default function TradeConfirmationModalCrossMargin() { const { t } = useTranslation(); const { monitorTransaction } = TransactionNotifier.useContainer(); - const { handleRefetch } = useRefetchContext(); + const { handleRefetch, refetchUntilUpdate } = useRefetchContext(); const { crossMarginAccountContract } = useCrossMarginAccountContracts(); const { estimateEthersContractTxCost } = useEstimateGasCost(); @@ -46,7 +47,7 @@ export default function TradeConfirmationModalCrossMargin() { const estimateGas = async () => { const newPosition = [ { - marketKey: formatBytes32String(marketAsset), + marketKey: formatBytes32String(MarketKeyByAsset[marketAsset]), marginDelta: crossMarginMarginDelta.toBN(), sizeDelta: tradeInputs.nativeSizeDelta.toBN(), }, @@ -86,6 +87,7 @@ export default function TradeConfirmationModalCrossMargin() { onTxConfirmed: () => { resetTradeState(); handleRefetch('modify-position'); + refetchUntilUpdate('account-margin-change'); }, }); onDismiss(); @@ -99,6 +101,7 @@ export default function TradeConfirmationModalCrossMargin() { }, [ setError, handleRefetch, + refetchUntilUpdate, resetTradeState, monitorTransaction, onDismiss, diff --git a/sections/futures/Trade/TradeIsolatedMargin.tsx b/sections/futures/Trade/TradeIsolatedMargin.tsx index c914442e9b..bab7a8e2b0 100644 --- a/sections/futures/Trade/TradeIsolatedMargin.tsx +++ b/sections/futures/Trade/TradeIsolatedMargin.tsx @@ -1,13 +1,11 @@ -import { useConnectModal } from '@rainbow-me/rainbowkit'; import { useMemo, useState } from 'react'; import { useRecoilState, useRecoilValue } from 'recoil'; -import styled from 'styled-components'; +import styled, { useTheme } from 'styled-components'; import DepositArrow from 'assets/svg/futures/deposit-arrow.svg'; import WithdrawArrow from 'assets/svg/futures/withdraw-arrow.svg'; import SegmentedControl from 'components/SegmentedControl'; import { ISOLATED_MARGIN_ORDER_TYPES } from 'constants/futures'; -import Connector from 'containers/Connector'; import { balancesState, leverageSideState, @@ -34,8 +32,7 @@ type Props = { }; const TradeIsolatedMargin = ({ isMobile }: Props) => { - const { openConnectModal: connectWallet } = useConnectModal(); - const { walletAddress } = Connector.useContainer(); + const { colors } = useTheme(); const [leverageSide, setLeverageSide] = useRecoilState(leverageSideState); const position = useRecoilValue(positionState); @@ -46,19 +43,11 @@ const TradeIsolatedMargin = ({ isMobile }: Props) => { const [openModal, setOpenModal] = useState<'deposit' | 'withdraw' | null>(null); const headerButtons = useMemo(() => { - if (!walletAddress) { - return [ - { - i18nTitle: 'futures.market.trade.button.connect-wallet', - onClick: connectWallet, - }, - ]; - } const transferButtons = !marketInfo?.isSuspended ? [ { i18nTitle: 'futures.market.trade.button.deposit', - Icon: DepositArrow, + icon: , onClick: () => setOpenModal('deposit'), }, ] @@ -67,12 +56,12 @@ const TradeIsolatedMargin = ({ isMobile }: Props) => { if (position?.remainingMargin?.gt(zeroBN) && !marketInfo?.isSuspended) { transferButtons.push({ i18nTitle: 'futures.market.trade.button.withdraw', - Icon: WithdrawArrow, + icon: , onClick: () => setOpenModal('withdraw'), }); } return transferButtons; - }, [walletAddress, position?.remainingMargin, marketInfo?.isSuspended, connectWallet]); + }, [position?.remainingMargin, marketInfo?.isSuspended, colors.selectedTheme.yellow]); return (
@@ -87,11 +76,11 @@ const TradeIsolatedMargin = ({ isMobile }: Props) => { values={ISOLATED_MARGIN_ORDER_TYPES} selectedIndex={ISOLATED_MARGIN_ORDER_TYPES.indexOf(orderType)} onChange={(oType: number) => { - setOrderType(oType === 0 ? 'market' : 'next-price'); + setOrderType(oType === 0 ? 'market' : 'next price'); }} /> - {orderType === 'next-price' && } + {orderType === 'next price' && } diff --git a/sections/futures/Trade/TradePanelHeader.tsx b/sections/futures/Trade/TradePanelHeader.tsx index 53d590b484..5f7188b0e6 100644 --- a/sections/futures/Trade/TradePanelHeader.tsx +++ b/sections/futures/Trade/TradePanelHeader.tsx @@ -1,12 +1,14 @@ -import { FunctionComponent } from 'react'; +import { ReactNode } from 'react'; import { useTranslation } from 'react-i18next'; import styled from 'styled-components'; +import HelpIcon from 'assets/svg/app/question-mark.svg'; import Button from 'components/Button'; import { ButtonVariant } from 'components/Button/Button'; +import FuturesIcon from 'components/Nav/FuturesIcon'; +import { EXTERNAL_LINKS } from 'constants/links'; import { FuturesAccountType } from 'queries/futures/subgraph'; import { BorderedPanel } from 'styles/common'; -import media from 'styles/media'; type Props = { accountType: FuturesAccountType; @@ -14,24 +16,31 @@ type Props = { onClick: (() => void) | undefined; variant?: ButtonVariant; i18nTitle: string; - Icon?: FunctionComponent; + icon?: ReactNode; }[]; }; export default function TradePanelHeader({ accountType, buttons }: Props) { const { t } = useTranslation(); + return ( + <StyledFuturesIcon type={accountType} /> {t( accountType === 'cross_margin' ? 'futures.market.trade.cross-margin.title' : 'futures.market.trade.isolated-margin.title' )} + {accountType === 'cross_margin' && ( + <FAQLink onClick={() => window.open(EXTERNAL_LINKS.Docs.CrossMarginFaq)}> + <HelpIcon /> + </FAQLink> + )} {buttons && - buttons.map(({ Icon, i18nTitle, variant, onClick }) => ( + buttons.map(({ icon, i18nTitle, variant, onClick }) => ( - {Icon && ( - - - - )} + {icon && {icon}} ))} @@ -53,16 +58,31 @@ export default function TradePanelHeader({ accountType, buttons }: Props) { ); } +const StyledFuturesIcon = styled(FuturesIcon)` + margin-right: 6px; +`; + const Container = styled(BorderedPanel)` display: flex; justify-content: space-between; - padding: 10px 14px; + padding: 10px 10px; margin-bottom: 16px; `; const Title = styled.div` font-family: ${(props) => props.theme.fonts.bold}; font-size: 16px; + display: flex; + align-items: center; + cursor: default; +`; + +const FAQLink = styled.div` + &:hover { + opacity: 0.5; + } + cursor: pointer; + margin-left: 5px; `; const Buttons = styled.div` @@ -71,17 +91,19 @@ const Buttons = styled.div` const HeaderButton = styled(Button)` margin-left: 10px; + font-size: 11px; `; const Label = styled.span` - ${media.lessThan('xl')` - display: none; - `} + @media (max-width: 1550px) { + display: none; + } `; const IconContainer = styled.span` margin-left: 5px; - ${media.lessThan('xl')` - margin-left: 0; - `} + + @media (max-width: 1550px) { + margin-left: 0; + } `; diff --git a/sections/futures/TradeCrossMargin/CreateAccount.tsx b/sections/futures/TradeCrossMargin/CreateAccount.tsx index 36ecf4357c..b03864cd95 100644 --- a/sections/futures/TradeCrossMargin/CreateAccount.tsx +++ b/sections/futures/TradeCrossMargin/CreateAccount.tsx @@ -22,7 +22,7 @@ export default function CreateAccount({ onShowOnboard }: Props) { return ( <> - + {t('futures.market.trade.cross-margin.title')} {t('futures.market.trade.cross-margin.create-account')} @@ -30,7 +30,7 @@ export default function CreateAccount({ onShowOnboard }: Props) { - {t('futures.market.trade.cross-margin.faq-title')} + {t('futures.market.trade.cross-margin.faq-title')} @@ -51,7 +51,13 @@ const FAQContainer = styled(BorderedPanel)` margin-top: 20px; `; -const Title = styled.div<{ yellow?: boolean }>` +const Title = styled.div` + font-family: ${(props) => props.theme.fonts.monoBold}; + font-size: 23px; + color: ${(props) => props.theme.colors.selectedTheme.button.text.primary}; +`; + +const FaqTitle = styled.span<{ yellow?: boolean }>` font-family: ${(props) => props.theme.fonts.monoBold}; font-size: 23px; color: ${(props) => diff --git a/sections/futures/TradeCrossMargin/CrossMarginInfoBox.tsx b/sections/futures/TradeCrossMargin/CrossMarginInfoBox.tsx index 51eb053c07..5f44555d6d 100644 --- a/sections/futures/TradeCrossMargin/CrossMarginInfoBox.tsx +++ b/sections/futures/TradeCrossMargin/CrossMarginInfoBox.tsx @@ -1,7 +1,7 @@ import Wei, { wei } from '@synthetixio/wei'; import React, { useCallback, useMemo, useState } from 'react'; import { useRecoilValue } from 'recoil'; -import styled from 'styled-components'; +import styled, { useTheme } from 'styled-components'; import WithdrawArrow from 'assets/svg/futures/withdraw-arrow.svg'; import InfoBox from 'components/InfoBox'; @@ -37,6 +37,7 @@ type Props = { function MarginInfoBox({ editingLeverage }: Props) { const { selectedLeverage } = useFuturesContext(); + const { colors } = useTheme(); const position = useRecoilValue(positionState); const marketInfo = useRecoilValue(marketInfoState); @@ -106,9 +107,9 @@ function MarginInfoBox({ editingLeverage }: Props) { return { showPreview: - ((orderType === 'market' || orderType === 'next-price') && + ((orderType === 'market' || orderType === 'next price') && (!size.eq(0) || !marginDelta.eq(0))) || - ((orderType === 'limit' || orderType === 'stop') && !!orderPrice && !size.eq(0)), + ((orderType === 'limit' || orderType === 'stop market') && !!orderPrice && !size.eq(0)), totalMargin: potentialTrade.data?.margin.sub(crossMarginFee) || zeroBN, freeAccountMargin: crossMarginFreeMargin.sub(marginDelta), availableMargin: previewAvailableMargin.gt(0) ? previewAvailableMargin : zeroBN, @@ -142,7 +143,10 @@ function MarginInfoBox({ editingLeverage }: Props) { 'Free Account Margin': { value: formatDollars(crossMarginFreeMargin), valueNode: ( - + {potentialTrade.status === 'fetching' ? ( ) : ( @@ -177,21 +181,24 @@ function MarginInfoBox({ editingLeverage }: Props) { ), }, - 'Keeper ETH Balance': - orderType === 'limit' || orderType === 'stop' - ? { - value: formatCurrency('ETH', keeperEthBal, { currencyKey: 'ETH' }), - valueNode: ( - <> - {keeperEthBal.gt(0) && ( - setOpenModal('keeper-deposit')}> - - - )} - - ), - } - : null, + 'Account ETH Balance': !editingLeverage + ? { + value: formatCurrency('ETH', keeperEthBal, { currencyKey: 'ETH' }), + valueNode: ( + <> + {keeperEthBal.gt(0) && ( + setOpenModal('keeper-deposit')}> + + + )} + + ), + } + : null, Leverage: { value: ( <> @@ -260,12 +267,18 @@ const ActionButton = styled(Button)<{ hideBorder?: boolean }>` margin-left: 8px; cursor: pointer; font-size: 10px; - font-family: ${(props) => props.theme.fonts.bold}; + font-family: ${(props) => props.theme.fonts.black}; + font-variant: all-small-caps; border: 1px solid ${(props) => (!props.hideBorder ? props.theme.colors.selectedTheme.yellow : 'none')}; - color: ${(props) => props.theme.colors.selectedTheme.yellow}; + color: ${(props) => props.theme.colors.selectedTheme.button.pill.background}; border-radius: 10px; padding: ${(props) => (props.hideBorder ? '3px 2px 3px 0px' : '3px 5px')}; + &:hover { + background-color: ${(props) => props.theme.colors.selectedTheme.button.pill.background}; + color: ${(props) => props.theme.colors.selectedTheme.button.pill.hover}; + opacity: unset; + } `; export default React.memo(MarginInfoBox); diff --git a/sections/futures/TradeCrossMargin/CrossMarginUnsupported.tsx b/sections/futures/TradeCrossMargin/CrossMarginUnsupported.tsx index d1031ca406..9fb3f16016 100644 --- a/sections/futures/TradeCrossMargin/CrossMarginUnsupported.tsx +++ b/sections/futures/TradeCrossMargin/CrossMarginUnsupported.tsx @@ -10,7 +10,9 @@ export default function CrossMarginUnsupported() { return ( - {t('futures.market.trade.cross-margin.title')} + + {t('futures.market.trade.cross-margin.title')} + {t('futures.market.trade.cross-margin.unsupported')} diff --git a/sections/futures/TradeCrossMargin/DepositWithdrawCrossMargin.tsx b/sections/futures/TradeCrossMargin/DepositWithdrawCrossMargin.tsx index 225cb8a20f..cd321490ab 100644 --- a/sections/futures/TradeCrossMargin/DepositWithdrawCrossMargin.tsx +++ b/sections/futures/TradeCrossMargin/DepositWithdrawCrossMargin.tsx @@ -39,11 +39,11 @@ export default function DepositWithdrawCrossMargin({ const { signer } = Connector.useContainer(); const { monitorTransaction } = TransactionNotifier.useContainer(); const { crossMarginAccountContract } = useCrossMarginAccountContracts(); - const { handleRefetch, refetchUntilUpdate } = useRefetchContext(); + const { refetchUntilUpdate } = useRefetchContext(); const susdContract = useSUSDContract(); const balances = useRecoilValue(balancesState); - const { freeMargin } = useRecoilValue(crossMarginAccountOverviewState); + const { freeMargin, allowance } = useRecoilValue(crossMarginAccountOverviewState); const [amount, setAmount] = useState(''); const [transferType, setTransferType] = useState(0); @@ -65,16 +65,10 @@ export default function DepositWithdrawCrossMargin({ monitorTransaction({ txHash: tx.hash, onTxConfirmed: async () => { - try { - await refetchUntilUpdate('wallet-balance-change'); - handleRefetch('account-margin-change'); - } catch (err) { - logError(err); - } finally { - setTxState('complete'); - onComplete?.(); - onDismiss(); - } + await refetchUntilUpdate('account-margin-change'); + setTxState('complete'); + onComplete?.(); + onDismiss(); }, }); } catch (err) { @@ -87,7 +81,6 @@ export default function DepositWithdrawCrossMargin({ amount, refetchUntilUpdate, monitorTransaction, - handleRefetch, onComplete, onDismiss, ]); @@ -98,7 +91,6 @@ export default function DepositWithdrawCrossMargin({ if (!crossMarginAccountContract || !wallet) throw new Error('No cross margin account'); const weiAmount = wei(amount ?? 0, 18); - const allowance = await susdContract?.allowance(wallet, crossMarginAccountContract.address); if (wei(allowance).lt(weiAmount)) { setTxState('approving'); @@ -122,7 +114,15 @@ export default function DepositWithdrawCrossMargin({ setTxState('none'); logError(err); } - }, [crossMarginAccountContract, amount, signer, susdContract, monitorTransaction, submitDeposit]); + }, [ + crossMarginAccountContract, + amount, + signer, + susdContract, + allowance, + monitorTransaction, + submitDeposit, + ]); const withdrawMargin = useCallback(async () => { try { @@ -131,9 +131,9 @@ export default function DepositWithdrawCrossMargin({ const tx = await crossMarginAccountContract.withdraw(wei(amount).toBN()); monitorTransaction({ txHash: tx.hash, - onTxConfirmed: () => { + onTxConfirmed: async () => { + await refetchUntilUpdate('account-margin-change'); setTxState('complete'); - handleRefetch('account-margin-change'); onComplete?.(); onDismiss(); }, @@ -147,7 +147,7 @@ export default function DepositWithdrawCrossMargin({ crossMarginAccountContract, amount, monitorTransaction, - handleRefetch, + refetchUntilUpdate, onComplete, onDismiss, ]); @@ -165,6 +165,10 @@ export default function DepositWithdrawCrossMargin({ } }, [amount, freeMargin, transferType, susdBal, t]); + const isApproved = useMemo(() => { + return allowance.gt(wei(amount || 0)); + }, [allowance, amount]); + const handleSetMax = React.useCallback(() => { setAmount(susdBal.toString()); }, [susdBal]); @@ -215,11 +219,13 @@ export default function DepositWithdrawCrossMargin({ ) : ( disabledReason || - t( - `futures.market.trade.margin.modal.${ - transferType === 0 ? 'deposit' : 'withdraw' - }.button` - ) + (transferType === 0 + ? t( + `futures.market.trade.margin.modal.deposit.${ + isApproved ? 'button' : 'approve-button' + }` + ) + : t(`futures.market.trade.margin.modal.withdraw.button`)) )} @@ -253,6 +259,7 @@ export const MarginActionButton = styled(Button)` margin-top: 16px; height: 55px; font-size: 15px; + text-transform: initial; `; export const MaxButton = styled.button` diff --git a/sections/futures/TradeCrossMargin/EditLeverageModal.tsx b/sections/futures/TradeCrossMargin/EditLeverageModal.tsx index 565514ca58..39a9aaa367 100644 --- a/sections/futures/TradeCrossMargin/EditLeverageModal.tsx +++ b/sections/futures/TradeCrossMargin/EditLeverageModal.tsx @@ -2,7 +2,7 @@ import { wei } from '@synthetixio/wei'; import { debounce } from 'lodash'; import React, { useCallback, useEffect, useMemo, useState } from 'react'; import { useTranslation } from 'react-i18next'; -import { useRecoilValue } from 'recoil'; +import { useRecoilState, useRecoilValue } from 'recoil'; import styled from 'styled-components'; import BaseModal from 'components/BaseModal'; @@ -17,15 +17,19 @@ import TransactionNotifier from 'containers/TransactionNotifier'; import { useFuturesContext } from 'contexts/FuturesContext'; import { useRefetchContext } from 'contexts/RefetchContext'; import usePersistedRecoilState from 'hooks/usePersistedRecoilState'; +import { ORDER_PREVIEW_ERRORS_I18N, previewErrorI18n } from 'queries/futures/constants'; import { crossMarginTotalMarginState, currentMarketState, marketInfoState, + orderTypeState, positionState, + potentialTradeDetailsState, preferredLeverageState, tradeFeesState, } from 'store/futures'; import { FlexDivRow, FlexDivRowCentered } from 'styles/common'; +import { isUserDeniedError } from 'utils/formatters/error'; import { formatDollars } from 'utils/formatters/number'; import logError from 'utils/logError'; @@ -40,7 +44,7 @@ type DepositMarginModalProps = { export default function EditLeverageModal({ onDismiss }: DepositMarginModalProps) { const { t } = useTranslation(); const { monitorTransaction } = TransactionNotifier.useContainer(); - const { handleRefetch } = useRefetchContext(); + const { handleRefetch, refetchUntilUpdate } = useRefetchContext(); const { selectedLeverage, onLeverageChange, @@ -53,6 +57,8 @@ export default function EditLeverageModal({ onDismiss }: DepositMarginModalProps const marketAsset = useRecoilValue(currentMarketState); const totalMargin = useRecoilValue(crossMarginTotalMarginState); const tradeFees = useRecoilValue(tradeFeesState); + const { error: previewError, data: previewData } = useRecoilValue(potentialTradeDetailsState); + const [orderType, setOrderType] = useRecoilState(orderTypeState); const [preferredLeverage, setPreferredLeverage] = usePersistedRecoilState(preferredLeverageState); @@ -62,18 +68,27 @@ export default function EditLeverageModal({ onDismiss }: DepositMarginModalProps const maxLeverage = Number((market?.maxLeverage || wei(DEFAULT_LEVERAGE)).toString(2)); + useEffect(() => { + if (orderType !== 'market') { + setOrderType('market'); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + const maxPositionUsd = useMemo(() => { return totalMargin.mul(leverage); }, [totalMargin, leverage]); const handleIncrease = () => { - const newLeverage = Math.max(leverage + 1, 1); + let newLeverage = wei(leverage).add(1).toNumber(); + newLeverage = Math.max(newLeverage, 1); setLeverage(Math.min(newLeverage, maxLeverage)); previewPositionChange(newLeverage); }; const handleDecrease = () => { - const newLeverage = Math.max(leverage - 1, 1); + let newLeverage = wei(leverage).sub(1).toNumber(); + newLeverage = Math.max(newLeverage, 1); setLeverage(newLeverage); previewPositionChange(newLeverage); }; @@ -81,7 +96,9 @@ export default function EditLeverageModal({ onDismiss }: DepositMarginModalProps // eslint-disable-next-line react-hooks/exhaustive-deps const previewPositionChange = useCallback( debounce((leverage: number) => { - onLeverageChange(leverage); + if (leverage >= 1) { + onLeverageChange(leverage); + } }, 200), [onLeverageChange] ); @@ -99,17 +116,22 @@ export default function EditLeverageModal({ onDismiss }: DepositMarginModalProps setError(failureMessage?.failureReason || t('common.transaction.transaction-failed')); }, onTxConfirmed: () => { - resetTradeState(); - handleRefetch('modify-position'); - onDismiss(); + try { + resetTradeState(); + handleRefetch('modify-position'); + refetchUntilUpdate('account-margin-change'); + setSubmitting(false); + onDismiss(); + } catch (err) { + logError(err); + } }, }); } } catch (err) { + setSubmitting(false); setError(t('common.transaction.transaction-failed')); logError(err); - } finally { - setSubmitting(false); } resetTradeState(); } else { @@ -133,6 +155,7 @@ export default function EditLeverageModal({ onDismiss }: DepositMarginModalProps onLeverageChange, submitCrossMarginOrder, setError, + refetchUntilUpdate, handleRefetch, onDismiss, ]); @@ -152,6 +175,8 @@ export default function EditLeverageModal({ onDismiss }: DepositMarginModalProps // eslint-disable-next-line react-hooks/exhaustive-deps }, []); + const errorMessage = error || previewError; + return ( {t('futures.market.trade.leverage.modal.input-label')}: { setLeverage(Number(v)); previewPositionChange(Number(v)); @@ -193,12 +218,14 @@ export default function EditLeverageModal({ onDismiss }: DepositMarginModalProps {position?.position && ( <> + {tradeFees.total.gt(0) && } )} : t('futures.market.trade.leverage.modal.confirm')} - {error && ( + {errorMessage && !isUserDeniedError(errorMessage) && ( <> - + )} @@ -231,6 +267,7 @@ const MaxPosContainer = styled(FlexDivRowCentered)` `; const Label = styled.p` + font-size: 13px; color: ${(props) => props.theme.colors.selectedTheme.gray}; `; diff --git a/sections/futures/TradeCrossMargin/ManageKeeperBalanceModal.tsx b/sections/futures/TradeCrossMargin/ManageKeeperBalanceModal.tsx index d20f0c7c4e..ddd025fd96 100644 --- a/sections/futures/TradeCrossMargin/ManageKeeperBalanceModal.tsx +++ b/sections/futures/TradeCrossMargin/ManageKeeperBalanceModal.tsx @@ -1,9 +1,10 @@ import { wei } from '@synthetixio/wei'; import React, { useCallback, useEffect, useMemo, useState } from 'react'; import { useTranslation } from 'react-i18next'; +import { useRecoilValue } from 'recoil'; import styled from 'styled-components'; -import Error from 'components/Error'; +import ErrorView from 'components/Error'; import CustomInput from 'components/Input/CustomInput'; import Loader from 'components/Loader'; import SegmentedControl from 'components/SegmentedControl'; @@ -12,7 +13,7 @@ import Connector from 'containers/Connector'; import TransactionNotifier from 'containers/TransactionNotifier'; import { useRefetchContext } from 'contexts/RefetchContext'; import useCrossMarginAccountContracts from 'hooks/useCrossMarginContracts'; -import useCrossMarginKeeperDeposit from 'hooks/useCrossMarginKeeperEthBal'; +import { crossMarginAccountOverviewState, openOrdersState } from 'store/futures'; import { isUserDeniedError } from 'utils/formatters/error'; import { formatCurrency, zeroBN } from 'utils/formatters/number'; import logError from 'utils/logError'; @@ -36,11 +37,13 @@ const DEPOSIT_ENABLED = false; export default function ManageKeeperBalanceModal({ onDismiss, defaultType }: Props) { const { t } = useTranslation(); - const { keeperEthBal, getKeeperEthBal } = useCrossMarginKeeperDeposit(); const { crossMarginAccountContract } = useCrossMarginAccountContracts(); const { monitorTransaction } = TransactionNotifier.useContainer(); const { provider, walletAddress } = Connector.useContainer(); - const { handleRefetch } = useRefetchContext(); + const { refetchUntilUpdate } = useRefetchContext(); + + const { keeperEthBal } = useRecoilValue(crossMarginAccountOverviewState); + const openOrders = useRecoilValue(openOrdersState); const [amount, setAmount] = useState(''); const [isMax, setMax] = useState(false); @@ -73,13 +76,10 @@ export default function ManageKeeperBalanceModal({ onDismiss, defaultType }: Pro if (tx?.hash) { monitorTransaction({ txHash: tx.hash, - onTxConfirmed: () => { - setTimeout(() => { - handleRefetch('account-margin-change'); - setTransacting(false); - getKeeperEthBal(); - onDismiss(); - }, 2000); + onTxConfirmed: async () => { + refetchUntilUpdate('account-margin-change'); + setTransacting(false); + onDismiss(); }, }); } @@ -95,9 +95,8 @@ export default function ManageKeeperBalanceModal({ onDismiss, defaultType }: Pro crossMarginAccountContract, amount, t, - handleRefetch, + refetchUntilUpdate, onDismiss, - getKeeperEthBal, monitorTransaction, ]); @@ -202,8 +201,15 @@ export default function ManageKeeperBalanceModal({ onDismiss, defaultType }: Pro ) )} + {openOrders.length && transferType === 1 && ( + + )} - {error && } + {error && } ); } diff --git a/sections/futures/TradeCrossMargin/TradeCrossMargin.tsx b/sections/futures/TradeCrossMargin/TradeCrossMargin.tsx index c33d621620..dd6c05d7de 100644 --- a/sections/futures/TradeCrossMargin/TradeCrossMargin.tsx +++ b/sections/futures/TradeCrossMargin/TradeCrossMargin.tsx @@ -1,14 +1,11 @@ -import { useConnectModal } from '@rainbow-me/rainbowkit'; -import { wei } from '@synthetixio/wei'; -import { useCallback, useEffect, useState } from 'react'; +import { useCallback, useState } from 'react'; import { useRecoilState, useRecoilValue } from 'recoil'; -import styled from 'styled-components'; +import { useTheme } from 'styled-components'; import DepositArrow from 'assets/svg/futures/deposit-arrow.svg'; import WithdrawArrow from 'assets/svg/futures/withdraw-arrow.svg'; import Loader from 'components/Loader'; import SegmentedControl from 'components/SegmentedControl'; -import StyledSlider from 'components/Slider/StyledSlider'; import Spacer from 'components/Spacer'; import { CROSS_MARGIN_ORDER_TYPES } from 'constants/futures'; import Connector from 'containers/Connector'; @@ -18,14 +15,12 @@ import { futuresAccountState, futuresAccountTypeState, leverageSideState, - futuresTradeInputsState, orderTypeState, futuresOrderPriceState, marketAssetRateState, showCrossMarginOnboardState, crossMarginAccountOverviewState, } from 'store/futures'; -import { FlexDivRow } from 'styles/common'; import { ceilNumber, floorNumber } from 'utils/formatters/number'; import { orderPriceInvalidLabel } from 'utils/futures'; @@ -47,38 +42,21 @@ type Props = { export default function TradeCrossMargin({ isMobile }: Props) { const { walletAddress } = Connector.useContainer(); + const { colors } = useTheme(); const [leverageSide, setLeverageSide] = useRecoilState(leverageSideState); const { crossMarginAddress, crossMarginAvailable, status } = useRecoilValue(futuresAccountState); const selectedAccountType = useRecoilValue(futuresAccountTypeState); const { freeMargin } = useRecoilValue(crossMarginAccountOverviewState); - - const { susdSize } = useRecoilValue(futuresTradeInputsState); const marketAssetRate = useRecoilValue(marketAssetRateState); const [orderType, setOrderType] = useRecoilState(orderTypeState); const [orderPrice, setOrderPrice] = useRecoilState(futuresOrderPriceState); - const { onTradeAmountChange, maxUsdInputAmount, onTradeOrderPriceChange } = useFuturesContext(); - const { openConnectModal: connectWallet } = useConnectModal(); + const { onTradeOrderPriceChange } = useFuturesContext(); - const [percent, setPercent] = useState(0); - const [usdAmount, setUsdAmount] = useState(susdSize); const [showOnboard, setShowOnboard] = useRecoilState(showCrossMarginOnboardState); const [openTransferModal, setOpenTransferModal] = useState<'deposit' | 'withdraw' | null>(null); - // eslint-disable-next-line - const onChangeMarginPercent = useCallback( - (value, commit = false) => { - setPercent(value); - const fraction = value / 100; - const usdAmount = maxUsdInputAmount.mul(fraction).toString(); - const usdValue = Number(usdAmount).toFixed(0); - setUsdAmount(usdValue); - onTradeAmountChange(usdValue, 'usd', { simulateChange: !commit }); - }, - [onTradeAmountChange, maxUsdInputAmount] - ); - const onChangeOrderPrice = useCallback( (price: string) => { const invalidLabel = orderPriceInvalidLabel(price, leverageSide, marketAssetRate, orderType); @@ -90,38 +68,20 @@ export default function TradeCrossMargin({ isMobile }: Props) { [onTradeOrderPriceChange, setOrderPrice, leverageSide, marketAssetRate, orderType] ); - useEffect(() => { - if (susdSize !== usdAmount) { - if (!susdSize || maxUsdInputAmount.eq(0)) { - setPercent(0); - return; - } - - const percent = wei(susdSize).div(maxUsdInputAmount).mul(100).toNumber(); - setPercent(Number(percent.toFixed(2))); - } - // eslint-disable-next-line - }, [susdSize]); - const headerButtons = walletAddress ? [ { i18nTitle: 'futures.market.trade.button.deposit', - Icon: DepositArrow, + icon: , onClick: () => setOpenTransferModal('deposit'), }, { i18nTitle: 'futures.market.trade.button.withdraw', - Icon: WithdrawArrow, + icon: , onClick: () => setOpenTransferModal('withdraw'), }, ] - : [ - { - i18nTitle: 'futures.market.trade.button.connect-wallet', - onClick: connectWallet, - }, - ]; + : []; if (!showOnboard && (status === 'refetching' || status === 'initial-fetch')) return ; @@ -136,7 +96,7 @@ export default function TradeCrossMargin({ isMobile }: Props) { {!isMobile && } - {} + - - - onChangeMarginPercent(value, false)} - onChangeCommitted={(_, value) => onChangeMarginPercent(value, true)} - marks={[ - { value: 0, label: `0%` }, - { value: 100, label: `100%` }, - ]} - valueLabelDisplay="on" - valueLabelFormat={(v) => `${v}%`} - $currentMark={percent} - /> - + {orderType !== 'market' && ( <> ); } - -const SliderRow = styled(FlexDivRow)` - margin-top: 8px; - margin-bottom: 32px; - position: relative; -`; diff --git a/sections/futures/Trades/Trades.tsx b/sections/futures/Trades/Trades.tsx index ba34143430..70dea783f7 100644 --- a/sections/futures/Trades/Trades.tsx +++ b/sections/futures/Trades/Trades.tsx @@ -45,7 +45,7 @@ const Trades: React.FC = ({ history, isLoading, isLoaded, marketAss feesPaid: trade?.feesPaid.div(ETH_UNIT), id: trade?.txnHash, asset: marketAsset, - type: trade?.orderType === 'NextPrice' ? 'Next Price' : trade?.orderType, + type: trade?.orderType, status: trade?.positionClosed ? TradeStatus.CLOSED : TradeStatus.OPEN, }; }); diff --git a/sections/futures/UserInfo/OpenOrdersTable.tsx b/sections/futures/UserInfo/OpenOrdersTable.tsx index 166dfe2d9f..56ed236783 100644 --- a/sections/futures/UserInfo/OpenOrdersTable.tsx +++ b/sections/futures/UserInfo/OpenOrdersTable.tsx @@ -18,6 +18,7 @@ import useNetworkSwitcher from 'hooks/useNetworkSwitcher'; import { FuturesOrder, PositionSide } from 'queries/futures/types'; import { currentMarketState, openOrdersState, selectedFuturesAddressState } from 'store/futures'; import { gasSpeedState } from 'store/wallet'; +import { formatDollars } from 'utils/formatters/number'; import { getDisplayAsset } from 'utils/futures'; import logError from 'utils/logError'; @@ -85,7 +86,7 @@ const OpenOrdersTable: React.FC = () => { async (order: FuturesOrder | undefined) => { if (!order) return; setCancelling(order.id); - if (order.orderType === 'Limit' || order.orderType === 'Stop') { + if (order.orderType === 'Limit' || order.orderType === 'Stop Market') { try { const id = order.id.split('-')[2]; const tx = await crossMarginAccountContract?.cancelOrder(id); @@ -112,12 +113,22 @@ const OpenOrdersTable: React.FC = () => { }, [cancelNextPriceOrder.hash, executeNextPriceOrder.hash]); const rowsData = useMemo(() => { - if (!cancelling) return openOrders; - const copyOrders = [...openOrders]; - const cancellingIndex = copyOrders.findIndex((o) => o.id === cancelling); - copyOrders[cancellingIndex] = { ...copyOrders[cancellingIndex], isCancelling: true }; - return copyOrders; - }, [openOrders, cancelling]); + const ordersWithCancel = openOrders + .map((o) => ({ ...o, cancel: () => onCancel(o) })) + .sort((a, b) => { + return b.asset === currencyKey && a.asset !== currencyKey + ? 1 + : b.asset === currencyKey && a.asset === currencyKey + ? 0 + : -1; + }); + const cancellingIndex = ordersWithCancel.findIndex((o) => o.id === cancelling); + ordersWithCancel[cancellingIndex] = { + ...ordersWithCancel[cancellingIndex], + isCancelling: true, + }; + return ordersWithCancel; + }, [openOrders, cancelling, currencyKey, onCancel]); return ( <> @@ -155,7 +166,7 @@ const OpenOrdersTable: React.FC = () => { {cellProps.row.original.market} {cellProps.row.original.isStale && ( - + {t('futures.market.user.open-orders.badges.expired')} )} @@ -209,6 +220,20 @@ const OpenOrdersTable: React.FC = () => { sortable: true, width: 50, }, + { + Header: ( + + {t('futures.market.user.open-orders.table.reserved-margin')} + + ), + accessor: 'marginDelta', + Cell: (cellProps: CellProps) => { + const { marginDelta } = cellProps.row.original; + return
{formatDollars(marginDelta?.gt(0) ? marginDelta : '0')}
; + }, + sortable: true, + width: 50, + }, { Header: ( @@ -220,10 +245,7 @@ const OpenOrdersTable: React.FC = () => { const cancellingRow = cellProps.row.original.isCancelling; return (
- onCancel(cellProps.row.original)} - > + {t('futures.market.user.open-orders.actions.cancel')} {cellProps.row.original.isExecutable && ( diff --git a/sections/futures/UserInfo/UserInfo.tsx b/sections/futures/UserInfo/UserInfo.tsx index 102f7019b9..56dcc34129 100644 --- a/sections/futures/UserInfo/UserInfo.tsx +++ b/sections/futures/UserInfo/UserInfo.tsx @@ -13,10 +13,8 @@ import TabButton from 'components/Button/TabButton'; import { TabPanel } from 'components/Tab'; import ROUTES from 'constants/routes'; import Connector from 'containers/Connector'; -import { PositionHistory } from 'queries/futures/types'; import { FuturesTrade } from 'queries/futures/types'; import useGetFuturesMarginTransfers from 'queries/futures/useGetFuturesMarginTransfers'; -import useGetFuturesPositionForAccount from 'queries/futures/useGetFuturesPositionForAccount'; import useGetFuturesTradesForAccount from 'queries/futures/useGetFuturesTradesForAccount'; import FuturesPositionsTable from 'sections/dashboard/FuturesPositionsTable'; import { @@ -53,10 +51,6 @@ const UserInfo: React.FC = () => { const openOrders = useRecoilValue(openOrdersState); const accountType = useRecoilValue(futuresAccountTypeState); - const futuresPositionQuery = useGetFuturesPositionForAccount(); - // eslint-disable-next-line react-hooks/exhaustive-deps - const futuresPositionHistory = futuresPositionQuery?.data ?? []; - const [showShareModal, setShowShareModal] = useState(false); const [hasOpenPosition, setHasOpenPosition] = useState(false); const [openProfitCalcModal, setOpenProfitCalcModal] = useState(false); @@ -156,16 +150,8 @@ const UserInfo: React.FC = () => { ); useEffect(() => { - let currentPosition: PositionHistory[] = []; - - if (futuresPositionHistory.length > 0) { - currentPosition = futuresPositionHistory.filter( - (obj: PositionHistory) => obj.asset === marketAsset - ); - - setHasOpenPosition(currentPosition.length === 0 ? false : true); - } - }, [futuresPositionHistory, marketAsset]); + setHasOpenPosition(!!position && !!position.position); + }, [position]); return ( <> @@ -203,10 +189,7 @@ const UserInfo: React.FC = () => { - + @@ -238,7 +221,6 @@ const UserInfo: React.FC = () => { position={position} marketAsset={marketAsset} setShowShareModal={setShowShareModal} - futuresPositionHistory={futuresPositionHistory} /> )} diff --git a/sections/homepage/Hero/Hero.tsx b/sections/homepage/Hero/Hero.tsx index f0e878a700..f132f87c0f 100644 --- a/sections/homepage/Hero/Hero.tsx +++ b/sections/homepage/Hero/Hero.tsx @@ -8,9 +8,8 @@ import LogoNoTextSVG from 'assets/svg/brand/logo-no-text.svg'; import Button from 'components/Button'; import PoweredBySynthetix from 'components/PoweredBySynthetix'; import Webp from 'components/Webp'; +import { DEFAULT_FUTURES_MARGIN_TYPE } from 'constants/defaults'; import ROUTES from 'constants/routes'; -import usePersistedRecoilState from 'hooks/usePersistedRecoilState'; -import { futuresAccountTypeState } from 'store/futures'; import { FlexDivColCentered, GridDiv, Paragraph } from 'styles/common'; import media from 'styles/media'; @@ -18,7 +17,6 @@ import { StackSection } from '../common'; const Hero = () => { const { t } = useTranslation(); - const [accountType] = usePersistedRecoilState(futuresAccountTypeState); return ( @@ -34,7 +32,7 @@ const Hero = () => { - + diff --git a/sections/homepage/ShortList/ShortList.tsx b/sections/homepage/ShortList/ShortList.tsx index 5203fc90f0..2aef2bd7ab 100644 --- a/sections/homepage/ShortList/ShortList.tsx +++ b/sections/homepage/ShortList/ShortList.tsx @@ -1,4 +1,3 @@ -import Wei, { wei } from '@synthetixio/wei'; import { useRouter } from 'next/router'; import React, { useMemo } from 'react'; import { useTranslation } from 'react-i18next'; @@ -12,41 +11,19 @@ import Loader from 'components/Loader'; import Table from 'components/Table'; import ROUTES from 'constants/routes'; import useENS from 'hooks/useENS'; -import { FuturesStat } from 'queries/futures/types'; import useGetFuturesCumulativeStats from 'queries/futures/useGetFuturesCumulativeStats'; import useGetStats from 'queries/futures/useGetStats'; import { FlexDivColCentered, FlexDivRow, SmallGoldenHeader, WhiteHeader } from 'styles/common'; import media, { Media } from 'styles/media'; import { formatDollars, formatNumber, zeroBN } from 'utils/formatters/number'; -import { truncateAddress } from 'utils/formatters/string'; -import { Copy, StackSection, Title } from '../common'; - -type Stat = { - pnl: Wei; - liquidations: Wei; - totalTrades: Wei; - totalVolume: Wei; -}; +import { StackSection, Title } from '../common'; const ShortList = () => { const { t } = useTranslation(); const statsQuery = useGetStats(true); const stats = useMemo(() => statsQuery.data ?? [], [statsQuery]); - const pnlMap = useMemo( - () => - stats.reduce((acc: Record, stat: FuturesStat) => { - acc[stat.account] = { - pnl: wei(stat.pnlWithFeesPaid ?? 0, 18, true), - liquidations: new Wei(stat.liquidations ?? 0), - totalTrades: new Wei(stat.totalTrades ?? 0), - totalVolume: wei(stat.totalVolume ?? 0, 18, true), - }; - return acc; - }, {}), - [stats] - ); const router = useRouter(); const onClickTrader = (trader: string) => { @@ -66,26 +43,6 @@ const ShortList = () => { } }; - let data = useMemo( - () => - stats - .sort( - (a: FuturesStat, b: FuturesStat) => - (pnlMap[b.account]?.pnl || 0) - (pnlMap[a.account]?.pnl || 0) - ) - .map((stat: FuturesStat, i: number) => ({ - rank: i + 1, - trader: stat.account, - traderShort: truncateAddress(stat.account), - totalTrades: (pnlMap[stat.account]?.totalTrades ?? wei(0)).toNumber(), - totalVolume: (pnlMap[stat.account]?.totalVolume ?? wei(0)).toNumber(), - liquidations: (pnlMap[stat.account]?.liquidations ?? wei(0)).toNumber(), - '24h': 80000, - pnl: (pnlMap[stat.account]?.pnl ?? wei(0)).toNumber(), - })), - [stats, pnlMap] - ); - const title = ( <> {t('homepage.shortlist.title')} @@ -111,7 +68,7 @@ const ShortList = () => { isLoading={statsQuery.isLoading} showShortList onTableRowClick={(row) => onClickTrader(row.original.trader)} - data={data} + data={stats} pageSize={5} hideHeaders={false} columns={[ @@ -193,7 +150,7 @@ const ShortList = () => { isLoading={statsQuery.isLoading} showShortList onTableRowClick={(row) => onClickTrader(row.original.trader)} - data={data} + data={stats} pageSize={5} hideHeaders={false} columns={[ @@ -415,14 +372,6 @@ const StyledTrader = styled.a` font-size: 15px; `; -const FeatureCopy = styled(Copy)` - font-size: 15px; - line-height: 150%; - letter-spacing: -0.03em; - color: ${(props) => props.theme.colors.common.secondaryGray}; - width: 183px; -`; - const FeatureTitle = styled(Title)` font-size: 24px; line-height: 100%; @@ -442,14 +391,4 @@ const SectionFeatureTitle = styled(FeatureTitle)` `} `; -const SectionFeatureCopy = styled(FeatureCopy)` - margin-top: 16px; - text-align: center; - width: 500px; - font-size: 18px; - ${media.lessThan('sm')` - width: 100vw; - `} -`; - export default ShortList; diff --git a/sections/homepage/TradeNow/TradeNow.tsx b/sections/homepage/TradeNow/TradeNow.tsx index 3b901249d1..d007b6a5ae 100644 --- a/sections/homepage/TradeNow/TradeNow.tsx +++ b/sections/homepage/TradeNow/TradeNow.tsx @@ -4,15 +4,13 @@ import { useTranslation } from 'react-i18next'; import styled from 'styled-components'; import Button from 'components/Button'; +import { DEFAULT_FUTURES_MARGIN_TYPE } from 'constants/defaults'; import ROUTES from 'constants/routes'; -import usePersistedRecoilState from 'hooks/usePersistedRecoilState'; -import { futuresAccountTypeState } from 'store/futures'; import { FlexDivColCentered, Paragraph, SmallGoldenHeader, WhiteHeader } from 'styles/common'; import media from 'styles/media'; const TradeNow = () => { const { t } = useTranslation(); - const [accountType] = usePersistedRecoilState(futuresAccountTypeState); const title = ( @@ -20,7 +18,7 @@ const TradeNow = () => { {t('homepage.tradenow.description')} {t('homepage.tradenow.categories')} - + diff --git a/sections/leaderboard/AllTime/AllTime.tsx b/sections/leaderboard/AllTime/AllTime.tsx index 8843ccb061..c213395e06 100644 --- a/sections/leaderboard/AllTime/AllTime.tsx +++ b/sections/leaderboard/AllTime/AllTime.tsx @@ -9,18 +9,27 @@ import Table from 'components/Table'; import { DEFAULT_LEADERBOARD_ROWS } from 'constants/defaults'; import Connector from 'containers/Connector'; import useENSAvatar from 'hooks/useENSAvatar'; +import { AccountStat } from 'queries/futures/types'; -import { AccountStat, getMedal, PIN, StyledTrader } from '../common'; +import { getMedal, StyledTrader } from '../common'; type AllTimeProps = { stats: AccountStat[]; isLoading: boolean; - searchTerm: string; + pinRow: AccountStat[]; onClickTrader: (trader: string) => void; compact?: boolean; + activeTab?: string; }; -const AllTime: FC = ({ stats, isLoading, searchTerm, onClickTrader, compact }) => { +const AllTime: FC = ({ + stats, + isLoading, + pinRow, + onClickTrader, + compact, + activeTab, +}) => { const { t } = useTranslation(); const { staticMainnetProvider, walletAddress } = Connector.useContainer(); @@ -39,30 +48,8 @@ const AllTime: FC = ({ stats, isLoading, searchTerm, onClickTrader } const data = useMemo(() => { - const statsData = stats - .sort((a: AccountStat, b: AccountStat) => a.rank - b.rank) - .map((trader: any) => { - return { - ...trader, - rankText: trader.rank.toString(), - }; - }) - .filter((i: { account: string; traderEns: string }) => - searchTerm?.length - ? i.account.toLowerCase().includes(searchTerm) || - i.traderEns?.toLowerCase().includes(searchTerm) - : true - ); - - const pinRow = statsData - .filter((trader) => trader.account.toLowerCase() === walletAddress?.toLowerCase()) - .map((trader) => ({ - ...trader, - rankText: `${trader.rank}${PIN}`, - })); - - return [...pinRow, ...statsData]; - }, [stats, searchTerm, walletAddress]); + return [...pinRow, ...stats]; + }, [stats, pinRow]); return ( <> @@ -77,11 +64,14 @@ const AllTime: FC = ({ stats, isLoading, searchTerm, onClickTrader hiddenColumns={ compact ? ['rank', 'totalTrades', 'liquidations', 'totalVolume', 'pnl'] : undefined } + columnsDeps={[activeTab]} columns={[ { Header: ( - {t('leaderboard.leaderboard.table.title')} + + {activeTab} {t('leaderboard.leaderboard.table.title')} + ), accessor: 'title', @@ -140,25 +130,20 @@ const AllTime: FC = ({ stats, isLoading, searchTerm, onClickTrader {t('leaderboard.leaderboard.table.total-trades')} ), accessor: 'totalTrades', - sortType: 'basic', width: 80, - sortable: true, }, { Header: ( {t('leaderboard.leaderboard.table.liquidations')} ), accessor: 'liquidations', - sortType: 'basic', width: 80, - sortable: true, }, { Header: ( {t('leaderboard.leaderboard.table.total-volume')} ), accessor: 'totalVolume', - sortType: 'basic', Cell: (cellProps: CellProps) => ( = ({ stats, isLoading, searchTerm, onClickTrader /> ), width: compact ? 'auto' : 100, - sortable: true, }, { Header: {t('leaderboard.leaderboard.table.pnl')}, accessor: 'pnl', - sortType: 'basic', Cell: (cellProps: CellProps) => ( = ({ stats, isLoading, searchTerm, onClickTrader /> ), width: compact ? 'auto' : 100, - sortable: true, }, ], }, @@ -282,6 +264,7 @@ const TableTitle = styled.div` const TitleText = styled.div` font-family: ${(props) => props.theme.fonts.regular}; color: ${(props) => props.theme.colors.selectedTheme.gray}; + text-transform: capitalize; `; const TableHeader = styled.div` diff --git a/sections/leaderboard/Competition/Competition.tsx b/sections/leaderboard/Competition/Competition.tsx index 7c4bd6c333..a82a62903c 100644 --- a/sections/leaderboard/Competition/Competition.tsx +++ b/sections/leaderboard/Competition/Competition.tsx @@ -9,10 +9,11 @@ import { DesktopOnlyView, MobileOrTabletView } from 'components/Media'; import Table, { TableNoResults } from 'components/Table'; import Connector from 'containers/Connector'; import useGetFile from 'queries/files/useGetFile'; +import { AccountStat } from 'queries/futures/types'; import { formatPercent } from 'utils/formatters/number'; import { truncateAddress } from 'utils/formatters/string'; -import { AccountStat, getMedal, PIN, StyledTrader, Tier } from '../common'; +import { getMedal, PIN, StyledTrader, Tier } from '../common'; import { COMPETITION_DATA_LOCATION, MOBILE_COMPETITION_START } from './constants'; type CompetitionProps = { diff --git a/sections/leaderboard/Leaderboard/Leaderboard.tsx b/sections/leaderboard/Leaderboard/Leaderboard.tsx index c051e52b52..fcaf1741b7 100644 --- a/sections/leaderboard/Leaderboard/Leaderboard.tsx +++ b/sections/leaderboard/Leaderboard/Leaderboard.tsx @@ -1,24 +1,21 @@ -import { wei } from '@synthetixio/wei'; +import { getAddress, isAddress } from 'ethers/lib/utils'; import { useRouter } from 'next/router'; -import { FC, useMemo, useState } from 'react'; -import { useRecoilValue } from 'recoil'; +import { FC, useCallback, useEffect, useMemo, useState } from 'react'; import styled from 'styled-components'; import TabButton from 'components/Button/TabButton'; import Search from 'components/Table/Search'; import ROUTES from 'constants/routes'; +import useENS from 'hooks/useENS'; import useENSs from 'hooks/useENSs'; -import { FuturesStat } from 'queries/futures/types'; -import useGetStats from 'queries/futures/useGetStats'; +import { AccountStat } from 'queries/futures/types'; +import useLeaderboard, { DEFAULT_LEADERBOARD_DATA } from 'queries/futures/useLeaderboard'; import { CompetitionBanner } from 'sections/shared/components/CompetitionBanner'; -import { isCompetitionActive } from 'store/ui'; import { FlexDivCol } from 'styles/common'; import media from 'styles/media'; -import { truncateAddress } from 'utils/formatters/string'; import AllTime from '../AllTime'; -import { AccountStat, COMPETITION_TIERS, Tier } from '../common'; -import Competition from '../Competition'; +import { PIN } from '../common'; import TraderHistory from '../TraderHistory'; type LeaderboardProps = { @@ -26,104 +23,132 @@ type LeaderboardProps = { mobile?: boolean; }; +enum LeaderboardTab { + Top = 'top', + Bottom = 'bottom', +} + +const LEADERBOARD_TABS = [LeaderboardTab.Top, LeaderboardTab.Bottom]; + const Leaderboard: FC = ({ compact, mobile }: LeaderboardProps) => { - const competitionActive = useRecoilValue(isCompetitionActive); + const [activeTab, setActiveTab] = useState(LeaderboardTab.Top); + const [searchInput, setSearchInput] = useState(''); const [searchTerm, setSearchTerm] = useState(''); - const [activeTier, setActiveTier] = useState(competitionActive ? 'bronze' : null); + const [searchAddress, setSearchAddress] = useState(''); const [selectedTrader, setSelectedTrader] = useState(''); + const searchEns = useENS(searchTerm); const router = useRouter(); - const statsQuery = useGetStats(); - const statsData = useMemo(() => statsQuery.data ?? [], [statsQuery]); + const leaderboardQuery = useLeaderboard(searchAddress); + const leaderboardData = useMemo(() => leaderboardQuery.data ?? DEFAULT_LEADERBOARD_DATA, [ + leaderboardQuery, + ]); const traders = useMemo( () => - statsData.map((stat: FuturesStat) => { + leaderboardData.all?.map((stat: AccountStat) => { return stat.account; }) ?? [], - [statsData] + [leaderboardData] ); + const ensInfoQuery = useENSs(traders); const ensInfo = useMemo(() => ensInfoQuery.data ?? {}, [ensInfoQuery]); - let stats: AccountStat[] = useMemo(() => { - return statsData - .map((stat: FuturesStat) => ({ - account: stat.account, - trader: stat.account, - traderShort: truncateAddress(stat.account), - traderEns: ensInfo[stat.account] ?? null, - totalTrades: stat.totalTrades, - totalVolume: wei(stat.totalVolume, 18, true).toNumber(), - liquidations: stat.liquidations, - pnl: wei(stat.pnlWithFeesPaid, 18, true).toNumber(), - })) - .filter((stat: FuturesStat) => stat.totalVolume > 0) - .sort((a: FuturesStat, b: FuturesStat) => (b?.pnl || 0) - (a?.pnl || 0)) - .map((stat: FuturesStat, i: number) => ({ - rank: i + 1, - ...stat, - })); - }, [statsData, ensInfo]); + const pinRow: AccountStat[] = useMemo(() => { + return leaderboardData.wallet + ? leaderboardData.wallet.map((trader) => ({ + ...trader, + rankText: PIN, + })) + : []; + }, [leaderboardData.wallet]); useMemo(() => { if (router.asPath.startsWith(ROUTES.Leaderboard.Home) && router.query.trader) { const trader = router.query.trader as string; setSelectedTrader(trader); } else { + setSearchInput(''); setSearchTerm(''); + setSearchAddress(''); setSelectedTrader(''); } return null; }, [router.query, router.asPath]); - const onChangeSearch = (text: string) => { - setSearchTerm(text?.toLowerCase()); + const onChangeSearch = async (text: string) => { + setSearchInput(text?.toLowerCase()); + + if (isAddress(text)) { + setSearchTerm(getAddress(text)); + } else if (text.endsWith('.eth')) { + setSearchTerm(text); + } else { + setSearchTerm(''); + } }; const onClickTrader = (trader: string) => { + setSearchInput(''); setSearchTerm(''); + setSearchAddress(''); setSelectedTrader(trader); router.push(ROUTES.Leaderboard.Trader(trader)); }; const resetSelection = () => { + setSearchInput(''); setSearchTerm(''); + setSearchAddress(''); setSelectedTrader(''); router.push(ROUTES.Leaderboard.Home); }; + useEffect(() => { + setSearchAddress( + searchEns.ensAddress ? searchEns.ensAddress : isAddress(searchTerm) ? searchTerm : '' + ); + }, [searchTerm, searchEns]); + + const mapEnsName = useCallback( + (stat: AccountStat) => ({ + ...stat, + traderEns: ensInfo[stat.account] ?? null, + }), + [ensInfo] + ); + + const stats = useMemo(() => { + return { + top: leaderboardData.top.map(mapEnsName), + bottom: leaderboardData.bottom.map(mapEnsName), + wallet: leaderboardData.wallet.map(mapEnsName), + search: leaderboardData.search.map(mapEnsName), + all: leaderboardData.all.map(mapEnsName), + }; + }, [leaderboardData, mapEnsName]); + return ( <> - {competitionActive && ( - - {COMPETITION_TIERS.map((tier) => ( - { - setActiveTier(tier); - setSelectedTrader(''); - }} - /> - ))} + + {LEADERBOARD_TABS.map((tab) => ( { - setActiveTier(null); + setActiveTab(tab); setSelectedTrader(''); }} /> - - )} + ))} + - + @@ -135,21 +160,22 @@ const Leaderboard: FC = ({ compact, mobile }: LeaderboardProps compact={compact} searchTerm={searchTerm} /> - ) : activeTier ? ( - ) : ( )} @@ -173,7 +199,7 @@ const StyledTabButton = styled(TabButton)` const TabButtonContainer = styled.div<{ mobile?: boolean }>` display: grid; - grid-template-columns: repeat(4, 1fr); + grid-template-columns: repeat(2, 1fr); margin-bottom: ${({ mobile }) => (mobile ? '16px' : '0px')}; `; diff --git a/sections/leaderboard/TraderHistory/TraderHistory.tsx b/sections/leaderboard/TraderHistory/TraderHistory.tsx index d9f0697980..61c3ad37ef 100644 --- a/sections/leaderboard/TraderHistory/TraderHistory.tsx +++ b/sections/leaderboard/TraderHistory/TraderHistory.tsx @@ -7,10 +7,11 @@ import styled from 'styled-components'; import Currency from 'components/Currency'; import CurrencyIcon from 'components/Currency/CurrencyIcon'; import { DesktopOnlyView, MobileOrTabletView } from 'components/Media'; +import FuturesIcon from 'components/Nav/FuturesIcon'; import Table from 'components/Table'; import ROUTES from 'constants/routes'; -import { PositionHistory } from 'queries/futures/types'; -import useGetFuturesAccountPositionHistory from 'queries/futures/useGetFuturesAccountPositionHistory'; +import { FuturesAccountTypes, PositionHistory } from 'queries/futures/types'; +import useGetFuturesPositionHistoryForAccount from 'queries/futures/useGetFuturesPositionHistoryForAccount'; import TimeDisplay from 'sections/futures/Trades/TimeDisplay'; import { FlexDiv } from 'styles/common'; import { getMarketName } from 'utils/futures'; @@ -31,8 +32,16 @@ const TraderHistory: FC = ({ searchTerm, }: TraderHistoryProps) => { const { t } = useTranslation(); - const positionsQuery = useGetFuturesAccountPositionHistory(trader); - const positions = useMemo(() => positionsQuery.data ?? [], [positionsQuery]); + const positionsQuery = useGetFuturesPositionHistoryForAccount(trader); + const positions = useMemo(() => { + const positionData = positionsQuery.data; + return positionData + ? [ + ...positionData[FuturesAccountTypes.ISOLATED_MARGIN], + ...positionData[FuturesAccountTypes.CROSS_MARGIN], + ] + : []; + }, [positionsQuery]); const traderENSName = useMemo(() => ensInfo[trader] ?? null, [trader, ensInfo]); let data = useMemo(() => { @@ -40,23 +49,17 @@ const TraderHistory: FC = ({ .sort((a: PositionHistory, b: PositionHistory) => b.timestamp - a.timestamp) .map((stat: PositionHistory, i: number) => { return { + ...stat, rank: i + 1, currencyIconKey: stat.asset ? (stat.asset[0] !== 's' ? 's' : '') + stat.asset : '', marketShortName: getMarketName(stat.asset), - openTimestamp: stat.openTimestamp, - asset: stat.asset, status: stat.isOpen ? 'Open' : stat.isLiquidated ? 'Liquidated' : 'Closed', - feesPaid: stat.feesPaid, - netFunding: stat.netFunding, pnl: stat.pnlWithFeesPaid, pnlPct: `(${stat.pnlWithFeesPaid .div(stat.initialMargin.add(stat.totalDeposits)) .mul(100) .toNumber() .toFixed(2)}%)`, - totalVolume: stat.totalVolume, - trades: stat.trades, - side: stat.side, }; }) .filter((i: { marketShortName: string; status: string }) => @@ -123,6 +126,7 @@ const TraderHistory: FC = ({ {cellProps.row.original.marketShortName} + ), width: compact ? 40 : 100, @@ -235,9 +239,10 @@ const TraderHistory: FC = ({ {cellProps.row.original.marketShortName} + ), - width: 40, + width: 50, }, { Header: {t('leaderboard.trader-history.table.status')}, @@ -245,7 +250,7 @@ const TraderHistory: FC = ({ Cell: (cellProps: CellProps) => { return {cellProps.row.original.status}; }, - width: 40, + width: 30, }, { Header: ( @@ -378,4 +383,8 @@ const StyledValue = styled.div` text-align: end; `; +const StyledFuturesIcon = styled(FuturesIcon)` + margin-left: 5px; +`; + export default TraderHistory; diff --git a/sections/leaderboard/common.tsx b/sections/leaderboard/common.tsx index 40e93e0c0e..dc41bb6389 100644 --- a/sections/leaderboard/common.tsx +++ b/sections/leaderboard/common.tsx @@ -1,4 +1,3 @@ -import Wei from '@synthetixio/wei'; import styled from 'styled-components'; export type Tier = 'gold' | 'silver' | 'bronze' | null; @@ -16,18 +15,6 @@ export const getMedal = (position: number) => { export const COMPETITION_TIERS: Tier[] = ['bronze', 'silver', 'gold']; -export type AccountStat = { - rank: number; - account: string; - trader: string; - traderShort: string; - traderEns: string | null; - totalTrades: Wei; - totalVolume: Wei; - liquidation: Wei; - pnl: Wei; -}; - export const PIN = ' ๐Ÿ“Œ'; const Medal = styled.span` diff --git a/sections/shared/Layout/AppLayout/Header/BalanceActions.tsx b/sections/shared/Layout/AppLayout/Header/BalanceActions.tsx index 2c5e2e635a..e4639ab003 100644 --- a/sections/shared/Layout/AppLayout/Header/BalanceActions.tsx +++ b/sections/shared/Layout/AppLayout/Header/BalanceActions.tsx @@ -2,16 +2,22 @@ import { useRouter } from 'next/router'; import { FC, useCallback, useEffect, useMemo, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { components } from 'react-select'; -import { useRecoilValue } from 'recoil'; +import { useRecoilValue, useSetRecoilState } from 'recoil'; import styled, { useTheme } from 'styled-components'; import Button from 'components/Button'; import CurrencyIcon from 'components/Currency/CurrencyIcon'; import Select from 'components/Select'; -import { balancesState, positionsState } from 'store/futures'; +import { FuturesAccountTypes, FuturesPosition } from 'queries/futures/types'; +import { + positionsState, + balancesState, + portfolioState, + futuresAccountTypeState, +} from 'store/futures'; import { FlexDivRow, FlexDivRowCentered } from 'styles/common'; import { zeroBN, formatDollars } from 'utils/formatters/number'; -import { FuturesMarketAsset, getMarketName, MarketKeyByAsset } from 'utils/futures'; +import { getMarketName, MarketKeyByAsset } from 'utils/futures'; type ReactSelectOptionProps = { label: string; @@ -26,44 +32,41 @@ const BalanceActions: FC = () => { const theme = useTheme(); const router = useRouter(); - const futuresPositions = useRecoilValue(positionsState); + const positions = useRecoilValue(positionsState); + const setFuturesAccountType = useSetRecoilState(futuresAccountTypeState); + const portfolio = useRecoilValue(portfolioState); const { susdWalletBalance } = useRecoilValue(balancesState); - const accessiblePositions = useMemo( - () => futuresPositions?.filter((position) => position.remainingMargin.gt(zeroBN)) ?? [], - [futuresPositions] - ); - - const totalRemainingMargin = accessiblePositions.reduce( - (prev, position) => prev.add(position.remainingMargin), - zeroBN - ); - const setMarketConfig = useCallback( - (asset: FuturesMarketAsset): ReactSelectOptionProps => { - const remainingMargin = - accessiblePositions.find((position) => position.asset === asset)?.remainingMargin ?? zeroBN; - + (position: FuturesPosition, accountType: FuturesAccountTypes): ReactSelectOptionProps => { return { - label: getMarketName(asset), - synthIcon: MarketKeyByAsset[asset], - marketRemainingMargin: formatDollars(remainingMargin), - onClick: () => router.push(`/market/?asset=${asset}`), + label: getMarketName(position.asset), + synthIcon: MarketKeyByAsset[position.asset], + marketRemainingMargin: formatDollars(position.remainingMargin), + onClick: () => { + setFuturesAccountType(accountType); + return router.push(`/market/?asset=${position.asset}&accountType=${accountType}`); + }, }; }, - [accessiblePositions, router] + [router, setFuturesAccountType] ); - const OPTIONS = useMemo( - () => [ + const OPTIONS = useMemo(() => { + const isolatedPositions = positions.isolated_margin + .filter((position) => position.remainingMargin.gt(zeroBN)) + .map((position) => setMarketConfig(position, FuturesAccountTypes.ISOLATED_MARGIN)); + const crossPositions = positions.cross_margin + .filter((position) => position.remainingMargin.gt(zeroBN)) + .map((position) => setMarketConfig(position, FuturesAccountTypes.CROSS_MARGIN)); + return [ { label: 'header.balance.total-margin-label', - totalAvailableMargin: formatDollars(totalRemainingMargin), - options: accessiblePositions.map((market) => setMarketConfig(market.asset)), + totalAvailableMargin: formatDollars(portfolio.total), + options: [...isolatedPositions, ...crossPositions], }, - ], - [accessiblePositions, setMarketConfig, totalRemainingMargin] - ); + ]; + }, [positions, setMarketConfig, portfolio]); const OptionsGroupLabel: FC<{ label: string; totalAvailableMargin?: string }> = ({ label, @@ -124,7 +127,7 @@ const BalanceActions: FC = () => { return ( - {susdWalletBalance.eq(zeroBN) && futuresPositions?.length === 0 ? ( + {susdWalletBalance.eq(zeroBN) && OPTIONS.length === 0 ? ( router.push(`/exchange/?quote=sUSD`)} @@ -211,6 +214,7 @@ const StyledLabel = styled.div<{ noPadding: boolean }>` const LabelContainer = styled(FlexDivRowCentered)` color: ${(props) => props.theme.colors.selectedTheme.button.text.primary}; font-size: 13px; + line-height: 13px; padding: 10px; > div { align-items: center; diff --git a/sections/shared/Layout/AppLayout/Header/MobileUserMenu/MobileSettingsModal.tsx b/sections/shared/Layout/AppLayout/Header/MobileUserMenu/MobileSettingsModal.tsx index 0aa21df743..570ec6b5cd 100644 --- a/sections/shared/Layout/AppLayout/Header/MobileUserMenu/MobileSettingsModal.tsx +++ b/sections/shared/Layout/AppLayout/Header/MobileUserMenu/MobileSettingsModal.tsx @@ -21,7 +21,7 @@ import { languageState } from 'store/app'; import { currentThemeState } from 'store/ui'; import colors from 'styles/theme/colors'; -import { lanugageIcons } from './common'; +import { languageIcon } from './common'; import MobileSubMenu from './MobileSubMenu'; type MobileSettingsModalProps = { @@ -126,7 +126,7 @@ export const MobileSettingsModal: FC = ({ onDismiss }) onToggle={handleToggle('language')} options={languageOptions.map((option) => ({ label: option.label, - icon:
{lanugageIcons[option.value as Language]}
, + icon:
{languageIcon[option.value as Language]}
, selected: languages[language] === option.value, onClick: () => setLanguage(option.value as Language), }))} diff --git a/sections/shared/Layout/AppLayout/Header/MobileUserMenu/MobileSubMenu.tsx b/sections/shared/Layout/AppLayout/Header/MobileUserMenu/MobileSubMenu.tsx index bffb61aba3..a4e43e6d71 100644 --- a/sections/shared/Layout/AppLayout/Header/MobileUserMenu/MobileSubMenu.tsx +++ b/sections/shared/Layout/AppLayout/Header/MobileUserMenu/MobileSubMenu.tsx @@ -6,8 +6,10 @@ import styled, { css } from 'styled-components'; import ChevronDown from 'assets/svg/app/chevron-down.svg'; import ChevronUp from 'assets/svg/app/chevron-up.svg'; +import Badge from 'components/Badge'; import ROUTES from 'constants/routes'; import { currentThemeState } from 'store/ui'; +import { FlexDivRow } from 'styles/common'; import { ThemeName } from 'styles/theme'; import { SubMenuLink } from '../constants'; @@ -53,12 +55,15 @@ const MobileSubMenu: React.FC = ({ {active && ( {links - ? links.map(({ i18nLabel, link: subLink }) => ( + ? links.map(({ i18nLabel, link: subLink, badge }) => ( ยท - {t(i18nLabel)} + + {t(i18nLabel)}{' '} + {badge && {t(badge.i18nLabel)}} + @@ -99,6 +104,17 @@ const SubMenuButton = styled(MenuButton)` `} `; +const SubMenuRow = styled(FlexDivRow)` + justify-content: flex-start; + align-items: center; +`; + +const StyledBadge = styled(Badge)` + font-size: 12px; + padding: 2.5px 5px 2px 5px; + margin-left: 8px; +`; + const SubMenuContainer = styled.div` box-sizing: border-box; `; @@ -137,13 +153,13 @@ const SubMenuItem = styled.div<{ currentTheme: ThemeName; active?: boolean; sele ${(props) => props.active && css` - color: ${(props) => props.theme.colors.common.primaryWhite}; + color: ${(props) => props.theme.colors.selectedTheme.button.active}; `} ${(props) => props.selected && css` - color: ${(props) => props.theme.colors.common.secondaryGold}; + color: ${(props) => props.theme.colors.selectedTheme.gold}; `} `; diff --git a/sections/shared/Layout/AppLayout/Header/MobileUserMenu/MobileUserMenu.tsx b/sections/shared/Layout/AppLayout/Header/MobileUserMenu/MobileUserMenu.tsx index fba9edef89..f16c9b0c53 100644 --- a/sections/shared/Layout/AppLayout/Header/MobileUserMenu/MobileUserMenu.tsx +++ b/sections/shared/Layout/AppLayout/Header/MobileUserMenu/MobileUserMenu.tsx @@ -49,6 +49,9 @@ const MobileUserMenu: FC = () => { {!!isOpen ? : } + {!(window.location.pathname === ROUTES.Home.Root) && isOpen === 'menu' && ( + {t('modals.menu.title')} + )} {!(window.location.pathname === ROUTES.Home.Root) && isOpen === 'settings' && ( {t('modals.settings.title')} diff --git a/sections/shared/Layout/AppLayout/Header/MobileUserMenu/common.ts b/sections/shared/Layout/AppLayout/Header/MobileUserMenu/common.ts index 79b7e14f6a..8173177554 100644 --- a/sections/shared/Layout/AppLayout/Header/MobileUserMenu/common.ts +++ b/sections/shared/Layout/AppLayout/Header/MobileUserMenu/common.ts @@ -47,6 +47,6 @@ export const SUB_MENUS = { ], }; -export const lanugageIcons = { +export const languageIcon = { en: '๐ŸŒ', }; diff --git a/sections/shared/Layout/AppLayout/Header/Nav/Nav.tsx b/sections/shared/Layout/AppLayout/Header/Nav/Nav.tsx index 256715d3a0..d74f5661dc 100644 --- a/sections/shared/Layout/AppLayout/Header/Nav/Nav.tsx +++ b/sections/shared/Layout/AppLayout/Header/Nav/Nav.tsx @@ -5,21 +5,22 @@ import { useTranslation } from 'react-i18next'; import { useRecoilValue } from 'recoil'; import styled from 'styled-components'; +import Badge from 'components/Badge'; import LabelContainer from 'components/Nav/DropDownLabel'; import Select from 'components/Select'; import { DropdownIndicator, IndicatorSeparator } from 'components/Select/Select'; import { currentMarketState } from 'store/futures'; import { linkCSS } from 'styles/common'; -import { DESKTOP_NAV_LINKS } from '../constants'; +import { DESKTOP_NAV_LINKS, Badge as BadgeType } from '../constants'; type ReactSelectOptionProps = { - label: string; + i18nLabel: string; postfixIcon?: string; isActive: boolean; link: string; + badge: BadgeType; Icon: FunctionComponent; - onClick?: () => {}; }; const Nav: FC = () => { @@ -31,17 +32,26 @@ const Nav: FC = () => { return link.slice(0, 7) === '/market' ? `/market/?asset=${currentMarket}` : link; } - const formatOptionLabel = ({ label, Icon, link, isActive, onClick }: ReactSelectOptionProps) => { - if (label === 'header.nav.markets') + const formatOptionLabel = ({ + i18nLabel, + Icon, + badge, + link, + isActive, + }: ReactSelectOptionProps) => { + if (i18nLabel === 'header.nav.markets') return ( - - {t(label)} + + {t(i18nLabel)} ); return ( - + - {label !== 'Futures' ? t(label) : {t(label)}} + + {t(i18nLabel)} + {badge && {t(badge.i18nLabel)}} + {Icon && } @@ -53,8 +63,9 @@ const Nav: FC = () => { {DESKTOP_NAV_LINKS.map(({ i18nLabel, link, links }) => { const routeBase = asPath.split('/')[1]; - const linkBase = link.split('/')[1]; + const linkBase = link.split('/')[1]?.split('?')[0]; const isActive = routeBase === linkBase; + const url = getLink(link); if (!links) { return ( @@ -66,18 +77,14 @@ const Nav: FC = () => { ); } - const options = links.map((l) => { - return { label: l.i18nLabel, Icon: l.Icon, link: l.link, onClick: () => {} }; - }); - return ( props.theme.fonts.bold}; font-size: 15px; + line-height: 15px; `; const MenuInside = styled.div<{ isActive: boolean; isDropDown?: boolean }>` diff --git a/sections/shared/Layout/AppLayout/Header/constants.ts b/sections/shared/Layout/AppLayout/Header/constants.tsx similarity index 91% rename from sections/shared/Layout/AppLayout/Header/constants.ts rename to sections/shared/Layout/AppLayout/Header/constants.tsx index 9e938b6a38..cee981ccf5 100644 --- a/sections/shared/Layout/AppLayout/Header/constants.ts +++ b/sections/shared/Layout/AppLayout/Header/constants.tsx @@ -5,9 +5,15 @@ import { CROSS_MARGIN_ENABLED, DEFAULT_FUTURES_MARGIN_TYPE } from 'constants/def import { EXTERNAL_LINKS } from 'constants/links'; import ROUTES from 'constants/routes'; +export type Badge = { + i18nLabel: string; + color: 'yellow' | 'red'; +}; + export type SubMenuLink = { i18nLabel: string; link: string; + badge?: Badge; Icon?: FunctionComponent; }; @@ -68,6 +74,10 @@ export const getMenuLinks = (isMobile: boolean): MenuLinks => [ { link: ROUTES.Markets.Home('cross_margin'), i18nLabel: 'header.nav.cross-margin', + badge: { + i18nLabel: 'header.nav.beta-badge', + color: 'yellow', + }, Icon: CrossMarginIcon, }, ] diff --git a/store/futures/index.ts b/store/futures/index.ts index 3ee0beea7a..70ee323812 100644 --- a/store/futures/index.ts +++ b/store/futures/index.ts @@ -15,6 +15,10 @@ import { FuturesOrderType, FuturesVolumes, CrossMarginAccounts, + FuturesPositionsState, + PositionHistoryState, + FuturesAccountTypes, + FuturesOrder, } from 'queries/futures/types'; import { FundingRateResponse } from 'queries/futures/useGetAverageFundingRateForMarkets'; import { Price, Rates } from 'queries/rates/types'; @@ -68,6 +72,32 @@ export const balancesState = atom({ }, }); +export const portfolioState = selector({ + key: getFuturesKey('portfolio'), + get: ({ get }) => { + const positions = get(positionsState); + const { freeMargin } = get(crossMarginAccountOverviewState); + + const isolatedValue = + positions.isolated_margin.reduce( + (sum, { remainingMargin }) => sum.add(remainingMargin), + wei(0) + ) ?? wei(0); + const crossValue = + positions.cross_margin.reduce( + (sum, { remainingMargin }) => sum.add(remainingMargin), + wei(0) + ) ?? wei(0); + const totalValue = isolatedValue.add(crossValue).add(freeMargin); + + return { + total: totalValue, + crossMarginFutures: crossValue.add(freeMargin), + isolatedMarginFutures: isolatedValue, + }; + }, +}); + export const activeTabState = atom({ key: getFuturesKey('activeTab'), default: 0, @@ -78,9 +108,20 @@ export const positionState = atom({ default: null, }); -export const positionsState = atom({ +export const positionHistoryState = atom({ + key: getFuturesKey('positionHistory'), + default: { + [FuturesAccountTypes.CROSS_MARGIN]: [], + [FuturesAccountTypes.ISOLATED_MARGIN]: [], + }, +}); + +export const positionsState = atom({ key: getFuturesKey('positions'), - default: null, + default: { + cross_margin: [], + isolated_margin: [], + }, }); export const futuresMarketsState = atom({ @@ -146,6 +187,7 @@ export const crossMarginAccountOverviewState = atom({ default: { freeMargin: zeroBN, keeperEthBal: zeroBN, + allowance: zeroBN, }, }); @@ -190,7 +232,7 @@ export const isAdvancedOrderState = selector({ key: getFuturesKey('isAdvancedOrder'), get: ({ get }) => { const orderType = get(orderTypeState); - return orderType === 'limit' || orderType === 'stop'; + return orderType === 'limit' || orderType === 'stop market'; }, }); @@ -226,7 +268,7 @@ export const leverageValueCommittedState = atom({ default: true, }); -export const openOrdersState = atom({ +export const openOrdersState = atom({ key: getFuturesKey('openOrders'), default: [], }); @@ -258,16 +300,18 @@ export const maxLeverageState = selector({ const orderType = get(orderTypeState); const market = get(marketInfoState); const leverageSide = get(leverageSideState); + const accountType = get(futuresAccountTypeState); const positionLeverage = position?.position?.leverage ?? wei(0); const positionSide = position?.position?.side; const marketMaxLeverage = market?.maxLeverage ?? DEFAULT_MAX_LEVERAGE; const adjustedMaxLeverage = - orderType === 'next-price' + orderType === 'next price' ? marketMaxLeverage.mul(DEFAULT_NP_LEVERAGE_ADJUSTMENT) : marketMaxLeverage; if (!positionLeverage || positionLeverage.eq(wei(0))) return adjustedMaxLeverage; + if (accountType === 'cross_margin') return adjustedMaxLeverage; if (positionSide === leverageSide) { return adjustedMaxLeverage?.sub(positionLeverage); } else { @@ -314,6 +358,15 @@ export const selectedFuturesAddressState = selector({ }, }); +export const aboveMaxLeverageState = selector({ + key: getFuturesKey('aboveMaxLeverage'), + get: ({ get }) => { + const position = get(positionState); + const maxLeverage = get(maxLeverageState); + return position?.position?.leverage && maxLeverage.lt(position.position.leverage); + }, +}); + export const crossMarginAccountsState = atom({ key: getFuturesKey('crossMarginAccounts'), default: {}, @@ -387,9 +440,9 @@ export const placeOrderTranslationKeyState = selector({ remainingMargin = positionMargin.add(freeMargin); } - if (orderType === 'next-price') return 'futures.market.trade.button.place-next-price-order'; + if (orderType === 'next price') return 'futures.market.trade.button.place-next-price-order'; if (orderType === 'limit') return 'futures.market.trade.button.place-limit-order'; - if (orderType === 'stop') return 'futures.market.trade.button.place-stop-order'; + if (orderType === 'stop market') return 'futures.market.trade.button.place-stop-order'; if (!!position?.position) return 'futures.market.trade.button.modify-position'; return remainingMargin.lt('50') ? 'futures.market.trade.button.deposit-margin-minimum' diff --git a/store/ui/index.ts b/store/ui/index.ts index 0da1648c27..a9837dfb21 100644 --- a/store/ui/index.ts +++ b/store/ui/index.ts @@ -1,7 +1,7 @@ import { atom } from 'recoil'; import { DEFAULT_SLIPPAGE } from 'constants/defaults'; -import { MarketsTab } from 'sections/dashboard/Markets/Markets'; +import { PositionsTab } from 'sections/dashboard/Overview/Overview'; import { localStorageEffect } from 'store/effects'; import { ThemeName } from 'styles/theme'; @@ -28,7 +28,7 @@ export const isCompetitionActive = atom({ default: process.env.NEXT_PUBLIC_COMPETITION_ACTIVE === 'true', }); -export const activePositionsTabState = atom({ +export const activePositionsTabState = atom({ key: getUIKey('activePositionsTabState'), - default: MarketsTab.FUTURES, + default: PositionsTab.CROSS_MARGIN, }); diff --git a/styles/common.tsx b/styles/common.tsx index 5de0d70e38..6aa6d97d98 100644 --- a/styles/common.tsx +++ b/styles/common.tsx @@ -300,6 +300,9 @@ export const SwapCurrenciesButton = styled.button` transform: rotate(180deg); transition-duration: 0.12s; transition-timing-function: ease-in-out; + path { + fill: ${(props) => props.theme.colors.selectedTheme.white}; + } } .arrow { diff --git a/styles/theme/colors/common.ts b/styles/theme/colors/common.ts index dbc7f801d9..41604ba779 100644 --- a/styles/theme/colors/common.ts +++ b/styles/theme/colors/common.ts @@ -5,10 +5,13 @@ const common = { primaryGold: '#C9975B', primaryRed: '#EF6868', primaryGreen: '#7FD482', - secondaryGray: '#787878', + secondaryGray: '#515151', tertiaryGray: '#999999', secondaryGold: '#E4B378', primaryYellow: '#FFB800', + black: '#171002', + dark: { white: '#ECE8E3', yellow: '#FFB800' }, + light: { white: '#F2F2F2', yellow: '#6A3300' }, }; export default common; diff --git a/styles/theme/colors/dark.ts b/styles/theme/colors/dark.ts index 649df9ded2..ec724ccd56 100644 --- a/styles/theme/colors/dark.ts +++ b/styles/theme/colors/dark.ts @@ -6,6 +6,7 @@ const darkTheme = { outlineBorder: '1px solid rgba(255, 255, 255, 0.12)', red: '#EF6868', green: '#7FD482', + orange: '#DA8332', black: '#171002', white: '#ECE8E3', gray: '#787878', @@ -13,7 +14,10 @@ const darkTheme = { yellow: common.primaryYellow, table: { fill: 'rgba(255, 255, 255, 0.01)', hover: 'rgba(255, 255, 255, 0.05)' }, gold: '#E4B378', - badge: { background: '#EF6868', text: 'black' }, + badge: { + red: { background: '#EF6868', text: 'black' }, + yellow: { background: common.primaryYellow, text: 'black' }, + }, tab: { background: { active: '#252525', inactive: 'transparent' } }, button: { border: 'rgb(255 255 255 / 10%)', @@ -55,6 +59,7 @@ const darkTheme = { }, disabled: { border: '1px solid #353333', text: '#353333' }, }, + pill: { background: common.dark.yellow, text: common.dark.yellow, hover: common.black }, }, input: { background: '#151515', @@ -63,6 +68,7 @@ const darkTheme = { }, placeholder: '#787878', shadow: '0px 0.5px 0px rgba(255, 255, 255, 0.08)', + hover: common.dark.white, }, segmented: { background: '#0b0b0b', diff --git a/styles/theme/colors/light.ts b/styles/theme/colors/light.ts index 1bfebb7aca..5682a5836a 100644 --- a/styles/theme/colors/light.ts +++ b/styles/theme/colors/light.ts @@ -6,14 +6,18 @@ const lightTheme = { outlineBorder: '1px solid rgba(0,0,0,0.17)', red: '#A80300', green: '#1D5D1F', + orange: '#DA8332', black: '#171002', white: '#F2F2F2', gray: '#515151', gray2: '#D2D2D2', // TODO: Update once added to designs - yellow: common.primaryYellow, + yellow: '#6A3300', table: { fill: '#EEE', hover: '#E6E6E6' }, gold: '#724713', - badge: { background: '#A80300', text: 'white' }, + badge: { + red: { background: '#A80300', text: 'white' }, + yellow: { background: '#6A3300', text: 'white' }, + }, tab: { background: { active: 'transparent', inactive: '#e8e8e8' } }, button: { border: 'rgb(0 0 0 / 10%)', @@ -26,7 +30,8 @@ const lightTheme = { '0px 2px 2px rgb(0 0 0 / 5%), inset 0px 1px 0px rgb(255 255 255 / 8%), inset 0px 0px 20px rgb(255 255 255 / 3%)', text: { primary: '#171002', - yellow: common.primaryYellow, + yellow: '#6A3300', + white: '#FFFFFF', }, primary: { background: 'linear-gradient(180deg, #BE9461 0%, #9C6C3C 100%)', @@ -56,6 +61,7 @@ const lightTheme = { }, disabled: { border: '1px solid #353333', text: '#B3B3B3' }, }, + pill: { background: common.light.yellow, text: common.light.yellow, hover: common.light.white }, }, input: { background: '#dbdbdb', @@ -64,6 +70,7 @@ const lightTheme = { }, placeholder: '#686868', shadow: '0px 0.5px 0px rgba(255, 255, 255, 0.08)', + hover: common.black, }, segmented: { background: '#eaeaea', diff --git a/test-utils/ContextProvider.tsx b/test-utils/ContextProvider.tsx deleted file mode 100644 index 71396e0f59..0000000000 --- a/test-utils/ContextProvider.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import { FC } from 'react'; -import { RecoilRoot } from 'recoil'; -import { ThemeProvider } from 'styled-components'; - -import { themes } from 'styles/theme'; - -const ContextProvider: FC = ({ children }) => { - return ( - - {children} - - ); -}; - -export default ContextProvider; diff --git a/tests/e2e/.eslintrc.js b/testing/e2e/.eslintrc.js similarity index 100% rename from tests/e2e/.eslintrc.js rename to testing/e2e/.eslintrc.js diff --git a/tests/e2e/pages/exchange/exchange-page.js b/testing/e2e/pages/exchange/exchange-page.js similarity index 100% rename from tests/e2e/pages/exchange/exchange-page.js rename to testing/e2e/pages/exchange/exchange-page.js diff --git a/tests/e2e/pages/exchange/header.js b/testing/e2e/pages/exchange/header.js similarity index 100% rename from tests/e2e/pages/exchange/header.js rename to testing/e2e/pages/exchange/header.js diff --git a/tests/e2e/pages/exchange/notifications.js b/testing/e2e/pages/exchange/notifications.js similarity index 100% rename from tests/e2e/pages/exchange/notifications.js rename to testing/e2e/pages/exchange/notifications.js diff --git a/tests/e2e/pages/exchange/onboard.js b/testing/e2e/pages/exchange/onboard.js similarity index 100% rename from tests/e2e/pages/exchange/onboard.js rename to testing/e2e/pages/exchange/onboard.js diff --git a/tests/e2e/pages/markets/futures-page.js b/testing/e2e/pages/markets/futures-page.js similarity index 100% rename from tests/e2e/pages/markets/futures-page.js rename to testing/e2e/pages/markets/futures-page.js diff --git a/tests/e2e/pages/markets/header.js b/testing/e2e/pages/markets/header.js similarity index 100% rename from tests/e2e/pages/markets/header.js rename to testing/e2e/pages/markets/header.js diff --git a/tests/e2e/pages/markets/notifications.js b/testing/e2e/pages/markets/notifications.js similarity index 100% rename from tests/e2e/pages/markets/notifications.js rename to testing/e2e/pages/markets/notifications.js diff --git a/tests/e2e/pages/markets/onboard.js b/testing/e2e/pages/markets/onboard.js similarity index 100% rename from tests/e2e/pages/markets/onboard.js rename to testing/e2e/pages/markets/onboard.js diff --git a/tests/e2e/pages/page.js b/testing/e2e/pages/page.js similarity index 100% rename from tests/e2e/pages/page.js rename to testing/e2e/pages/page.js diff --git a/tests/e2e/specs/futures-spec.js b/testing/e2e/specs/futures-spec.js similarity index 100% rename from tests/e2e/specs/futures-spec.js rename to testing/e2e/specs/futures-spec.js diff --git a/tests/e2e/specs/trade-spec.js b/testing/e2e/specs/trade-spec.js similarity index 100% rename from tests/e2e/specs/trade-spec.js rename to testing/e2e/specs/trade-spec.js diff --git a/tests/e2e/tsconfig.json b/testing/e2e/tsconfig.json similarity index 100% rename from tests/e2e/tsconfig.json rename to testing/e2e/tsconfig.json diff --git a/testing/e2e/videos/futures-spec.js.mp4 b/testing/e2e/videos/futures-spec.js.mp4 new file mode 100644 index 0000000000..f5cb147c39 Binary files /dev/null and b/testing/e2e/videos/futures-spec.js.mp4 differ diff --git a/testing/e2e/videos/trade-spec.js.mp4 b/testing/e2e/videos/trade-spec.js.mp4 new file mode 100644 index 0000000000..96549650ce Binary files /dev/null and b/testing/e2e/videos/trade-spec.js.mp4 differ diff --git a/tests/lighthouse/desktop.conf.js b/testing/lighthouse/desktop.conf.js similarity index 100% rename from tests/lighthouse/desktop.conf.js rename to testing/lighthouse/desktop.conf.js diff --git a/tests/lighthouse/lhci-desktop.conf.js b/testing/lighthouse/lhci-desktop.conf.js similarity index 100% rename from tests/lighthouse/lhci-desktop.conf.js rename to testing/lighthouse/lhci-desktop.conf.js diff --git a/tests/lighthouse/lhci-mobile.conf.js b/testing/lighthouse/lhci-mobile.conf.js similarity index 100% rename from tests/lighthouse/lhci-mobile.conf.js rename to testing/lighthouse/lhci-mobile.conf.js diff --git a/tests/lighthouse/mobile.conf.js b/testing/lighthouse/mobile.conf.js similarity index 100% rename from tests/lighthouse/mobile.conf.js rename to testing/lighthouse/mobile.conf.js diff --git a/tests/lint.js b/testing/lint.js similarity index 100% rename from tests/lint.js rename to testing/lint.js diff --git a/testing/unit/__mocks__/MockProviders.tsx b/testing/unit/__mocks__/MockProviders.tsx new file mode 100644 index 0000000000..eec6624699 --- /dev/null +++ b/testing/unit/__mocks__/MockProviders.tsx @@ -0,0 +1,85 @@ +import { NetworkId } from '@synthetixio/contracts-interface'; +import { createQueryContext, SynthetixQueryContextProvider } from '@synthetixio/queries'; +import WithAppContainers from 'containers'; +import mockRouter from 'next-router-mock'; +import { ReactNode } from 'react'; +import { QueryClient, QueryClientProvider } from 'react-query'; +import { RecoilRoot } from 'recoil'; +import { ThemeProvider } from 'styled-components'; +import { WagmiConfig } from 'wagmi'; + +import { initRainbowkit } from 'containers/Connector/config'; +import { RefetchProvider } from 'contexts/RefetchContext'; +import { themes } from 'styles/theme'; + +import { DEFAULT_NETWORK } from '../constants'; +import { mockProvider, MockEthProvider } from './mockEthersProvider'; + +jest.mock('@rainbow-me/rainbowkit', () => ({ + wallet: { + metaMask: () => {}, + rainbow: () => {}, + coinbase: () => {}, + walletConnect: () => {}, + ledger: () => {}, + brave: () => {}, + trust: () => {}, + }, + connectorsForWallets: () => {}, + useConnectModal: () => ({ + openConnectModal: () => {}, + }), +})); + +jest.mock('next/router', () => require('next-router-mock')); +// This is needed for mocking 'next/link': +jest.mock('next/dist/client/router', () => require('next-router-mock')); + +const { wagmiClient } = initRainbowkit(); + +const queryClient = new QueryClient({ + defaultOptions: { + queries: { + retry: false, + }, + }, +}); + +type Props = { + children: ReactNode; + ethProviderOverrides?: MockEthProvider; + route?: string; +}; + +process.env.GIT_HASH_ID = '12345'; + +const MockProviders = ({ children, ethProviderOverrides, route }: Props) => { + const mockedProvider = mockProvider(ethProviderOverrides); + + mockRouter.setCurrentUrl(route || '/'); + + return ( + + + + + + + {children} + + + + + + + ); +}; + +export default MockProviders; diff --git a/testing/unit/__mocks__/mockConnector.ts b/testing/unit/__mocks__/mockConnector.ts new file mode 100644 index 0000000000..19bf55c8e4 --- /dev/null +++ b/testing/unit/__mocks__/mockConnector.ts @@ -0,0 +1,41 @@ +import Connector from 'containers/Connector/Connector'; +import { DEFAULT_NETWORK, MOCK_SIGNER, TEST_ADDR } from 'testing/unit/constants'; + +import { mockProvider } from './mockEthersProvider'; + +const DEFAULT_CONNECTOR = { + activeChain: { + id: DEFAULT_NETWORK.id, + name: DEFAULT_NETWORK.name, + network: DEFAULT_NETWORK.name, + rpcUrls: { + infura: '', + default: '', + }, + }, + unsupportedNetwork: false, + isWalletConnected: true, + walletAddress: TEST_ADDR, + provider: mockProvider(), + l2Provider: null, + signer: MOCK_SIGNER, + network: DEFAULT_NETWORK, + synthsMap: {}, + tokensMap: {}, + staticMainnetProvider: null, + defaultSynthetixjs: null, + l2Synthetixjs: null, + l2SynthsMap: {}, +}; + +const mockConnector = (overrides?: Record) => { + // @ts-ignore + jest.spyOn(Connector, 'useContainer').mockImplementation(() => { + return { + ...DEFAULT_CONNECTOR, + ...(overrides ?? {}), + }; + }); +}; + +export default mockConnector; diff --git a/testing/unit/__mocks__/mockEthersProvider.ts b/testing/unit/__mocks__/mockEthersProvider.ts new file mode 100644 index 0000000000..6dd393ead0 --- /dev/null +++ b/testing/unit/__mocks__/mockEthersProvider.ts @@ -0,0 +1,30 @@ +import { BigNumber } from '@ethersproject/bignumber'; + +import { DEFAULT_NETWORK } from 'testing/unit/constants'; +import { weiFromEth } from 'utils/formatters/number'; + +export type MockEthProvider = Record; + +const DEFAULT_PROVIDER = { + network: DEFAULT_NETWORK, + blockNumber: 5000, + getNetwork: () => DEFAULT_NETWORK, + waitForTransaction: () => {}, + getBlockNumber: () => 5000, + getGasPrice: () => BigNumber.from('2000000000'), + getBalance: () => BigNumber.from(weiFromEth('10')), + estimateGas: () => BigNumber.from('100000'), + sendTransaction: () => {}, + getLogs: () => [], + getEtherPrice: () => 1000, + getTransactionCount: () => 1, + getAvatar: () => '', + lookupAddress: () => 'name', +}; + +export const mockProvider = (overrides: MockEthProvider = {}) => { + return { + ...DEFAULT_PROVIDER, + ...overrides, + }; +}; diff --git a/testing/unit/__mocks__/mockQueries.ts b/testing/unit/__mocks__/mockQueries.ts new file mode 100644 index 0000000000..5bb9bdde80 --- /dev/null +++ b/testing/unit/__mocks__/mockQueries.ts @@ -0,0 +1,9 @@ +export const mockGrapqhlRequest = (returnData: any) => { + jest.spyOn(require('graphql-request'), 'default').mockImplementation(() => returnData); +}; + +export const mockReactQuery = (returnValue?: any) => { + jest.mock('react-query', () => ({ + useQuery: jest.fn().mockReturnValue(returnValue ?? { data: {}, isLoading: false, error: {} }), + })); +}; diff --git a/testing/unit/constants.ts b/testing/unit/constants.ts new file mode 100644 index 0000000000..929ce494f5 --- /dev/null +++ b/testing/unit/constants.ts @@ -0,0 +1,138 @@ +import { Wallet } from 'ethers'; + +export const TEST_ADDR = '0x1c099210997E5C5689189A256C6145ca743B2610'; +export const TEST_PK = 'b826c22c04853f6ba05575275494a3a5c9eff298c36cb58d11370f83c87574e4'; + +export const MOCK_SIGNER = new Wallet(TEST_PK); + +export const DEFAULT_NETWORK = { + id: 420, + name: 'optimism-goerli', +}; + +export const CHAINS = [ + { + id: 10, + name: 'Optimism', + network: 'optimism', + nativeCurrency: { + name: 'Ether', + symbol: 'ETH', + decimals: 18, + }, + rpcUrls: { + alchemy: 'https://opt-mainnet.g.alchemy.com/v2', + default: 'https://optimism-mainnet.infura.io/v3', + infura: 'https://optimism-mainnet.infura.io/v3', + public: 'https://mainnet.optimism.io', + }, + blockExplorers: { + etherscan: { + name: 'Etherscan', + url: 'https://optimistic.etherscan.io', + }, + default: { + name: 'Etherscan', + url: 'https://optimistic.etherscan.io', + }, + }, + multicall: { + address: '0xca11bde05977b3631167028862be2a173976ca11', + blockCreated: 4286263, + }, + }, + { + id: 1, + name: 'Ethereum', + network: 'homestead', + nativeCurrency: { + name: 'Ether', + symbol: 'ETH', + decimals: 18, + }, + rpcUrls: { + alchemy: 'https://eth-mainnet.alchemyapi.io/v2', + default: 'https://mainnet.infura.io/v3', + infura: 'https://mainnet.infura.io/v3', + public: 'https://eth-mainnet.alchemyapi.io/v2/_gg7wSSi0KMBsdKnGVfHDueq6xMB9EkC', + }, + blockExplorers: { + etherscan: { + name: 'Etherscan', + url: 'https://etherscan.io', + }, + default: { + name: 'Etherscan', + url: 'https://etherscan.io', + }, + }, + ens: { + address: '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e', + }, + multicall: { + address: '0xca11bde05977b3631167028862be2a173976ca11', + blockCreated: 14353601, + }, + }, + { + id: 420, + name: 'Optimism Goerli', + network: 'optimism-goerli', + nativeCurrency: { + name: 'Goerli Ether', + symbol: 'ETH', + decimals: 18, + }, + rpcUrls: { + alchemy: 'https://opt-goerli.g.alchemy.com/v2', + default: 'https://optimism-goerli.infura.io/v3', + infura: 'https://optimism-goerli.infura.io/v3', + public: 'https://goerli.optimism.io', + }, + blockExplorers: { + default: { + name: 'Blockscout', + url: 'https://blockscout.com/optimism/goerli', + }, + }, + multicall: { + address: '0xca11bde05977b3631167028862be2a173976ca11', + blockCreated: 49461, + }, + testnet: true, + }, + { + id: 5, + name: 'Goerli', + network: 'goerli', + nativeCurrency: { + name: 'Goerli Ether', + symbol: 'ETH', + decimals: 18, + }, + rpcUrls: { + alchemy: 'https://eth-goerli.alchemyapi.io/v2', + default: 'https://goerli.infura.io/v3', + infura: 'https://goerli.infura.io/v3', + public: 'https://eth-goerli.alchemyapi.io/v2/_gg7wSSi0KMBsdKnGVfHDueq6xMB9EkC', + }, + blockExplorers: { + etherscan: { + name: 'Etherscan', + url: 'https://goerli.etherscan.io', + }, + default: { + name: 'Etherscan', + url: 'https://goerli.etherscan.io', + }, + }, + ens: { + address: '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e', + }, + multicall: { + address: '0xca11bde05977b3631167028862be2a173976ca11', + blockCreated: 6507670, + }, + testnet: true, + }, +]; diff --git a/test-setup/global.js b/testing/unit/setup/global.js similarity index 100% rename from test-setup/global.js rename to testing/unit/setup/global.js diff --git a/test-setup/setup.js b/testing/unit/setup/setup.js similarity index 100% rename from test-setup/setup.js rename to testing/unit/setup/setup.js diff --git a/translations/en.json b/translations/en.json index 9a41b84f67..c22d11e482 100644 --- a/translations/en.json +++ b/translations/en.json @@ -17,7 +17,8 @@ "isolated-margin": "Isolated Margin", "cross-margin": "Cross Margin", "leaderboard": "leaderboard", - "earn": "earn" + "earn": "earn", + "beta-badge": "Beta" }, "networks-switcher": { "chains": "Switch Networks", @@ -417,7 +418,7 @@ "overview": { "futures-positions-table": { "market": "Market", - "position": "Side", + "side": "Side", "avg-entry": "Avg. Entry Price", "last-entry": "Last Entry Price", "leverage": "Leverage", @@ -458,6 +459,8 @@ "total-trades": "Total Trades" }, "positions-tabs": { + "isolated-margin": "Isolated Margin", + "cross-margin": "Cross Margin", "futures": "Futures Positions", "shorts": "Shorts", "spot": "Spot Balances" @@ -486,6 +489,7 @@ "no-trade-history-link": "Visit the Kwenta exchange to swap synths" }, "futures-history-table": { + "asset": "Asset", "size": "Size", "pnl": "P&L", "date-time": "Date/Time", @@ -493,7 +497,7 @@ "price": "Price", "side": "Side", "market": "Market", - "order-type": "Type", + "type": "Type", "no-result": "You have no futures trading history" } }, @@ -618,6 +622,7 @@ "sell": "sell", "remaining-margin": "Remaining margin", "max": "max", + "max-leverage-error": "Your current position exceeds the max leverage of ({{maxLeverage}}x). You need to reduce your position or adjust leverage.", "leverage": { "title": "leverage", "buy": "buy", @@ -642,9 +647,9 @@ "modify-position": "modify", "deposit-margin-minimum": "Deposit Margin", "oi-caps-reached": "Open Interest Cap Reached", - "place-next-price-order": "Place Next-Price Order", + "place-next-price-order": "Place Next Price Order", "place-limit-order": "Place Limit Order", - "place-stop-order": "Place Stop Order", + "place-stop-order": "Place Stop Market Order", "connect-wallet": "Connect Wallet" }, "margin": { @@ -661,8 +666,10 @@ "deposit": { "title": "Deposit Margin", "button": "Deposit Margin", + "approve-button": "Approve sUSD", "disclaimer": "A $50 margin minimum is required to open a position.", "min-deposit": "$50 minimum margin to open a position", + "min-margin-error": "Position size too small, minimum market margin of $50 required", "exceeds-balance": "Amount exceeds balance" }, "withdraw": { @@ -677,7 +684,7 @@ } }, "next-price": { - "description": "Next-Price orders are subject to volatility and execute at the very next on-chain price.", + "description": "Next Price orders are subject to volatility and execute at the very next on-chain price.", "learn-more": "Learn more" }, "cost-basis": { @@ -687,12 +694,12 @@ "modal": { "confirm-order": "Confirm order", "max-leverage-disclaimer": "Note: A next price update could cause your order to exceed maximum leverage resulting in the order being dropped by the keeper.", - "disabled-min-margin": "Minimum $50 margin required" + "disabled-min-margin": "Minimum market margin of $50 required" } }, "leverage": { "modal": { - "max-pos": "Maximum position at current leverage:", + "max-pos": "Max position at current leverage:", "title": "Adjust Leverage", "input-label": "Leverage", "confirm": "Confirm" @@ -704,22 +711,30 @@ "cross-margin": { "connect-wallet": "Connect your wallet to start trading", "title": "Cross Margin", - "faq-title": "Cross Margin FAQ's", + "faq-title": " Cross Margin FAQ", "create-account": "Create Account", "unsupported": "Cross margin is not supported on this network", "switch-type": "Switch to isolated margin", "account-query-failed": "Failed to fetch account" }, "preview": { + "insufficient-margin": "Insufficient free margin", "error": "Error generating preview" }, "orders": { "manage-keeper-deposit": { - "title": "Manage Keeper Balance", + "title": "Manage Account ETH Balance", "withdraw": "Withdraw", - "deposit": "Deposit" + "deposit": "Deposit", + + "withdraw-warning": "Withdrawing ETH while you still have open orders pending risks leaving insufficient balance for orders to execute." }, - "fee-rejection-label": "Fee Rejection" + "fee-rejection-label": "Fee Rejection", + "fee-rejection-tooltip": "This allows you to set a maximum fee on your order. If the dynamic fee exceeds your selected fee limit at the time of execution, the order will not execute." + }, + "edit-leverage": { + "failed": "Transaction failed", + "insufficient-margin": "Leverage cannot be decreased, please deposit more margin or reduce open position sizes" } }, "history": { @@ -760,9 +775,9 @@ "gas-fee": "Network Gas Fee", "order-type": "Order Type", "market-order": "Market", - "next-price-order": "Next-Price", + "next-price-order": "Next Price", "deposit": "Total Deposit", - "np-discount": "Next-Price Discount" + "np-discount": "Next Price Discount" } }, "open-orders": { @@ -775,6 +790,7 @@ "type": "Type", "size": "Size", "size-price": "Size/Price", + "reserved-margin": "Reserved margin", "price": "Price", "status": "Status", "parameters": "Parameters", @@ -792,7 +808,7 @@ } }, "trades": { - "tab": "History", + "tab": "Trades", "table": { "id": "ID", "trade-size": "trade size", @@ -802,6 +818,7 @@ "fees": "fees", "price": "price", "side": "side", + "side-type": "Side/Type", "no-results": "You have no trade history", "order-type": "order type", "trade-types": { @@ -855,13 +872,13 @@ }, "onboard": { "title": "Cross Margin", - "step1-intro": "To Get started you must first create your cross margin account", + "step1-intro": "Start by creating your cross margin account", "step2-intro": "Now, approve the contract to spend sUSD", - "step3-intro": "Lastly, deposit your sUSD into the contact", + "step3-intro": "Lastly, deposit sUSD to begin trading", "step3-complete": "Your cross margin account has been successfully created!", "faq1": "What is cross margin?", - "faq2": "Is cross margin better than isolated margin", - "faq3": "How will a cross margin account affect my trading", + "faq2": "Is cross margin better than isolated margin?", + "faq3": "How will a cross margin account affect my trading?", "unsupported-network": "Cross margin is not supported on this network" } } @@ -870,7 +887,7 @@ "page-title": "Leaderboard | Kwenta", "leaderboard": { "table": { - "title": "All Traders", + "title": "{{ activeTab }} Traders", "rank": "Rank", "trader": "Trader", "total-trades": "Total Trades", @@ -958,6 +975,9 @@ "title": "approve transaction", "confirm-with-provider": "Confirm your transaction through your wallet." }, + "menu": { + "title": "menu" + }, "settings": { "title": "settings", "options": { diff --git a/tsconfig.json b/tsconfig.json index c2b5404312..602edd6144 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -23,7 +23,7 @@ }, "exclude": [ "node_modules", - "tests/e2e/helper/*.ts" + "testing/e2e/helper/*.ts" ], "include": [ "next-env.d.ts", diff --git a/utils/__tests__/number.test.ts b/utils/__tests__/number.test.ts new file mode 100644 index 0000000000..3b8006d41d --- /dev/null +++ b/utils/__tests__/number.test.ts @@ -0,0 +1,21 @@ +import { BigNumber } from 'ethers'; + +import { gweiToWei, formatDollars, weiFromWei } from 'utils/formatters/number'; + +describe('number utils', () => { + test('ether to gwei', () => { + const gweiVal = gweiToWei('10'); + expect(gweiVal).toEqual('10000000000'); + }); + test('formats dollars', () => { + let formatted = formatDollars('1000000000.764552'); + expect(formatted).toEqual('$1,000,000,000.76'); + + formatted = formatDollars('0.004552'); + expect(formatted).toEqual('$0.00'); + }); + test('weiFromWei', () => { + let weiVal = weiFromWei(BigNumber.from('100000000000000000')); + expect(weiVal.toNumber()).toEqual(0.1); + }); +}); diff --git a/utils/formatters/date.ts b/utils/formatters/date.ts index e7bc6b5dc5..f7c5795d35 100644 --- a/utils/formatters/date.ts +++ b/utils/formatters/date.ts @@ -65,6 +65,8 @@ export const timePresentation = (timestamp: string, t: TFunction) => { export const formatDateWithoutYear = (date: Date) => formatDate(date, 'MMMM dd'); +export const formatShortDateWithoutYear = (date: Date) => formatDate(date, 'M/dd'); + export const calculatedTimeDifference = (dateLeft: Date, dateRight: Date) => differenceInSeconds(dateLeft, dateRight); diff --git a/utils/formatters/number.ts b/utils/formatters/number.ts index 7415199023..e476ebb3eb 100644 --- a/utils/formatters/number.ts +++ b/utils/formatters/number.ts @@ -1,6 +1,7 @@ import Wei, { wei } from '@synthetixio/wei'; import BN from 'bn.js'; import { BigNumber, ethers, utils } from 'ethers'; +import { parseUnits } from 'ethers/lib/utils'; import { CurrencyKey } from 'constants/currency'; import { @@ -203,7 +204,12 @@ export const multiplyDecimal = (x: BigNumber, y: BigNumber) => { }; export const weiFromWei = (weiAmount: WeiSource) => { - return wei(weiAmount, 18, true); + if (weiAmount instanceof Wei) { + const precisionDiff = 18 - weiAmount.p; + return wei(weiAmount, 18, true).div(10 ** precisionDiff); + } else { + return wei(weiAmount, 18, true); + } }; export const suggestedDecimals = (value: WeiSource) => { @@ -233,3 +239,9 @@ export const weiToString = (weiVal: Wei) => { export const isZero = (num: WeiSource) => { return wei(num || 0).eq(0); }; + +export const weiFromEth = (num: WeiSource) => wei(num).toBN().toString(); + +export const gweiToWei = (val: WeiSource) => { + return parseUnits(wei(val).toString(), 9).toString(); +}; diff --git a/utils/futures.ts b/utils/futures.ts index e537048418..ba0e3777a8 100644 --- a/utils/futures.ts +++ b/utils/futures.ts @@ -282,12 +282,12 @@ export const orderPriceInvalidLabel = ( if (!orderPrice || Number(orderPrice) <= 0) return null; const isLong = leverageSide === 'long'; if ( - ((isLong && orderType === 'limit') || (!isLong && orderType === 'stop')) && + ((isLong && orderType === 'limit') || (!isLong && orderType === 'stop market')) && wei(orderPrice).gt(currentPrice) ) return 'max ' + formatNumber(currentPrice); if ( - ((!isLong && orderType === 'limit') || (isLong && orderType === 'stop')) && + ((!isLong && orderType === 'limit') || (isLong && orderType === 'stop market')) && wei(orderPrice).lt(currentPrice) ) return 'min ' + formatNumber(currentPrice);