From 775113bc4c8b4eb22b37aaf8af7f5c1d994f5273 Mon Sep 17 00:00:00 2001 From: Jesse Clark Date: Thu, 2 Jul 2026 14:05:14 +0300 Subject: [PATCH 01/10] Modernize toolchain: pin Node 20, migrate CRA to Vite/Vitest Stage 1: reconcile the react-scripts/node_modules version drift, pin Node 20 LTS (.nvmrc + engines), harden CI (checkout/setup-node v4, --frozen-lockfile), and bump EOL node:10 base images. Stage 2: replace react-scripts (webpack 4, unmaintained) with Vite, and Jest with Vitest, dropping env-cmd and the openssl-legacy-provider workaround entirely. REACT_APP_* env vars renamed to VITE_* throughout. vite-plugin-node-polyfills + commonjsOptions.transformMixedEsModules keep the web3.js/rLogin wallet-connector stack (WalletConnect, Portis, hardware wallet SDKs) working unmodified under Vite's Rollup-based production build. No application logic changed; verified via full test suite, lint, dev server, and all three build variants (testnet/ mainnet/ghpages) with a real wallet-connect flow smoke test. Co-Authored-By: Claude Sonnet 5 --- .babelrc | 3 - .env.development | 6 + .env.local | 6 - .env.production | 12 +- .env.test | 6 + .env.testnet | 12 +- .eslintrc.js | 2 +- .github/workflows/ci.yml | 10 +- .github/workflows/deploy.yml | 24 +- .github/workflows/gh-deploy.yml | 12 +- .github/workflows/qa-deploy.yml | 12 +- .nvmrc | 1 + README.md | 2 +- babel.config.js | 13 - public/index.html => index.html | 2 +- mainnet.Dockerfile | 2 +- package.json | 56 +- src/app/adapters/RNSLibAdapter.js | 2 +- src/app/adapters/configAdapter.js | 4 +- src/app/adapters/explorerAdapter.js | 2 +- src/app/adapters/gasPriceAdapter.js | 2 +- src/app/adapters/nodeAdapter.js | 2 +- src/app/auth/containers/AuthModalContainer.js | 2 +- .../auth/containers/LoginDropdownContainer.js | 4 +- src/app/auth/operations.js | 18 +- src/app/components/FooterComponent.js | 4 +- src/app/components/UserSuccessComponent.js | 2 +- .../CopyButtonComponent.test.js.snap | 12 +- .../TextRotationComponent.test.js.snap | 22 +- .../ToggleComponent.test.js.snap | 10 +- .../UserErrorComponent.test.js.snap | 10 +- .../UserSuccessComponent.test.js.snap | 12 +- src/app/containers/IndicatorLight.js | 2 +- src/app/rLogin/rLogin.js | 4 +- src/app/selectors.js | 2 +- src/app/tabs/SetUpTab.js | 2 +- src/app/tabs/error/ErrorTabContainer.js | 2 +- .../SearchBoxComponent.test.js.snap | 12 +- .../SearchResultsComponent.test.js.snap | 34 +- .../components/AddNewAddressComponent.js | 2 +- .../components/YourAddressesComponent.js | 4 +- .../components/ShareButtonComponent.js | 2 +- .../UpgradeComponent.test.js.snap | 16 +- .../NewRecordComponent.test.js.snap | 30 +- .../AutoLoginComponent.test.js.snap | 30 +- src/configureStore.js | 2 +- src/serviceWorker.js | 6 +- testnet.Dockerfile | 2 +- tests/config/mockImage.js | 1 - tests/setEnvVars.js | 12 +- tests/setEnvVars.test.js | 2 +- tests/setupRnsSuite.js | 2 +- tests/vitestSetup.js | 7 + vite.config.js | 49 + yarn.lock | 7586 +++-------------- 55 files changed, 1545 insertions(+), 6555 deletions(-) delete mode 100644 .babelrc create mode 100644 .env.development delete mode 100644 .env.local create mode 100644 .env.test create mode 100644 .nvmrc delete mode 100644 babel.config.js rename public/index.html => index.html (96%) mode change 100755 => 100644 delete mode 100644 tests/config/mockImage.js create mode 100644 tests/vitestSetup.js create mode 100644 vite.config.js diff --git a/.babelrc b/.babelrc deleted file mode 100644 index 7dd5e9df..00000000 --- a/.babelrc +++ /dev/null @@ -1,3 +0,0 @@ -{ - "presets": ["@babel/preset-react"] -} diff --git a/.env.development b/.env.development new file mode 100644 index 00000000..0064bec5 --- /dev/null +++ b/.env.development @@ -0,0 +1,6 @@ +VITE_ENVIRONMENT=local +VITE_ENVIRONMENT_ID=8545 +VITE_NODE=http://127.0.0.1:8545 +VITE_GAS_PRICE=60000000 +VITE_BLOCK_EXPLORER=https://explorer.rsk.co +VITE_URL=http://localhost:3000/ diff --git a/.env.local b/.env.local deleted file mode 100644 index 1394a25c..00000000 --- a/.env.local +++ /dev/null @@ -1,6 +0,0 @@ -REACT_APP_ENVIRONMENT=local -REACT_APP_ENVIRONMENT_ID=8545 -REACT_APP_NODE=http://127.0.0.1:8545 -REACT_APP_GAS_PRICE=60000000 -REACT_APP_BLOCK_EXPLORER=https://explorer.rsk.co -REACT_APP_URL=http://localhost:3000/ diff --git a/.env.production b/.env.production index 2da32eda..36af067b 100644 --- a/.env.production +++ b/.env.production @@ -1,6 +1,6 @@ -REACT_APP_ENVIRONMENT=production -REACT_APP_ENVIRONMENT_ID=30 -REACT_APP_NODE=https://public-node.rsk.co -REACT_APP_GAS_PRICE=60000000 -REACT_APP_BLOCK_EXPLORER=https://explorer.rsk.co -REACT_APP_URL=https://manager.rns.rifos.org/ +VITE_ENVIRONMENT=production +VITE_ENVIRONMENT_ID=30 +VITE_NODE=https://public-node.rsk.co +VITE_GAS_PRICE=60000000 +VITE_BLOCK_EXPLORER=https://explorer.rsk.co +VITE_URL=https://manager.rns.rifos.org/ diff --git a/.env.test b/.env.test new file mode 100644 index 00000000..0609bead --- /dev/null +++ b/.env.test @@ -0,0 +1,6 @@ +VITE_ENVIRONMENT=testing +VITE_ENVIRONMENT_ID=8545 +VITE_NODE=http://127.0.0.1:8545 +VITE_GAS_PRICE=60000000 +VITE_BLOCK_EXPLORER=https://explorer.testnet.rsk.co +VITE_URL=/ diff --git a/.env.testnet b/.env.testnet index e09a9aa7..c0a44f2e 100644 --- a/.env.testnet +++ b/.env.testnet @@ -1,6 +1,6 @@ -REACT_APP_ENVIRONMENT=test -REACT_APP_ENVIRONMENT_ID=31 -REACT_APP_NODE=https://public-node.testnet.rsk.co -REACT_APP_GAS_PRICE=60000000 -REACT_APP_BLOCK_EXPLORER=https://explorer.testnet.rsk.co -REACT_APP_URL=https://testnet.manager.rns.rifos.org/ +VITE_ENVIRONMENT=test +VITE_ENVIRONMENT_ID=31 +VITE_NODE=https://public-node.testnet.rsk.co +VITE_GAS_PRICE=60000000 +VITE_BLOCK_EXPLORER=https://explorer.testnet.rsk.co +VITE_URL=https://testnet.manager.rns.rifos.org/ diff --git a/.eslintrc.js b/.eslintrc.js index 4983b2bc..14fe13bd 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -16,7 +16,7 @@ module.exports = { ecmaFeatures: { jsx: true, }, - ecmaVersion: 2018, + ecmaVersion: 2020, sourceType: 'module', }, plugins: [ diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 777e449c..e4d582ef 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -12,12 +12,12 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - - name: Use Node.js 20.x - uses: actions/setup-node@v1 + - uses: actions/checkout@v4 + - name: Use Node.js + uses: actions/setup-node@v4 with: - node-version: 20.x - - run: yarn + node-version-file: '.nvmrc' + - run: yarn install --frozen-lockfile - run: npm run ganache & - run: yarn test - run: yarn lint diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 79cdd9d5..595c6a63 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -15,19 +15,19 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v4 - - name: Setup Node 20 - uses: actions/setup-node@v1 + - name: Setup Node + uses: actions/setup-node@v4 with: - node-version: '20' + node-version-file: '.nvmrc' - name: Install dependencies - run: yarn + run: yarn install --frozen-lockfile - name: Build site run: | - export REACT_APP_GIT_HASH=${{ github.sha }} + export VITE_GIT_HASH=${{ github.sha }} yarn build:testnet - name: Configure AWS credentials @@ -55,19 +55,19 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v4 - - name: Setup Node 20 - uses: actions/setup-node@v1 + - name: Setup Node + uses: actions/setup-node@v4 with: - node-version: '20' + node-version-file: '.nvmrc' - name: Install dependencies - run: yarn + run: yarn install --frozen-lockfile - name: Build site run: | - export REACT_APP_GIT_HASH=${{ github.sha }} + export VITE_GIT_HASH=${{ github.sha }} yarn build:mainnet - name: Configure AWS credentials diff --git a/.github/workflows/gh-deploy.yml b/.github/workflows/gh-deploy.yml index c612fe1a..5d28520b 100644 --- a/.github/workflows/gh-deploy.yml +++ b/.github/workflows/gh-deploy.yml @@ -18,19 +18,19 @@ jobs: steps: - name: Checkout 🛎️ - uses: actions/checkout@v2.3.1 # If you're using actions/checkout@v2 you must set persist-credentials to false in most cases for the deployment to work correctly. + uses: actions/checkout@v4 # persist-credentials must be false in most cases for the deployment to work correctly. with: persist-credentials: false - - name: Setup Node 20 - uses: actions/setup-node@v1 + - name: Setup Node + uses: actions/setup-node@v4 with: - node-version: '20' + node-version-file: '.nvmrc' - name: Install and Build for Testnet 🔧 # This example project is built using npm and outputs the result to the 'build' folder. Replace with the commands required to build your project, or remove this step entirely if your site is pre-built. run: | - yarn install --network-timeout 100000 || yarn install --network-timeout 100000 || yarn install --network-timeout 100000 - export REACT_APP_GIT_HASH=${{ github.sha }} + yarn install --frozen-lockfile --network-timeout 100000 || yarn install --frozen-lockfile --network-timeout 100000 || yarn install --frozen-lockfile --network-timeout 100000 + export VITE_GIT_HASH=${{ github.sha }} yarn build:ghpages - name: Deploy 🚀 diff --git a/.github/workflows/qa-deploy.yml b/.github/workflows/qa-deploy.yml index 84d64bcf..4633cd05 100644 --- a/.github/workflows/qa-deploy.yml +++ b/.github/workflows/qa-deploy.yml @@ -11,19 +11,19 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v4 - - name: Setup Node 20 - uses: actions/setup-node@v1 + - name: Setup Node + uses: actions/setup-node@v4 with: - node-version: '20' + node-version-file: '.nvmrc' - name: Install dependencies - run: yarn + run: yarn install --frozen-lockfile - name: Build site run: | - export REACT_APP_GIT_HASH=${{ github.sha }} + export VITE_GIT_HASH=${{ github.sha }} yarn build:mainnet - name: Configure AWS credentials diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 00000000..209e3ef4 --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +20 diff --git a/README.md b/README.md index 553984af..d6875938 100755 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ Requisites: -- [Node v12](https://nodejs.org/en/) +- [Node v20](https://nodejs.org/en/) (see `.nvmrc`) - [yarn](https://yarnpkg.com/) Install dependencies: diff --git a/babel.config.js b/babel.config.js deleted file mode 100644 index a959a259..00000000 --- a/babel.config.js +++ /dev/null @@ -1,13 +0,0 @@ -module.exports = { - presets: [ - ['@babel/preset-react', { targets: { node: 'current' } }], - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - }, - ], - ], -}; diff --git a/public/index.html b/index.html old mode 100755 new mode 100644 similarity index 96% rename from public/index.html rename to index.html index 2cb9b23c..c913d441 --- a/public/index.html +++ b/index.html @@ -20,12 +20,12 @@ - RNS
+ diff --git a/mainnet.Dockerfile b/mainnet.Dockerfile index 42ed2c09..dba1b8ec 100644 --- a/mainnet.Dockerfile +++ b/mainnet.Dockerfile @@ -1,4 +1,4 @@ -FROM node:10 +FROM node:20 WORKDIR /app COPY . ./ diff --git a/package.json b/package.json index cd7a599c..bb5f3aac 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,9 @@ "private": true, "license": "MIT", "homepage": "/", + "engines": { + "node": ">=20 <21" + }, "dependencies": { "@ensdomains/address-encoder": "^0.1.8", "@githubprimer/octicons-react": "^8.5.0", @@ -13,7 +16,6 @@ "bootstrap": "^4.3.1", "cbor": "^5.0.2", "connected-react-router": "^6.3.1", - "env-cmd": "^10.0.1", "eth-ens-namehash": "^2.0.8", "history": "^4.7.2", "js-sha3": "^0.8.0", @@ -26,7 +28,6 @@ "react-redux": "^7.1.1", "react-router": "^5.1.2", "react-router-dom": "^5.1.2", - "react-scripts": "4.0.0", "react-switch": "^5.0.0", "react-zlib-js": "^1.0.4", "redux": "^4.0.1", @@ -42,20 +43,17 @@ }, "scripts": { "ganache": "npx ganache-cli", - "start": "NODE_OPTIONS='--openssl-legacy-provider' env-cmd -f .env.local react-scripts start", - "start:testnet": "NODE_OPTIONS='--openssl-legacy-provider' env-cmd -f .env.testnet react-scripts start", - "start:mainnet": "NODE_OPTIONS='--openssl-legacy-provider' env-cmd -f .env.production react-scripts start", - "build:testnet": "NODE_OPTIONS='--openssl-legacy-provider' CI=false env-cmd -f .env.testnet react-scripts --max_old_space_size=8192 build", - "build:mainnet": "NODE_OPTIONS='--openssl-legacy-provider' CI=false env-cmd -f .env.production react-scripts --max_old_space_size=8192 build", - "build:ghpages": "NODE_OPTIONS='--openssl-legacy-provider' PUBLIC_URL=/rns-manager-react CI=false env-cmd -f .env.testnet react-scripts --max_old_space_size=8192 build", - "test": "NODE_OPTIONS='--openssl-legacy-provider' node ./tests/setupRnsSuite.js && jest --maxWorkers=4 && eslint src", - "test:watch": "NODE_OPTIONS='--openssl-legacy-provider' node ./tests/setupRnsSuite.js && jest --watch", + "start": "vite", + "start:testnet": "vite --mode testnet", + "start:mainnet": "vite --mode production", + "build:testnet": "vite build --mode testnet", + "build:mainnet": "vite build --mode production", + "build:ghpages": "vite build --mode testnet --base /rns-manager-react/", + "test": "node ./tests/setupRnsSuite.js && vitest run && eslint src", + "test:watch": "node ./tests/setupRnsSuite.js && vitest watch", "cypress": "cypress open", "lint": "eslint src" }, - "eslintConfig": { - "extends": "react-app" - }, "browserslist": [ ">0.2%", "not dead", @@ -63,20 +61,24 @@ "not op_mini all" ], "devDependencies": { - "@babel/preset-env": "^7.8.4", - "@babel/preset-react": "^7.8.3", + "@vitejs/plugin-react": "^5.2.0", "@wojtekmaj/enzyme-adapter-react-17": "^0.8.0", "cypress": "^6.6.0", "enzyme": "^3.11.0", "enzyme-to-json": "^3.4.4", + "eslint": "^7.32.0", "eslint-config-airbnb": "^17.1.0", "eslint-plugin-cypress": "^2.11.2", "eslint-plugin-import": "^2.18.0", "eslint-plugin-jest": "^22.7.1", "eslint-plugin-jsx-a11y": "^6.2.1", + "eslint-plugin-react": "^7.21.5", "ganache-cli": "^6.12.2", - "jest-enzyme": "^7.1.2", + "jsdom": "^29.1.1", "redux-mock-store": "^1.5.4", + "vite": "^7.3.6", + "vite-plugin-node-polyfills": "^0.28.0", + "vitest": "^3.2.6", "web-streams-polyfill": "^4.1.0" }, "resolutions": { @@ -87,25 +89,5 @@ "node-sass": "npm:sass@^1.32.0", "cheerio": "1.0.0-rc.5", "@babel/core": "^7.27.3" - }, - "jest": { - "setupFilesAfterEnv": [ - "/tests/setupTests.js" - ], - "snapshotSerializers": [ - "enzyme-to-json/serializer" - ], - "testEnvironment": "jsdom", - "transform": { - "^.+\\.js?$": "babel-jest" - }, - "moduleNameMapper": { - "\\.(gif|png|eot|svg)$": "/tests/config/mockImage.js" - }, - "verbose": false, - "setupFiles": [ - "/tests/polyfills.js", - "/tests/setEnvVars.js" - ] } -} \ No newline at end of file +} diff --git a/src/app/adapters/RNSLibAdapter.js b/src/app/adapters/RNSLibAdapter.js index 230c50ad..821c77a8 100644 --- a/src/app/adapters/RNSLibAdapter.js +++ b/src/app/adapters/RNSLibAdapter.js @@ -2,7 +2,7 @@ import { rns as registry } from './configAdapter'; // eslint-disable-next-line import/prefer-default-export export const getOptions = () => { - switch (process.env.REACT_APP_ENVIRONMENT) { + switch (import.meta.env.VITE_ENVIRONMENT) { case 'local': case 'testing': return { diff --git a/src/app/adapters/configAdapter.js b/src/app/adapters/configAdapter.js index 584ed0e7..8236f680 100644 --- a/src/app/adapters/configAdapter.js +++ b/src/app/adapters/configAdapter.js @@ -3,8 +3,8 @@ import Testnet from '../../config/contracts.testnet.json'; import Local from '../../config/contracts.local.json'; import Testing from '../../config/contracts.testing.json'; -const env = process.env.REACT_APP_ENVIRONMENT - ? process.env.REACT_APP_ENVIRONMENT : 'production'; +const env = import.meta.env.VITE_ENVIRONMENT + ? import.meta.env.VITE_ENVIRONMENT : 'production'; const returnValue = (name) => { switch (env) { diff --git a/src/app/adapters/explorerAdapter.js b/src/app/adapters/explorerAdapter.js index 12ed3af7..3a290895 100644 --- a/src/app/adapters/explorerAdapter.js +++ b/src/app/adapters/explorerAdapter.js @@ -1,3 +1,3 @@ -export const getExplorer = () => process.env.REACT_APP_BLOCK_EXPLORER; +export const getExplorer = () => import.meta.env.VITE_BLOCK_EXPLORER; export const explorer = getExplorer(); diff --git a/src/app/adapters/gasPriceAdapter.js b/src/app/adapters/gasPriceAdapter.js index fd50aeaf..087a5f5d 100644 --- a/src/app/adapters/gasPriceAdapter.js +++ b/src/app/adapters/gasPriceAdapter.js @@ -1,3 +1,3 @@ -export const getGasPrice = () => process.env.REACT_APP_GAS_PRICE; +export const getGasPrice = () => import.meta.env.VITE_GAS_PRICE; export const gasPrice = getGasPrice(); diff --git a/src/app/adapters/nodeAdapter.js b/src/app/adapters/nodeAdapter.js index a22b3697..e1eb0c31 100644 --- a/src/app/adapters/nodeAdapter.js +++ b/src/app/adapters/nodeAdapter.js @@ -1,3 +1,3 @@ -export const getNode = () => (process.env.CIRCLECI ? 'http://0.0.0.0:8545' : process.env.REACT_APP_NODE); +export const getNode = () => (process.env.CIRCLECI ? 'http://0.0.0.0:8545' : import.meta.env.VITE_NODE); export const rskNode = getNode(); diff --git a/src/app/auth/containers/AuthModalContainer.js b/src/app/auth/containers/AuthModalContainer.js index 9b5915eb..45c25bb4 100644 --- a/src/app/auth/containers/AuthModalContainer.js +++ b/src/app/auth/containers/AuthModalContainer.js @@ -12,7 +12,7 @@ const mapStateToProps = state => ({ enabling: state.auth.enabling, enableError: state.auth.enableError, address: state.auth.address, - managerNetwork: networkSelector(process.env.REACT_APP_ENVIRONMENT_ID), + managerNetwork: networkSelector(import.meta.env.VITE_ENVIRONMENT_ID), networkMatch: state.auth.networkMatch, authError: state.auth.authError, name: state.auth.name, diff --git a/src/app/auth/containers/LoginDropdownContainer.js b/src/app/auth/containers/LoginDropdownContainer.js index a3f5b3c6..55dcbddd 100644 --- a/src/app/auth/containers/LoginDropdownContainer.js +++ b/src/app/auth/containers/LoginDropdownContainer.js @@ -14,11 +14,11 @@ const getStoredDomains = (address, current) => { } const storedDomains = JSON.parse(localStorage.getItem('storedDomains')); - if (!storedDomains[process.env.REACT_APP_ENVIRONMENT]) { + if (!storedDomains[import.meta.env.VITE_ENVIRONMENT]) { return []; } - return storedDomains[process.env.REACT_APP_ENVIRONMENT].filter( + return storedDomains[import.meta.env.VITE_ENVIRONMENT].filter( d => (d.owner === address && d.domain !== current), ); }; diff --git a/src/app/auth/operations.js b/src/app/auth/operations.js index 5604d7b0..9bcd67ea 100644 --- a/src/app/auth/operations.js +++ b/src/app/auth/operations.js @@ -41,8 +41,8 @@ export const saveDomainToLocalStorage = async (domain) => { ? JSON.parse(localStorage.getItem('storedDomains')) : {}; // environment: - if (!storedDomains[process.env.REACT_APP_ENVIRONMENT]) { - storedDomains[process.env.REACT_APP_ENVIRONMENT] = []; + if (!storedDomains[import.meta.env.VITE_ENVIRONMENT]) { + storedDomains[import.meta.env.VITE_ENVIRONMENT] = []; } const accounts = await window.rLogin.request({ method: 'eth_accounts' }); @@ -52,10 +52,10 @@ export const saveDomainToLocalStorage = async (domain) => { }; if ( - storedDomains[process.env.REACT_APP_ENVIRONMENT].length === 0 - || storedDomains[process.env.REACT_APP_ENVIRONMENT].filter(d => d.domain === domain).length < 1 + storedDomains[import.meta.env.VITE_ENVIRONMENT].length === 0 + || storedDomains[import.meta.env.VITE_ENVIRONMENT].filter(d => d.domain === domain).length < 1 ) { - storedDomains[process.env.REACT_APP_ENVIRONMENT].push(newDomain); + storedDomains[import.meta.env.VITE_ENVIRONMENT].push(newDomain); localStorage.setItem('storedDomains', JSON.stringify(storedDomains)); } }; @@ -69,14 +69,14 @@ export const removeDomainToLocalStorage = (domain) => { ? JSON.parse(localStorage.getItem('storedDomains')) : {}; // does the environment exist? this should not happen: - if (!storedDomains[process.env.REACT_APP_ENVIRONMENT]) { + if (!storedDomains[import.meta.env.VITE_ENVIRONMENT]) { return; } - const newEnv = storedDomains[process.env.REACT_APP_ENVIRONMENT].filter(d => d.domain !== domain); + const newEnv = storedDomains[import.meta.env.VITE_ENVIRONMENT].filter(d => d.domain !== domain); const newStoredDomains = { ...storedDomains, - [process.env.REACT_APP_ENVIRONMENT]: newEnv, + [import.meta.env.VITE_ENVIRONMENT]: newEnv, }; localStorage.setItem('storedDomains', JSON.stringify(newStoredDomains)); @@ -182,7 +182,7 @@ const startWithRLogin = callback => (dispatch) => { .then(chainId => dispatch(receiveEnable( accounts[0], chainId, - chainId === parseInt(process.env.REACT_APP_ENVIRONMENT_ID), + chainId === parseInt(import.meta.env.VITE_ENVIRONMENT_ID), accounts.length !== 0, ))); diff --git a/src/app/components/FooterComponent.js b/src/app/components/FooterComponent.js index 0ee0b353..fd2ce699 100644 --- a/src/app/components/FooterComponent.js +++ b/src/app/components/FooterComponent.js @@ -17,7 +17,7 @@ const FooterComponent = (props) => { rel: 'noopener noreferrer', }; - const appUrl = process.env.REACT_APP_URL; + const appUrl = import.meta.env.VITE_URL; const domain = appUrl.slice(appUrl.indexOf('//') + 2, -1); return ( @@ -80,7 +80,7 @@ const FooterComponent = (props) => { {`Copyright © ${new Date().getFullYear()} `} RootstockLabs. All rights reserved. {` ${version}`} - {process.env.REACT_APP_GIT_HASH && ` (${process.env.REACT_APP_GIT_HASH.slice(0, 7)})`} + {import.meta.env.VITE_GIT_HASH && ` (${import.meta.env.VITE_GIT_HASH.slice(0, 7)})`}

diff --git a/src/app/components/UserSuccessComponent.js b/src/app/components/UserSuccessComponent.js index 53d03e88..c242a655 100644 --- a/src/app/components/UserSuccessComponent.js +++ b/src/app/components/UserSuccessComponent.js @@ -30,7 +30,7 @@ const UserSuccessComponent = ({ {address && (

diff --git a/src/app/components/__snapshots__/CopyButtonComponent.test.js.snap b/src/app/components/__snapshots__/CopyButtonComponent.test.js.snap index c59f01c9..cd496e82 100644 --- a/src/app/components/__snapshots__/CopyButtonComponent.test.js.snap +++ b/src/app/components/__snapshots__/CopyButtonComponent.test.js.snap @@ -1,9 +1,9 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`CopyButtonComponent matches snapshot 1`] = ` +exports[`CopyButtonComponent > matches snapshot 1`] = ` Copy text diff --git a/src/app/components/__snapshots__/TextRotationComponent.test.js.snap b/src/app/components/__snapshots__/TextRotationComponent.test.js.snap index 9c09a7d1..ecc0def3 100644 --- a/src/app/components/__snapshots__/TextRotationComponent.test.js.snap +++ b/src/app/components/__snapshots__/TextRotationComponent.test.js.snap @@ -1,39 +1,39 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`TextRotationComponent renders, places correct content with bold and matches snapshot 1`] = ` +exports[`TextRotationComponent > renders, places correct content with bold and matches snapshot 1`] = ` defaults matches snapshot 1`] = `

`; -exports[`toggleComponent toggleSwitch active matches snapshot 1`] = ` +exports[`toggleComponent > toggleSwitch active matches snapshot 1`] = `
renders and matches snapshot 1`] = ` Close

diff --git a/src/app/components/__snapshots__/UserSuccessComponent.test.js.snap b/src/app/components/__snapshots__/UserSuccessComponent.test.js.snap index 9f1e57fd..15a447f8 100644 --- a/src/app/components/__snapshots__/UserSuccessComponent.test.js.snap +++ b/src/app/components/__snapshots__/UserSuccessComponent.test.js.snap @@ -1,9 +1,9 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`UserSuccessComponent renders and matches snapshot 1`] = ` +exports[`UserSuccessComponent > renders and matches snapshot 1`] = ` Close

diff --git a/src/app/containers/IndicatorLight.js b/src/app/containers/IndicatorLight.js index 5b326a3a..0c215874 100644 --- a/src/app/containers/IndicatorLight.js +++ b/src/app/containers/IndicatorLight.js @@ -5,7 +5,7 @@ const mapStateToProps = state => ({ networkMatch: state.auth.networkMatch, hasWeb3Provider: state.auth.hasWeb3Provider, walletUnlocked: state.auth.walletUnlocked, - network: process.env.REACT_APP_ENVIRONMENT_ID, + network: import.meta.env.VITE_ENVIRONMENT_ID, }); export default connect(mapStateToProps)(IndicatorLight); diff --git a/src/app/rLogin/rLogin.js b/src/app/rLogin/rLogin.js index 344e28a9..9e78d84b 100644 --- a/src/app/rLogin/rLogin.js +++ b/src/app/rLogin/rLogin.js @@ -2,10 +2,10 @@ import { createRLogin } from '@rsksmart/rlogin-essentials'; const trezorOptions = { manifestEmail: 'info@iovlabs.org', - manifestAppUrl: process.env.REACT_APP_URL, + manifestAppUrl: import.meta.env.VITE_URL, }; -const isMainnet = process.env.REACT_APP_ENVIRONMENT_ID === '30'; +const isMainnet = import.meta.env.VITE_ENVIRONMENT_ID === '30'; const rpcUrls = isMainnet ? { 30: 'https://public-node.rsk.co', diff --git a/src/app/selectors.js b/src/app/selectors.js index 8db55475..050b5caf 100644 --- a/src/app/selectors.js +++ b/src/app/selectors.js @@ -10,7 +10,7 @@ export const networkSelector = (network) => { switch (network) { case '30': return 'RSK MainNet'; case '31': return 'RSK TestNet'; - case process.env.REACT_APP_ENVIRONMENT_ID: return 'Local'; + case import.meta.env.VITE_ENVIRONMENT_ID: return 'Local'; default: return 'invalid'; } }; diff --git a/src/app/tabs/SetUpTab.js b/src/app/tabs/SetUpTab.js index 346bbafc..a288d81b 100644 --- a/src/app/tabs/SetUpTab.js +++ b/src/app/tabs/SetUpTab.js @@ -9,7 +9,7 @@ import { rif as rifAddress } from '../adapters/configAdapter'; import { networkSelector } from '../selectors'; const SetUpTab = multilanguage(({ strings }) => { - const networkId = process.env.REACT_APP_ENVIRONMENT_ID; + const networkId = import.meta.env.VITE_ENVIRONMENT_ID; const networkName = networkSelector(networkId); return ( diff --git a/src/app/tabs/error/ErrorTabContainer.js b/src/app/tabs/error/ErrorTabContainer.js index 0180502f..92dc4cb4 100644 --- a/src/app/tabs/error/ErrorTabContainer.js +++ b/src/app/tabs/error/ErrorTabContainer.js @@ -9,7 +9,7 @@ const mapStateToProps = state => ({ networkMatch: state.auth.networkMatch, walletUnlocked: state.auth.walletUnlocked, walletNetwork: networkSelector(state.auth.network), - envNetwork: networkSelector(process.env.REACT_APP_ENVIRONMENT_ID), + envNetwork: networkSelector(import.meta.env.VITE_ENVIRONMENT_ID), }); const mapDispatchToProps = dispatch => ({ diff --git a/src/app/tabs/home/components/__snapshots__/SearchBoxComponent.test.js.snap b/src/app/tabs/home/components/__snapshots__/SearchBoxComponent.test.js.snap index 7716d1e4..c606ed2c 100644 --- a/src/app/tabs/home/components/__snapshots__/SearchBoxComponent.test.js.snap +++ b/src/app/tabs/home/components/__snapshots__/SearchBoxComponent.test.js.snap @@ -1,9 +1,9 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`SearchBoxComponent renders and matches snapshot 1`] = ` +exports[`SearchBoxComponent > renders and matches snapshot 1`] = ` renders and matches snapshot when available 1`] = ` @@ -50,11 +50,11 @@ exports[`SearchResultsComponent renders and matches snapshot when available 1`] currentLanguageCode="en" dispatch={[Function]} domain="foobar" - handleClick={[MockFunction]} + handleClick={[MockFunction spy]} isSearching={false} rifCost={6} strings={ - Object { + { "available": "available", "domain_not_available": "not available", "register": "register", @@ -159,13 +159,13 @@ exports[`SearchResultsComponent renders and matches snapshot when available 1`] active={false} className="register" disabled={false} - onClick={[MockFunction]} + onClick={[MockFunction spy]} variant="primary" >

@@ -112,13 +112,13 @@ exports[`AutoLoginComponent should matches snapshot 1`] = ` active={false} block={true} disabled={false} - onClick={[MockFunction]} + onClick={[MockFunction spy]} variant="primary" > - -

- - - + Copy text + + +
+ `; diff --git a/src/app/components/__snapshots__/TextRotationComponent.test.js.snap b/src/app/components/__snapshots__/TextRotationComponent.test.js.snap index ecc0def3..57de4b35 100644 --- a/src/app/components/__snapshots__/TextRotationComponent.test.js.snap +++ b/src/app/components/__snapshots__/TextRotationComponent.test.js.snap @@ -1,52 +1,12 @@ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html exports[`TextRotationComponent > renders, places correct content with bold and matches snapshot 1`] = ` - + `; diff --git a/src/app/components/__snapshots__/ToggleComponent.test.js.snap b/src/app/components/__snapshots__/ToggleComponent.test.js.snap index dad55e1e..25d964ea 100644 --- a/src/app/components/__snapshots__/ToggleComponent.test.js.snap +++ b/src/app/components/__snapshots__/ToggleComponent.test.js.snap @@ -1,85 +1,68 @@ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html exports[`toggleComponent > defaults matches snapshot 1`] = ` - +
- +
`; exports[`toggleComponent > toggleSwitch active matches snapshot 1`] = ` - +
- +
`; diff --git a/src/app/components/__snapshots__/UserErrorComponent.test.js.snap b/src/app/components/__snapshots__/UserErrorComponent.test.js.snap index 22dd24be..a22cc9e9 100644 --- a/src/app/components/__snapshots__/UserErrorComponent.test.js.snap +++ b/src/app/components/__snapshots__/UserErrorComponent.test.js.snap @@ -1,59 +1,27 @@ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html exports[`UserErrorComponent > renders and matches snapshot 1`] = ` - - - +
+ -

- - Error - -

-

- Error Message -

-
-
-
-
+ Close + +

+ + Error + +

+

+ Error Message +

+ + `; diff --git a/src/app/components/__snapshots__/UserSuccessComponent.test.js.snap b/src/app/components/__snapshots__/UserSuccessComponent.test.js.snap index 15a447f8..afeaf2f9 100644 --- a/src/app/components/__snapshots__/UserSuccessComponent.test.js.snap +++ b/src/app/components/__snapshots__/UserSuccessComponent.test.js.snap @@ -1,63 +1,34 @@ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html exports[`UserSuccessComponent > renders and matches snapshot 1`] = ` - - - +
+ -

- -

-

- - Success - -

-

- Success Message -

-
-
-
-
+ Close + +

+ +

+

+ + Success + +

+

+ Success Message +

+ + + `; diff --git a/src/app/tabs/home/components/SearchBoxComponent.test.js b/src/app/tabs/home/components/SearchBoxComponent.test.js index f13c2c68..225cc476 100644 --- a/src/app/tabs/home/components/SearchBoxComponent.test.js +++ b/src/app/tabs/home/components/SearchBoxComponent.test.js @@ -1,6 +1,6 @@ import React from 'react'; -import { mount } from 'enzyme'; import { Provider } from 'react-redux'; +import { render, fireEvent } from '@testing-library/react'; import mockStore from '../../../../../tests/config/mockStore'; import en from '../../../../languages/en.json'; @@ -15,56 +15,56 @@ const store = mockStore({ describe('SearchBoxComponent', () => { it('renders and matches snapshot', () => { - const component = mount( + const { container } = render( , ); - expect(component).toMatchSnapshot(); + expect(container).toMatchSnapshot(); }); it('handles successful interaction', () => { const handleClick = jest.fn(); - const component = mount( + const { container } = render( , ); - component.find('input').simulate('change', { target: { value: 'hello' } }); - component.find('button').simulate('click'); + fireEvent.change(container.querySelector('input'), { target: { value: 'hello' } }); + fireEvent.click(container.querySelector('button')); expect(handleClick).toBeCalledWith('hello'); }); it('handles errors with interactions', () => { const handleClick = jest.fn(); - const component = mount( + const { container } = render( , ); - component.find('input').simulate('change', { target: { value: 'foo' } }); - component.find('button').simulate('click'); - expect(component.find('.errorMessage').find('p').text()).toBe(en.blocked_domain); + fireEvent.change(container.querySelector('input'), { target: { value: 'foo' } }); + fireEvent.click(container.querySelector('button')); + expect(container.querySelector('.errorMessage p').textContent).toBe(en.blocked_domain); - component.find('input').simulate('change', { target: { value: 'foobar!' } }); - component.find('button').simulate('click'); - expect(component.find('.errorMessage').find('p').text()).toBe(en.invalid_name); + fireEvent.change(container.querySelector('input'), { target: { value: 'foobar!' } }); + fireEvent.click(container.querySelector('button')); + expect(container.querySelector('.errorMessage p').textContent).toBe(en.invalid_name); expect(handleClick).toBeCalledTimes(0); }); it('converts uppercase to lower when searching', () => { const handleClick = jest.fn(); - const component = mount( + const { container } = render( , ); - component.find('input').simulate('change', { target: { value: 'UPPERCASEDOMAIN' } }); - component.find('button').simulate('click'); + fireEvent.change(container.querySelector('input'), { target: { value: 'UPPERCASEDOMAIN' } }); + fireEvent.click(container.querySelector('button')); expect(handleClick).toBeCalledWith('uppercasedomain'); }); diff --git a/src/app/tabs/home/components/SearchResultsComponent.test.js b/src/app/tabs/home/components/SearchResultsComponent.test.js index 4f80f17b..2903f83d 100644 --- a/src/app/tabs/home/components/SearchResultsComponent.test.js +++ b/src/app/tabs/home/components/SearchResultsComponent.test.js @@ -1,9 +1,7 @@ import React from 'react'; -import { mount } from 'enzyme'; -import { HashRouter } from 'react-router-dom'; -import { Provider } from 'react-redux'; import mockStore from '../../../../../tests/config/mockStore'; import en from '../../../../languages/en.json'; +import { renderWithProviders } from '../../../../../tests/testUtils'; import SearchResultsComponent from './SearchResultsComponent'; @@ -20,65 +18,56 @@ const handleClick = jest.fn(); describe('SearchResultsComponent', () => { it('renders and matches snapshot when available', () => { - const component = mount( - - - - - , + const { container } = renderWithProviders( + , + { store, withRouter: true }, ); - expect(component).toMatchSnapshot(); + expect(container).toMatchSnapshot(); - expect(component.find('h3').text()).toBe('foobar.rsk'); - expect(component.find('.status').text()).toBe('available'); - expect(component.find('p.cost').text()).toBe('6 rif/year'); + expect(container.querySelector('h3').textContent).toBe('foobar.rsk'); + expect(container.querySelector('.status').textContent).toBe('available'); + expect(container.querySelector('p.cost').textContent).toBe('6 rif/year'); }); it('renders and matches snapshot when not available', () => { - const component = mount( - - - - - , + const { container } = renderWithProviders( + , + { store, withRouter: true }, ); - expect(component).toMatchSnapshot(); + expect(container).toMatchSnapshot(); - expect(component.find('h3').text()).toBe('foobar.rsk'); - expect(component.find('.status').text()).toBe('not available'); + expect(container.querySelector('h3').textContent).toBe('foobar.rsk'); + expect(container.querySelector('.status').textContent).toBe('not available'); }); it('displays nothing when no domain is provided', () => { - const component = mount( - - - - - , + const { container } = renderWithProviders( + , + { store, withRouter: true }, ); - expect(component.html()).toBeFalsy(); + expect(container.firstChild).toBeFalsy(); }); }); diff --git a/src/app/tabs/home/components/WalletCarousel.test.js b/src/app/tabs/home/components/WalletCarousel.test.js index d2574b6e..7df46713 100644 --- a/src/app/tabs/home/components/WalletCarousel.test.js +++ b/src/app/tabs/home/components/WalletCarousel.test.js @@ -1,6 +1,6 @@ import React from 'react'; -import { mount } from 'enzyme'; import { Provider } from 'react-redux'; +import { render } from '@testing-library/react'; import { mockStoreEnglish } from '../../../../../tests/config/mockStore'; import WalletCarousel from './WalletCarousel'; @@ -16,43 +16,43 @@ describe('WalletCarousel', () => { describe('basic', () => { it('renders', () => { - const component = mount(generateComponent(wallets2)); - expect(component).toBeDefined(); + const { container } = render(generateComponent(wallets2)); + expect(container).toBeDefined(); }); it('has header', () => { - const component = mount(generateComponent(wallets2)); - expect(component.find('h2').text()).toBe('Wallet and dapp integrations'); + const { container } = render(generateComponent(wallets2)); + expect(container.querySelector('h2').textContent).toBe('Wallet and dapp integrations'); }); }); describe('content', () => { it('displays the correct content for first item', () => { - const component = mount(generateComponent(wallets2)); + const { container } = render(generateComponent(wallets2)); - const first = component.find('.carousel-item').find('.col').at(0); + const first = container.querySelectorAll('.carousel-item')[0].querySelectorAll('.col')[0]; - expect(first.find('p').text()).toBe('name1'); - expect(first.find('a').props().href).toBe('url1'); - expect(first.find('.image-container').props().style).toMatchObject({ backgroundImage: 'url(image1.jpg)' }); + expect(first.querySelector('p').textContent).toBe('name1'); + expect(first.querySelector('a').getAttribute('href')).toBe('url1'); + expect(first.querySelector('.image-container').style.backgroundImage).toBe('url("image1.jpg")'); }); it('displays name of sixth item', () => { - const component = mount(generateComponent(wallets7)); - const column = component.find('.carousel-item').at(1).find('.col').at(2); - expect(column.find('p').text()).toBe('name6'); + const { container } = render(generateComponent(wallets7)); + const column = container.querySelectorAll('.carousel-item')[1].querySelectorAll('.col')[2]; + expect(column.querySelector('p').textContent).toBe('name6'); }); }); describe('number of items', () => { it('creates 3 pages', () => { - const component = mount(generateComponent(wallets7)); - expect(component.find('.carousel-item')).toHaveLength(3); + const { container } = render(generateComponent(wallets7)); + expect(container.querySelectorAll('.carousel-item')).toHaveLength(3); }); it('creates 1 page', () => { - const component = mount(generateComponent(wallets2)); - expect(component.find('.carousel-item')).toHaveLength(1); + const { container } = render(generateComponent(wallets2)); + expect(container.querySelectorAll('.carousel-item')).toHaveLength(1); }); }); }); diff --git a/src/app/tabs/home/components/__snapshots__/SearchBoxComponent.test.js.snap b/src/app/tabs/home/components/__snapshots__/SearchBoxComponent.test.js.snap index c606ed2c..d1005bbb 100644 --- a/src/app/tabs/home/components/__snapshots__/SearchBoxComponent.test.js.snap +++ b/src/app/tabs/home/components/__snapshots__/SearchBoxComponent.test.js.snap @@ -1,80 +1,35 @@ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html exports[`SearchBoxComponent > renders and matches snapshot 1`] = ` - - + - - + .rsk + + +
+ +
+ + + `; diff --git a/src/app/tabs/home/components/__snapshots__/SearchResultsComponent.test.js.snap b/src/app/tabs/home/components/__snapshots__/SearchResultsComponent.test.js.snap index e9f9409d..7b2c7ca7 100644 --- a/src/app/tabs/home/components/__snapshots__/SearchResultsComponent.test.js.snap +++ b/src/app/tabs/home/components/__snapshots__/SearchResultsComponent.test.js.snap @@ -1,338 +1,140 @@ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html exports[`SearchResultsComponent > renders and matches snapshot when available 1`] = ` - - - +
+
- - + Results + +
+
+
+
+
- + foobar.rsk + +
+
+

-

-
-

- Results -

-
-
- - +
+
+

-

-
- -
- -
-

- foobar.rsk -

-
- - -
-

- available -

-
- - -
-

- - 6 - rif - - - / - year - -

-
- - -
- - -
- -
-
-
-
- + 6 + rif + + + / + year + +

+
+
+
- - - - - +
+
+
+ + `; exports[`SearchResultsComponent > renders and matches snapshot when not available 1`] = ` - - - +
+
- - + Results + +
+
+
+
+
- + foobar.rsk + +
+
+

-

-
-

- Results -

-
-
- - +
+
+

-

-
- -
- -
-

- foobar.rsk -

-
- - -
-

- not available -

-
- - -
-

- Please search another domain -

-
- -
-
-
-
- + Please search another domain +

- - - - - +
+
+
+ + `; diff --git a/src/app/tabs/home/containers/SearchBoxContainer.test.js b/src/app/tabs/home/containers/SearchBoxContainer.test.js index 5b75b24d..55d070d7 100644 --- a/src/app/tabs/home/containers/SearchBoxContainer.test.js +++ b/src/app/tabs/home/containers/SearchBoxContainer.test.js @@ -1,11 +1,11 @@ import React from 'react'; -import { mount } from 'enzyme'; -import { Provider } from 'react-redux'; +import { fireEvent } from '@testing-library/react'; import searchReducer from '../../search/reducer'; import SearchBoxContainer from './SearchBoxContainer'; import multiLanguageStore from '../../../../../tests/config/multiLanguageStore'; +import { renderWithProviders } from '../../../../../tests/testUtils'; describe('searchBoxContainer', () => { const storeSetup = { search: searchReducer }; @@ -18,16 +18,12 @@ describe('searchBoxContainer', () => { it('handles handleClick function and sets domain in reducer', () => { const store = multiLanguageStore(storeSetup); - const component = mount( - - - , - ); + const { container } = renderWithProviders(, { store }); - component.find('input').simulate('change', { target: { value: 'foobar' } }); - expect(component.find('input').props().value).toBe('foobar'); + fireEvent.change(container.querySelector('input'), { target: { value: 'foobar' } }); + expect(container.querySelector('input').value).toBe('foobar'); - component.find('button').simulate('click'); + fireEvent.click(container.querySelector('button')); expect(store.getState().search.domain).toEqual('foobar'); }); }); diff --git a/src/app/tabs/home/containers/SearchResultsContainer.test.js b/src/app/tabs/home/containers/SearchResultsContainer.test.js index fb30450e..42e02e38 100644 --- a/src/app/tabs/home/containers/SearchResultsContainer.test.js +++ b/src/app/tabs/home/containers/SearchResultsContainer.test.js @@ -1,12 +1,12 @@ import React from 'react'; -import { mount } from 'enzyme'; -import { Provider } from 'react-redux'; +import { fireEvent } from '@testing-library/react'; import searchReducer, { initialState } from '../../search/reducer'; import SearchResultsContainer from './SearchResultsContainer'; import multiLanguageStore from '../../../../../tests/config/multiLanguageStore'; import { requestDomainState, receiveDomainState, receiveDomainCost } from '../../search/actions'; +import { renderWithProviders } from '../../../../../tests/testUtils'; describe('searchResultsContainer', () => { let store; @@ -21,17 +21,13 @@ describe('searchResultsContainer', () => { store.dispatch(receiveDomainCost(4)); // create container - const wrapper = mount( - - - , - ); + const { container } = renderWithProviders(, { store }); - expect(wrapper.find('h3').text()).toBe('foobar.rsk'); - expect(wrapper.find('span.rifPrice').text()).toBe('4 rif'); - expect(wrapper.find('p.status').text()).toBe('available'); + expect(container.querySelector('h3').textContent).toBe('foobar.rsk'); + expect(container.querySelector('span.rifPrice').textContent).toBe('4 rif'); + expect(container.querySelector('p.status').textContent).toBe('available'); - wrapper.find('button').simulate('click'); + fireEvent.click(container.querySelector('button')); expect(store.getState().search).toEqual(initialState); }); diff --git a/src/app/tabs/newAdmin/components/LeftNavComponent.test.js b/src/app/tabs/newAdmin/components/LeftNavComponent.test.js index 0cf63327..470fa70e 100644 --- a/src/app/tabs/newAdmin/components/LeftNavComponent.test.js +++ b/src/app/tabs/newAdmin/components/LeftNavComponent.test.js @@ -1,8 +1,6 @@ import React from 'react'; -import { HashRouter } from 'react-router-dom'; -import { mount } from 'enzyme'; -import { Provider } from 'react-redux'; import { mockStoreEnglish } from '../../../../../tests/config/mockStore'; +import { renderWithProviders } from '../../../../../tests/testUtils'; import LeftNavComponent from './LetftNavComponent'; @@ -10,49 +8,37 @@ const store = mockStoreEnglish(); describe('LeftNavComponent', () => { it('matches snapshot', () => { - const component = mount( - - - - - , + const { container } = renderWithProviders( + , + { store, withRouter: true }, ); - expect(component).toBeDefined(); + expect(container).toBeDefined(); }); it('shows all items when advancedView is true', () => { - const component = mount( - - - - - , + const { container } = renderWithProviders( + , + { store, withRouter: true }, ); - expect(component.find('li').length).toBe(6); + expect(container.querySelectorAll('li').length).toBe(6); }); it('sets correct item active when passed', () => { - const component = mount( - - - - - , + const { container } = renderWithProviders( + , + { store, withRouter: true }, ); - expect(component.find('a.active').text()).toEqual('subdomains'); - expect(component.find('li').length).toBe(4); + expect(container.querySelector('a.active').textContent).toEqual('subdomains'); + expect(container.querySelectorAll('li').length).toBe(4); }); it('sets home as active when resolver is passed, but advancedView is false.', () => { - const component = mount( - - - - - , + const { container } = renderWithProviders( + , + { store, withRouter: true }, ); - expect(component.find('a.active').text()).toEqual('Domain info'); + expect(container.querySelector('a.active').textContent).toEqual('Domain info'); }); }); diff --git a/src/app/tabs/newAdmin/domainInfo/components/RenewButtonComponent.test.js b/src/app/tabs/newAdmin/domainInfo/components/RenewButtonComponent.test.js index c079a1d7..69a842fd 100644 --- a/src/app/tabs/newAdmin/domainInfo/components/RenewButtonComponent.test.js +++ b/src/app/tabs/newAdmin/domainInfo/components/RenewButtonComponent.test.js @@ -1,7 +1,6 @@ import React from 'react'; -import { mount } from 'enzyme'; -import { Provider } from 'react-redux'; import mockStore from '../../../../../../tests/config/mockStore'; +import { renderWithProviders } from '../../../../../../tests/testUtils'; import en from '../../../../../languages/en.json'; import RenewButtonComponent from './RenewButtonComponent'; @@ -25,12 +24,8 @@ const initProps = { describe('RenewButtonComponent', () => { it('renders without crashing', () => { - const component = mount( - - - , - ); - expect(component).toBeTruthy(); + const { container } = renderWithProviders(, { store }); + expect(container).toBeTruthy(); }); it('expect renew section to be open', () => { @@ -38,12 +33,8 @@ describe('RenewButtonComponent', () => { ...initProps, isRenewOpen: true, }; - const component = mount( - - - , - ); - expect(component.find('button').hasClass('active')).toBeTruthy(); + const { container } = renderWithProviders(, { store }); + expect(container.querySelector('button')).toHaveClass('active'); }); it('expect nothing when expires is 0', () => { @@ -51,11 +42,7 @@ describe('RenewButtonComponent', () => { ...initProps, expires: 0, }; - const component = mount( - - - , - ); - expect(component.find('button').prop('disabled')).toBeTruthy(); + const { container } = renderWithProviders(, { store }); + expect(container.querySelector('button')).toBeDisabled(); }); }); diff --git a/src/app/tabs/newAdmin/domainInfo/components/ShareButtonComponent.test.js b/src/app/tabs/newAdmin/domainInfo/components/ShareButtonComponent.test.js index e33e16d5..654e83fb 100644 --- a/src/app/tabs/newAdmin/domainInfo/components/ShareButtonComponent.test.js +++ b/src/app/tabs/newAdmin/domainInfo/components/ShareButtonComponent.test.js @@ -1,7 +1,7 @@ import React from 'react'; -import { mount } from 'enzyme'; -import { Provider } from 'react-redux'; +import { fireEvent } from '@testing-library/react'; import mockStore from '../../../../../../tests/config/mockStore'; +import { renderWithProviders } from '../../../../../../tests/testUtils'; import en from '../../../../../languages/en.json'; import ShareButtonComponent from './ShareButtonComponent'; @@ -18,25 +18,19 @@ const store = mockStore({ describe('RenewButtonComponent', () => { it('renders without crashing', () => { - const component = mount( - - - , - ); - component.find('button.share-button').simulate('click'); + const { container } = renderWithProviders(, { store }); + fireEvent.click(container.querySelector('button.share-button')); }); it('opens link window when clicked', () => { - const component = mount( - - - , - ); + const { container } = renderWithProviders(, { store }); - component.find('button.share-button').at(0).simulate('click'); - component.find('.link.btn-link').simulate('click'); + // The share-button trigger is inside `container`, but react-bootstrap's + // OverlayTrigger/Popover content it reveals is portaled to document.body. + fireEvent.click(container.querySelector('button.share-button')); + fireEvent.click(document.querySelector('.link.btn-link')); - expect(component.find('.row.share-link input').at(0).props().defaultValue) + expect(document.querySelectorAll('.row.share-link input')[0].value) .toBe('/resolve?name=foobar.rsk'); }); }); diff --git a/src/app/tabs/newAdmin/domainInfo/components/TransferSuccessModalComponent.test.js b/src/app/tabs/newAdmin/domainInfo/components/TransferSuccessModalComponent.test.js index 07bccd14..025eaae3 100644 --- a/src/app/tabs/newAdmin/domainInfo/components/TransferSuccessModalComponent.test.js +++ b/src/app/tabs/newAdmin/domainInfo/components/TransferSuccessModalComponent.test.js @@ -1,7 +1,7 @@ import React from 'react'; -import { mount } from 'enzyme'; -import { Provider } from 'react-redux'; +import { fireEvent } from '@testing-library/react'; import mockStore from '../../../../../../tests/config/mockStore'; +import { renderWithProviders } from '../../../../../../tests/testUtils'; import en from '../../../../../languages/en.json'; import TransferSuccessModalComponent from './TransferSuccessModalComponent'; @@ -12,22 +12,19 @@ const store = mockStore({ login_another_domain: en.login_another_domain, }); -const handleClick = jest.fn(); - -const component = mount( - - - , -); - describe('TransferSuccessModalComponent', () => { it('calls function with value when clicked', () => { - component.find('button').at(0).simulate('click'); + const handleClick = jest.fn(); + renderWithProviders( + , + { store }, + ); + + // react-bootstrap's Modal renders into a portal on document.body, not inside `container`. + const buttons = document.querySelectorAll('button'); + fireEvent.click(buttons[0]); expect(handleClick).toBeCalledWith('newAdmin'); - component.find('button').at(1).simulate('click'); + fireEvent.click(buttons[1]); expect(handleClick).toBeCalledWith('search'); expect(handleClick).toHaveBeenCalledTimes(2); diff --git a/src/app/tabs/newAdmin/domainInfo/components/UpgradeComponent.test.js b/src/app/tabs/newAdmin/domainInfo/components/UpgradeComponent.test.js index f0fb0a63..9348202f 100644 --- a/src/app/tabs/newAdmin/domainInfo/components/UpgradeComponent.test.js +++ b/src/app/tabs/newAdmin/domainInfo/components/UpgradeComponent.test.js @@ -1,7 +1,7 @@ import React from 'react'; -import { mount } from 'enzyme'; -import { Provider } from 'react-redux'; +import { fireEvent } from '@testing-library/react'; import mockStore from '../../../../../../tests/config/mockStore'; +import { renderWithProviders } from '../../../../../../tests/testUtils'; import en from '../../../../../languages/en.json'; import UpgradeComponent from './UpgradeComponent'; @@ -12,25 +12,25 @@ const store = mockStore({ upgrade_domain_explanation: en.upgrade_domain_explanation, }); -const handleClick = jest.fn(); - -const component = mount( - - - , +const renderComponent = (handleClick = jest.fn()) => renderWithProviders( + , + { store }, ); describe('UpgradeComponent', () => { it('renders and matches snapshop', () => { - expect(component).toMatchSnapshot(); + const { container } = renderComponent(); + expect(container).toMatchSnapshot(); }); it('calls function when clicked', () => { - component.find('button').simulate('click'); + const handleClick = jest.fn(); + const { container } = renderComponent(handleClick); + fireEvent.click(container.querySelector('button')); expect(handleClick).toBeCalled(); }); }); diff --git a/src/app/tabs/newAdmin/domainInfo/components/__snapshots__/UpgradeComponent.test.js.snap b/src/app/tabs/newAdmin/domainInfo/components/__snapshots__/UpgradeComponent.test.js.snap index 29c00378..a6e1a0e4 100644 --- a/src/app/tabs/newAdmin/domainInfo/components/__snapshots__/UpgradeComponent.test.js.snap +++ b/src/app/tabs/newAdmin/domainInfo/components/__snapshots__/UpgradeComponent.test.js.snap @@ -1,101 +1,42 @@ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html exports[`UpgradeComponent > renders and matches snapshop 1`] = ` - - +
-
- -
- -
-

- Upgrade domain -

-
- -
-
- + Upgrade domain + +
+
+
+
+

+ The domain upgrade offers new functionalities and dynamic renovation. The upgrade requires a single transaction with your wallet, then your domain will be upgraded automatically. +

+
+
+ - -
- -
- + upgrade + -
- -
+ + + `; diff --git a/src/app/tabs/newAdmin/myurl/components/MyUrlComponent.test.js b/src/app/tabs/newAdmin/myurl/components/MyUrlComponent.test.js index 9383797c..3e4b21b7 100644 --- a/src/app/tabs/newAdmin/myurl/components/MyUrlComponent.test.js +++ b/src/app/tabs/newAdmin/myurl/components/MyUrlComponent.test.js @@ -1,7 +1,7 @@ import React from 'react'; -import { shallow, mount } from 'enzyme'; -import { Provider } from 'react-redux'; +import { fireEvent } from '@testing-library/react'; import { mockStoreEnglish } from '../../../../../../tests/config/mockStore'; +import { renderWithProviders } from '../../../../../../tests/testUtils'; import MyUrlComponent from './MyUrlComponent'; import { initialState, contentInititalState } from '../../resolver/reducer'; import { initialState as addresses } from '../../addresses/reducer'; @@ -27,35 +27,44 @@ describe('MyUrlComponent', () => { const generateComponent = (localProps = {}) => { const combinedProps = { ...initProps, ...localProps }; - return ; + return ; }; it('it renders and is defined', () => { - const wrapper = shallow(generateComponent()); + const wrapper = renderWithProviders(generateComponent(), { store }); expect(wrapper).toBeDefined(); }); it('shows loading wheel when supportedInterfaces has not returned', () => { - const wrapper = mount(generateComponent({ receiveContent: false })); - expect(wrapper.find('.row.waiting')).toBeDefined(); + const { container } = renderWithProviders( + generateComponent({ receiveContent: false }), + { store }, + ); + expect(container.querySelector('.row.waiting')).toBeDefined(); }); it('shows an error message if url is null', () => { - const wrapper = mount(generateComponent({ url: null })); - expect(wrapper.find('.alert').text()).toBe('Your resolver does not support decentralized URL.'); + const { container } = renderWithProviders(generateComponent({ url: null }), { store }); + expect(container.querySelector('.alert').textContent).toBe('Your resolver does not support decentralized URL.'); }); describe('new record', () => { it('shows editable when there is no url', () => { - const wrapper = mount(generateComponent({ url: contentInititalState })); - expect(wrapper.find('p').text().substr(0, 12)).toBe('Here you can'); + const { container } = renderWithProviders( + generateComponent({ url: contentInititalState }), + { store }, + ); + expect(container.querySelector('p').textContent.substr(0, 12)).toBe('Here you can'); }); it('handles clicking', () => { const handleSave = jest.fn(); - const wrapper = mount(generateComponent({ url: contentInititalState, handleSave })); - wrapper.find('input.rsk-input').simulate('change', { target: { value: 'foo' } }); - wrapper.find('button.rsk-button').simulate('click'); + const { container } = renderWithProviders( + generateComponent({ url: contentInititalState, handleSave }), + { store }, + ); + fireEvent.change(container.querySelector('input.rsk-input'), { target: { value: 'foo' } }); + fireEvent.click(container.querySelector('button.rsk-button')); expect(handleSave).toBeCalledWith('foo'); }); @@ -65,8 +74,8 @@ describe('MyUrlComponent', () => { ...contentInititalState, errorMessage: 'an error', }; - const wrapper = mount(generateComponent({ url })); - expect(wrapper.find('.error').text()).toBe('an error'); + const { container } = renderWithProviders(generateComponent({ url }), { store }); + expect(container.querySelector('.error').textContent).toBe('an error'); }); it('shows loading when new content is saving', () => { @@ -74,8 +83,8 @@ describe('MyUrlComponent', () => { ...contentInititalState, isWaiting: true, }; - const wrapper = mount(generateComponent({ url })); - expect(wrapper.find('.new').find('.waiting').length).toBe(1); + const { container } = renderWithProviders(generateComponent({ url }), { store }); + expect(container.querySelectorAll('.new .waiting').length).toBe(1); }); }); @@ -86,9 +95,9 @@ describe('MyUrlComponent', () => { value: 'ipfs://QmQ', isEmpty: false, }; - const wrapper = mount(generateComponent({ url })); + const { container } = renderWithProviders(generateComponent({ url }), { store }); - expect(wrapper.find('.addressInput .value').text()).toBe('ipfs://QmQ'); + expect(container.querySelector('.addressInput .value').textContent).toBe('ipfs://QmQ'); }); }); }); diff --git a/src/app/tabs/newAdmin/resolver/components/NewRecordComponent.test.js b/src/app/tabs/newAdmin/resolver/components/NewRecordComponent.test.js index a2798f15..8509613e 100644 --- a/src/app/tabs/newAdmin/resolver/components/NewRecordComponent.test.js +++ b/src/app/tabs/newAdmin/resolver/components/NewRecordComponent.test.js @@ -1,7 +1,7 @@ import React from 'react'; -import { mount } from 'enzyme'; -import { Provider } from 'react-redux'; +import { fireEvent } from '@testing-library/react'; import mockStore from '../../../../../../tests/config/mockStore'; +import { renderWithProviders } from '../../../../../../tests/testUtils'; import en from '../../../../../languages/en.json'; import NewRecordComponent from './NewRecordComponent'; @@ -35,14 +35,10 @@ const initProps = { describe('NewRecordComponent', () => { it('renders and matches snapshot', () => { - const component = mount( - - - , - ); - expect(component).toMatchSnapshot(); + const { container } = renderWithProviders(, { store }); + expect(container).toMatchSnapshot(); - expect(component.find('option').props().value).toBe('CONTENT_BYTES'); + expect(container.querySelector('option').value).toBe('CONTENT_BYTES'); }); it('handles interaction', () => { @@ -52,14 +48,10 @@ describe('NewRecordComponent', () => { handleSubmit, }; - const component = mount( - - - , - ); + const { container } = renderWithProviders(, { store }); - component.find('input').simulate('change', { target: { value: 'foo' } }); - component.find('button').at(0).simulate('click'); + fireEvent.change(container.querySelector('input'), { target: { value: 'foo' } }); + fireEvent.click(container.querySelectorAll('button')[0]); expect(handleSubmit).toHaveBeenCalledWith('CONTENT_BYTES', 'foo'); }); @@ -80,14 +72,10 @@ describe('NewRecordComponent', () => { handleCloseMessage, }; - const component = mount( - - - , - ); + const { container } = renderWithProviders(, { store }); - expect(component.find('div.error p').at(1).text()).toBe('There was an error'); - component.find('button.close').simulate('click'); + expect(container.querySelectorAll('div.error p')[1].textContent).toBe('There was an error'); + fireEvent.click(container.querySelector('button.close')); expect(handleCloseMessage).toBeCalled(); }); }); diff --git a/src/app/tabs/newAdmin/resolver/components/__snapshots__/NewRecordComponent.test.js.snap b/src/app/tabs/newAdmin/resolver/components/__snapshots__/NewRecordComponent.test.js.snap index df2a2b19..86d1944b 100644 --- a/src/app/tabs/newAdmin/resolver/components/__snapshots__/NewRecordComponent.test.js.snap +++ b/src/app/tabs/newAdmin/resolver/components/__snapshots__/NewRecordComponent.test.js.snap @@ -1,158 +1,46 @@ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html exports[`NewRecordComponent > renders and matches snapshot 1`] = ` - - +
- + Add records + +
-

- Add records -

-
-
- -
-
- -
-
+
-
- + +
+
+ - +
+
- - - +
+
+
`; diff --git a/src/app/tabs/newAdmin/subdomains/components/SettingsComponent.test.js b/src/app/tabs/newAdmin/subdomains/components/SettingsComponent.test.js index 0ff02dd8..477905d1 100644 --- a/src/app/tabs/newAdmin/subdomains/components/SettingsComponent.test.js +++ b/src/app/tabs/newAdmin/subdomains/components/SettingsComponent.test.js @@ -1,7 +1,7 @@ import React from 'react'; -import { mount } from 'enzyme'; -import { Provider } from 'react-redux'; +import { fireEvent } from '@testing-library/react'; import mockStore from '../../../../../../tests/config/mockStore'; +import { renderWithProviders } from '../../../../../../tests/testUtils'; import SettingsComponent from './SettingsComponent'; describe('Subdomain settings component', () => { @@ -15,16 +15,17 @@ describe('Subdomain settings component', () => { }; it('shows menu when address and owner are the same', () => { - const wrapper = mount(); - expect(wrapper.find('p').text()).toBe('Wanna login?'); + const { container } = renderWithProviders(, { store }); + expect(container.querySelector('p').textContent).toBe('Wanna login?'); }); it('handles click button', () => { const handleClick = jest.fn(); - const wrapper = mount( - , + const { container } = renderWithProviders( + , + { store }, ); - wrapper.find('button').simulate('click'); + fireEvent.click(container.querySelector('button')); expect(handleClick).toBeCalledTimes(1); }); }); diff --git a/src/app/tabs/registrar/components/AutoLoginComponent.test.js b/src/app/tabs/registrar/components/AutoLoginComponent.test.js index fd42fa41..c7d8ee64 100644 --- a/src/app/tabs/registrar/components/AutoLoginComponent.test.js +++ b/src/app/tabs/registrar/components/AutoLoginComponent.test.js @@ -1,6 +1,6 @@ import React from 'react'; -import { mount } from 'enzyme'; import { Provider } from 'react-redux'; +import { render, fireEvent } from '@testing-library/react'; import mockStore from '../../../../../tests/config/mockStore'; import en from '../../../../languages/en.json'; @@ -15,13 +15,10 @@ const store = mockStore({ close: en.close, }); -const handleAdminClick = jest.fn(); -const handleRegisterNewClick = jest.fn(); - -const component = mount( +const renderComponent = (handleManageClick, handleRegisterNewClick) => render( @@ -30,19 +27,22 @@ const component = mount( describe('AutoLoginComponent', () => { it('should matches snapshot', () => { - expect(component).toMatchSnapshot(); + const { container } = renderComponent(jest.fn(), jest.fn()); + expect(container).toMatchSnapshot(); }); - it('should call functions when buttons are clicked', () => { - const buttons = component.find('.btn-primary'); + const handleAdminClick = jest.fn(); + const handleRegisterNewClick = jest.fn(); + const { container } = renderComponent(handleAdminClick, handleRegisterNewClick); + const buttons = container.querySelectorAll('.btn-primary'); - expect(buttons.at(0).text()).toBe(en.admin_domain); - buttons.at(0).simulate('click'); + expect(buttons[0].textContent).toBe(en.admin_domain); + fireEvent.click(buttons[0]); expect(handleAdminClick).toHaveBeenCalledTimes(1); - expect(buttons.at(1).text()).toBe(en.register_another_domain); - buttons.at(1).simulate('click'); + expect(buttons[1].textContent).toBe(en.register_another_domain); + fireEvent.click(buttons[1]); expect(handleRegisterNewClick).toHaveBeenCalledTimes(1); }); }); diff --git a/src/app/tabs/registrar/components/__snapshots__/AutoLoginComponent.test.js.snap b/src/app/tabs/registrar/components/__snapshots__/AutoLoginComponent.test.js.snap index 80111b47..19ebc3aa 100644 --- a/src/app/tabs/registrar/components/__snapshots__/AutoLoginComponent.test.js.snap +++ b/src/app/tabs/registrar/components/__snapshots__/AutoLoginComponent.test.js.snap @@ -1,153 +1,66 @@ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html exports[`AutoLoginComponent > should matches snapshot 1`] = ` - - +
- - + +

+ +

+

+ + Your domain has been registered + +

+

+

+ - -

- -
- +

+
+
+
+ +
+
+ - -
-
- - -
-
- -
- -
+ Register another domain + + + + `; diff --git a/tests/setupTests.js b/tests/setupTests.js index ae9adb97..7b0d8f12 100644 --- a/tests/setupTests.js +++ b/tests/setupTests.js @@ -1,8 +1,10 @@ -/* eslint-disable no-var */ -var enzyme = require('enzyme'); -var Adapter = require('@wojtekmaj/enzyme-adapter-react-17'); +import { afterEach } from 'vitest'; +import { cleanup } from '@testing-library/react'; +import '@testing-library/jest-dom/vitest'; -enzyme.configure({ adapter: new Adapter() }); +afterEach(() => { + cleanup(); +}); // for rLogin essentials jest.mock('@rsksmart/rlogin-dcent-provider', () => ({ diff --git a/tests/testUtils.js b/tests/testUtils.js new file mode 100644 index 00000000..c48510c1 --- /dev/null +++ b/tests/testUtils.js @@ -0,0 +1,15 @@ +import React from 'react'; +import { render } from '@testing-library/react'; +import { Provider } from 'react-redux'; +import { HashRouter } from 'react-router-dom'; + +export function renderWithProviders(ui, { store, withRouter = false, ...options } = {}) { + function Wrapper({ children }) { + const content = withRouter ? {children} : children; + return {content}; + } + + return render(ui, { wrapper: Wrapper, ...options }); +} + +export * from '@testing-library/react'; diff --git a/vite.config.js b/vite.config.js index 12282773..a12b9101 100644 --- a/vite.config.js +++ b/vite.config.js @@ -26,7 +26,7 @@ export default defineConfig({ }, esbuild: { loader: 'jsx', - include: /src\/.*\.jsx?$/, + include: /(src|tests)\/.*\.jsx?$/, exclude: [], }, optimizeDeps: { @@ -44,6 +44,5 @@ export default defineConfig({ './tests/polyfills.js', './tests/setupTests.js', ], - snapshotSerializers: ['enzyme-to-json/serializer'], }, }); diff --git a/yarn.lock b/yarn.lock index 1bfab3b2..06cdfd60 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,11 @@ # yarn lockfile v1 +"@adobe/css-tools@^4.4.0": + version "4.5.0" + resolved "https://registry.yarnpkg.com/@adobe/css-tools/-/css-tools-4.5.0.tgz#b5b71a25a4d16afa2482592ddfa62fccc60bc7d1" + integrity sha512-6OzddxPio9UiWTCemp4N8cYLV2ZN1ncRnV1cVGtve7dhPOtRkleRyx32GQCYSwDYgaHU3USMm84tNsvKzRCa1Q== + "@apollo/protobufjs@1.2.6": version "1.2.6" resolved "https://registry.yarnpkg.com/@apollo/protobufjs/-/protobufjs-1.2.6.tgz#d601e65211e06ae1432bf5993a1a0105f2862f27" @@ -149,6 +154,15 @@ dependencies: "@babel/highlight" "^7.10.4" +"@babel/code-frame@^7.10.4": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.29.7.tgz#f2fbbfea87c44a21590ec515b778b2c26d8866e7" + integrity sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw== + dependencies: + "@babel/helper-validator-identifier" "^7.29.7" + js-tokens "^4.0.0" + picocolors "^1.1.1" + "@babel/code-frame@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.27.1.tgz#200f715e66d52a23b221a9435534a91cc13ad5be" @@ -324,7 +338,7 @@ resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz#54da796097ab19ce67ed9f88b47bb2ec49367687" integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA== -"@babel/helper-validator-identifier@^7.25.9": +"@babel/helper-validator-identifier@^7.25.9", "@babel/helper-validator-identifier@^7.29.7": version "7.29.7" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz#bd87084ced0c796ec46bda492de6e83d29e89fc2" integrity sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg== @@ -3796,6 +3810,41 @@ dependencies: defer-to-connect "^2.0.1" +"@testing-library/dom@^8.0.0": + version "8.20.1" + resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-8.20.1.tgz#2e52a32e46fc88369eef7eef634ac2a192decd9f" + integrity sha512-/DiOQ5xBxgdYRC8LNk7U+RWat0S3qRLeIw3ZIkMQ9kkVlRmwD/Eg8k8CqIpD6GW7u20JIUOfMKbxtiLutpjQ4g== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/runtime" "^7.12.5" + "@types/aria-query" "^5.0.1" + aria-query "5.1.3" + chalk "^4.1.0" + dom-accessibility-api "^0.5.9" + lz-string "^1.5.0" + pretty-format "^27.0.2" + +"@testing-library/jest-dom@^6": + version "6.9.1" + resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-6.9.1.tgz#7613a04e146dd2976d24ddf019730d57a89d56c2" + integrity sha512-zIcONa+hVtVSSep9UT3jZ5rizo2BsxgyDYU7WFD5eICBE7no3881HGeb/QkGfsJs6JTkY1aQhT7rIPC7e+0nnA== + dependencies: + "@adobe/css-tools" "^4.4.0" + aria-query "^5.0.0" + css.escape "^1.5.1" + dom-accessibility-api "^0.6.3" + picocolors "^1.1.1" + redent "^3.0.0" + +"@testing-library/react@^12": + version "12.1.5" + resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-12.1.5.tgz#bb248f72f02a5ac9d949dea07279095fa577963b" + integrity sha512-OfTXCJUFgjd/digLUuPxa0+/3ZxsQmE7ub9kcbW/wi96Bh3o/p5vrETcBGfP17NWPGqeYYl5LTRpwyGoMC4ysg== + dependencies: + "@babel/runtime" "^7.12.5" + "@testing-library/dom" "^8.0.0" + "@types/react-dom" "<18.0.0" + "@tootallnate/once@1": version "1.1.2" resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" @@ -4242,6 +4291,11 @@ dependencies: "@types/node" "*" +"@types/aria-query@^5.0.1": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-5.0.4.tgz#1a31c3d378850d2778dabb6374d036dcba4ba708" + integrity sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw== + "@types/babel__core@^7.20.5": version "7.20.5" resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" @@ -4330,13 +4384,6 @@ "@types/deep-eql" "*" assertion-error "^2.0.1" -"@types/cheerio@^0.22.22": - version "0.22.35" - resolved "https://registry.yarnpkg.com/@types/cheerio/-/cheerio-0.22.35.tgz#0d16dc1f24d426231c181b9c31847f673867595f" - integrity sha512-yD57BchKRvTV+JD53UZ6PD8KWY5g5rvvMLRnZR3EQBCZXiDT/HR+pKpMzFGlWNhFrXlo7VPZXtKvIEwZkAWOIA== - dependencies: - "@types/node" "*" - "@types/connect@*": version "3.4.38" resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.38.tgz#5ba7f3bc4fbbdeaff8dded952e5ff2cc53f8d858" @@ -4486,6 +4533,11 @@ resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb" integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== +"@types/react-dom@<18.0.0": + version "17.0.26" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-17.0.26.tgz#fa7891ba70fd39ddbaa7e85b6ff9175bb546bc1b" + integrity sha512-Z+2VcYXJwOqQ79HreLU/1fyQ88eXSSFh6I3JdrEHQIfYSI0kCQpTGvOrbE6jFGGYXKsHuwY9tBa/w5Uo6KzrEg== + "@types/react-redux@^7.1.20": version "7.1.34" resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-7.1.34.tgz#83613e1957c481521e6776beeac4fd506d11bd0e" @@ -4850,28 +4902,6 @@ dependencies: "@walletconnect/window-getters" "^1.0.0" -"@wojtekmaj/enzyme-adapter-react-17@^0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@wojtekmaj/enzyme-adapter-react-17/-/enzyme-adapter-react-17-0.8.0.tgz#138f404f82f502d152242c049e87d9621dcda4bd" - integrity sha512-zeUGfQRziXW7R7skzNuJyi01ZwuKCH8WiBNnTgUJwdS/CURrJwAhWsfW7nG7E30ak8Pu3ZwD9PlK9skBfAoOBw== - dependencies: - "@wojtekmaj/enzyme-adapter-utils" "^0.2.0" - enzyme-shallow-equal "^1.0.0" - has "^1.0.0" - prop-types "^15.7.0" - react-is "^17.0.0" - react-test-renderer "^17.0.0" - -"@wojtekmaj/enzyme-adapter-utils@^0.2.0": - version "0.2.0" - resolved "https://registry.yarnpkg.com/@wojtekmaj/enzyme-adapter-utils/-/enzyme-adapter-utils-0.2.0.tgz#dc2a8c14f92e502da28ea6b3fad96a082076d028" - integrity sha512-ZvZm9kZxZEKAbw+M1/Q3iDuqQndVoN8uLnxZ8bzxm7KgGTBejrGRoJAp8f1EN8eoO3iAjBNEQnTDW/H4Ekb0FQ== - dependencies: - function.prototype.name "^1.1.0" - has "^1.0.0" - object.fromentries "^2.0.0" - prop-types "^15.7.0" - "@xrplf/isomorphic@^1.0.0", "@xrplf/isomorphic@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@xrplf/isomorphic/-/isomorphic-1.0.1.tgz#d7676e0ec0e55a39f37ddc1f3cc30eeab52e0739" @@ -5159,6 +5189,11 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" +ansi-styles@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== + antlr4ts@^0.5.0-alpha.4: version "0.5.0-alpha.4" resolved "https://registry.yarnpkg.com/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz#71702865a87478ed0b40c0709f422cf14d51652a" @@ -5338,7 +5373,14 @@ argsarray@0.0.1: resolved "https://registry.yarnpkg.com/argsarray/-/argsarray-0.0.1.tgz#6e7207b4ecdb39b0af88303fa5ae22bda8df61cb" integrity sha512-u96dg2GcAKtpTrBdDoFIM7PjcBA+6rSP0OR94MOReNRyUECL6MtQt5XXmRr4qrftYaef9+l5hcpO5te7sML1Cg== -aria-query@^5.3.2: +aria-query@5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.1.3.tgz#19db27cd101152773631396f7a95a3b58c22c35e" + integrity sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ== + dependencies: + deep-equal "^2.0.5" + +aria-query@^5.0.0, aria-query@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.2.tgz#93f81a43480e33a338f19163a3d10a50c01dcd59" integrity sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw== @@ -5365,7 +5407,7 @@ arr-union@^3.1.0: resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" integrity sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q== -array-buffer-byte-length@^1.0.1, array-buffer-byte-length@^1.0.2: +array-buffer-byte-length@^1.0.0, array-buffer-byte-length@^1.0.1, array-buffer-byte-length@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz#384d12a37295aec3769ab022ad323a18a51ccf8b" integrity sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw== @@ -5402,18 +5444,6 @@ array-unique@^0.3.2: resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" integrity sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ== -array.prototype.filter@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/array.prototype.filter/-/array.prototype.filter-1.0.4.tgz#bef83fde8a36a14d3de988c43563e0f5249962bf" - integrity sha512-r+mCJ7zXgXElgR4IRC+fkvNCeoaavWBs6EdCso5Tbcf+iEMKzBU/His60lt34WEZ9vlb8wDkZvQGcVI5GwkfoQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" - es-array-method-boxes-properly "^1.0.0" - es-object-atoms "^1.0.0" - is-string "^1.0.7" - array.prototype.findlast@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz#3e4fbcb30a15a7f5bf64cf2faae22d139c2e4904" @@ -5439,7 +5469,7 @@ array.prototype.findlastindex@^1.2.6: es-object-atoms "^1.1.1" es-shim-unscopables "^1.1.0" -array.prototype.flat@^1.2.3, array.prototype.flat@^1.3.1, array.prototype.flat@^1.3.3: +array.prototype.flat@^1.3.1, array.prototype.flat@^1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz#534aaf9e6e8dd79fb6b9a9917f839ef1ec63afe5" integrity sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg== @@ -6351,7 +6381,7 @@ call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.7, call-bind@^1.0.8: get-intrinsic "^1.2.4" set-function-length "^1.2.2" -call-bind@^1.0.9: +call-bind@^1.0.5, call-bind@^1.0.9: version "1.0.9" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.9.tgz#39a644700c80bc7d0ca9102fc6d1d43b2fd7eee7" integrity sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ== @@ -6587,7 +6617,7 @@ cheerio-select-tmp@^0.1.0: domhandler "^4.0.0" domutils "^2.4.4" -cheerio@1.0.0-rc.5, cheerio@^1.0.0-rc.3: +cheerio@1.0.0-rc.5: version "1.0.0-rc.5" resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.5.tgz#88907e1828674e8f9fee375188b27dadd4f0fa2f" integrity sha512-yoqps/VCaZgN4pfXtenwHROTp8NG6/Hlt4Jpz2FEP0ZJQ+ZUkVDd0hAPDNKhj3nakpfPt/CNs57yEtxD1bXQiw== @@ -6930,7 +6960,7 @@ commander@^14.0.0: resolved "https://registry.yarnpkg.com/commander/-/commander-14.0.2.tgz#b71fd37fe4069e4c3c7c13925252ada4eba14e8e" integrity sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ== -commander@^2.19.0, commander@^2.20.3, commander@^2.8.1, commander@^2.9.0: +commander@^2.20.3, commander@^2.8.1, commander@^2.9.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== @@ -7342,6 +7372,11 @@ css-what@^4.0.0: resolved "https://registry.yarnpkg.com/css-what/-/css-what-4.0.0.tgz#35e73761cab2eeb3d3661126b23d7aa0e8432233" integrity sha512-teijzG7kwYfNVsUh2H/YN62xW3KK9YhXEgSlbxMlcyjPNvdKJqFx5lrwlJgoFP1ZHlB89iGDlo/JyshKeRhv5A== +css.escape@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb" + integrity sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg== + cssfilter@0.0.10: version "0.0.10" resolved "https://registry.yarnpkg.com/cssfilter/-/cssfilter-0.0.10.tgz#c6d2672632a2e5c83e013e6864a42ce8defd20ae" @@ -7628,6 +7663,30 @@ deep-eql@^5.0.1: resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-5.0.2.tgz#4b756d8d770a9257300825d52a2c2cff99c3a341" integrity sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q== +deep-equal@^2.0.5: + version "2.2.3" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.2.3.tgz#af89dafb23a396c7da3e862abc0be27cf51d56e1" + integrity sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA== + dependencies: + array-buffer-byte-length "^1.0.0" + call-bind "^1.0.5" + es-get-iterator "^1.1.3" + get-intrinsic "^1.2.2" + is-arguments "^1.1.1" + is-array-buffer "^3.0.2" + is-date-object "^1.0.5" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + isarray "^2.0.5" + object-is "^1.1.5" + object-keys "^1.1.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.5.1" + side-channel "^1.0.4" + which-boxed-primitive "^1.0.2" + which-collection "^1.0.1" + which-typed-array "^1.1.13" + deep-extend@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" @@ -7810,11 +7869,6 @@ dijkstrajs@^1.0.1: resolved "https://registry.yarnpkg.com/dijkstrajs/-/dijkstrajs-1.0.3.tgz#4c8dbdea1f0f6478bff94d9c49c784d623e4fc23" integrity sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA== -discontinuous-range@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/discontinuous-range/-/discontinuous-range-1.0.0.tgz#e38331f0844bba49b9a9cb71c771585aab1bc65a" - integrity sha512-c68LpLbO+7kP/b1Hr1qs8/BJ09F5khZGTxqxZuhzxpmwJKOgRFHJWIb9/KmqnqHhLdO55aOxFH/EGBvUQbL/RQ== - doctrine@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" @@ -7829,6 +7883,16 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" +dom-accessibility-api@^0.5.9: + version "0.5.16" + resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz#5a7429e6066eb3664d911e33fb0e45de8eb08453" + integrity sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg== + +dom-accessibility-api@^0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz#993e925cc1d73f2c662e7d75dd5a5445259a8fd8" + integrity sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w== + dom-helpers@^5.0.1, dom-helpers@^5.2.0, dom-helpers@^5.2.1: version "5.2.1" resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.1.tgz#d9400536b2bf8225ad98fe052e029451ac40e902" @@ -8131,51 +8195,6 @@ env-paths@^2.2.0, env-paths@^2.2.1: resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== -enzyme-shallow-equal@^1.0.0, enzyme-shallow-equal@^1.0.1: - version "1.0.7" - resolved "https://registry.yarnpkg.com/enzyme-shallow-equal/-/enzyme-shallow-equal-1.0.7.tgz#4e3aa678022387a68e6c47aff200587851885b5e" - integrity sha512-/um0GFqUXnpM9SvKtje+9Tjoz3f1fpBC3eXRFrNs8kpYn69JljciYP7KZTqM/YQbUY9KUjvKB4jo/q+L6WGGvg== - dependencies: - hasown "^2.0.0" - object-is "^1.1.5" - -enzyme-to-json@^3.4.4: - version "3.6.2" - resolved "https://registry.yarnpkg.com/enzyme-to-json/-/enzyme-to-json-3.6.2.tgz#94f85c413bcae8ab67be53b0a94b69a560e27823" - integrity sha512-Ynm6Z6R6iwQ0g2g1YToz6DWhxVnt8Dy1ijR2zynRKxTyBGA8rCDXU3rs2Qc4OKvUvc2Qoe1bcFK6bnPs20TrTg== - dependencies: - "@types/cheerio" "^0.22.22" - lodash "^4.17.21" - react-is "^16.12.0" - -enzyme@^3.11.0: - version "3.11.0" - resolved "https://registry.yarnpkg.com/enzyme/-/enzyme-3.11.0.tgz#71d680c580fe9349f6f5ac6c775bc3e6b7a79c28" - integrity sha512-Dw8/Gs4vRjxY6/6i9wU0V+utmQO9kvh9XLnz3LIudviOnVYDEe2ec+0k+NQoMamn1VrjKgCUOWj5jG/5M5M0Qw== - dependencies: - array.prototype.flat "^1.2.3" - cheerio "^1.0.0-rc.3" - enzyme-shallow-equal "^1.0.1" - function.prototype.name "^1.1.2" - has "^1.0.3" - html-element-map "^1.2.0" - is-boolean-object "^1.0.1" - is-callable "^1.1.5" - is-number-object "^1.0.4" - is-regex "^1.0.5" - is-string "^1.0.5" - is-subset "^0.1.1" - lodash.escape "^4.0.1" - lodash.isequal "^4.5.0" - object-inspect "^1.7.0" - object-is "^1.0.2" - object.assign "^4.1.0" - object.entries "^1.1.1" - object.values "^1.1.1" - raf "^3.4.1" - rst-selector-parser "^2.2.3" - string.prototype.trim "^1.2.1" - eol@^0.9.1: version "0.9.1" resolved "https://registry.yarnpkg.com/eol/-/eol-0.9.1.tgz#f701912f504074be35c6117a5c4ade49cd547acd" @@ -8335,6 +8354,21 @@ es-errors@^1.3.0: resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== +es-get-iterator@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.3.tgz#3ef87523c5d464d41084b2c3c9c214f1199763d6" + integrity sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + has-symbols "^1.0.3" + is-arguments "^1.1.1" + is-map "^2.0.2" + is-set "^2.0.2" + is-string "^1.0.7" + isarray "^2.0.5" + stop-iteration-iterator "^1.0.0" + es-iterator-helpers@^1.2.1: version "1.3.3" resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.3.3.tgz#0a229dc38ada0450b8cfaa85809fd73dbb34113c" @@ -9981,7 +10015,7 @@ function-bind@^1.1.2: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== -function.prototype.name@^1.1.0, function.prototype.name@^1.1.2, function.prototype.name@^1.1.6, function.prototype.name@^1.1.8: +function.prototype.name@^1.1.6, function.prototype.name@^1.1.8: version "1.1.8" resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.8.tgz#e68e1df7b259a5c949eeef95cdbde53edffabb78" integrity sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q== @@ -10067,7 +10101,7 @@ get-caller-file@^2.0.1, get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.2.7, get-intrinsic@^1.3.0: +get-intrinsic@^1.1.3, get-intrinsic@^1.2.2, get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.2.7, get-intrinsic@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== @@ -10473,11 +10507,6 @@ has-values@^1.0.0: is-number "^3.0.0" kind-of "^4.0.0" -has@^1.0.0, has@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.4.tgz#2eb2860e000011dae4f1406a86fe80e530fb2ec6" - integrity sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ== - hash-base@^3.0.0, hash-base@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.2.tgz#79d72def7611c3f6e3c3b5730652638001b10a74" @@ -10582,14 +10611,6 @@ hosted-git-info@^2.1.4, hosted-git-info@^2.6.0: resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== -html-element-map@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/html-element-map/-/html-element-map-1.3.1.tgz#44b2cbcfa7be7aa4ff59779e47e51012e1c73c08" - integrity sha512-6XMlxrAFX4UEEGxctfFnmrFaaZFNf9i5fNuV5wZ3WWQ4FVaNP1aX1LkX9j2mfEx1NpjeE/rL3nmgEn23GdFmrg== - dependencies: - array.prototype.filter "^1.0.0" - call-bind "^1.0.2" - html-encoding-sniffer@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-6.0.0.tgz#f8d9390b3b348b50d4f61c16dd2ef5c05980a882" @@ -10892,7 +10913,7 @@ is-accessor-descriptor@^1.0.1: dependencies: hasown "^2.0.0" -is-arguments@^1.0.4: +is-arguments@^1.0.4, is-arguments@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.2.0.tgz#ad58c6aecf563b78ef2bf04df540da8f5d7d8e1b" integrity sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA== @@ -10900,7 +10921,7 @@ is-arguments@^1.0.4: call-bound "^1.0.2" has-tostringtag "^1.0.2" -is-array-buffer@^3.0.4, is-array-buffer@^3.0.5: +is-array-buffer@^3.0.2, is-array-buffer@^3.0.4, is-array-buffer@^3.0.5: version "3.0.5" resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.5.tgz#65742e1e687bd2cc666253068fd8707fe4d44280" integrity sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A== @@ -10946,7 +10967,7 @@ is-binary-path@~2.1.0: dependencies: binary-extensions "^2.0.0" -is-boolean-object@^1.0.1, is-boolean-object@^1.2.1: +is-boolean-object@^1.2.1: version "1.2.2" resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.2.2.tgz#7067f47709809a393c71ff5bb3e135d8a9215d9e" integrity sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A== @@ -10964,7 +10985,7 @@ is-buffer@^2.0.2, is-buffer@^2.0.5: resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== -is-callable@^1.1.5, is-callable@^1.2.7: +is-callable@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== @@ -11160,7 +11181,7 @@ is-lower-case@^1.1.0: dependencies: lower-case "^1.1.0" -is-map@^2.0.3: +is-map@^2.0.2, is-map@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e" integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== @@ -11183,7 +11204,7 @@ is-negative-zero@^2.0.3: resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== -is-number-object@^1.0.4, is-number-object@^1.1.1: +is-number-object@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.1.1.tgz#144b21e95a1bc148205dcc2814a9134ec41b2541" integrity sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw== @@ -11274,7 +11295,7 @@ is-promise@^2.1.0: resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1" integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ== -is-regex@^1.0.5, is-regex@^1.2.1: +is-regex@^1.1.4, is-regex@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.2.1.tgz#76d70a3ed10ef9be48eb577887d74205bf0cad22" integrity sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g== @@ -11294,12 +11315,12 @@ is-retry-allowed@^3.0.0: resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-3.0.0.tgz#ea79389fd350d156823c491bee9c69f485b1445c" integrity sha512-9xH0xvoggby+u0uGF7cZXdrutWiBiaFG8ZT4YFPXL8NzkyAwX3AKGLeFQLvzDpM430+nDFBZ1LHkie/8ocL06A== -is-set@^2.0.3: +is-set@^2.0.2, is-set@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d" integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg== -is-shared-array-buffer@^1.0.4: +is-shared-array-buffer@^1.0.2, is-shared-array-buffer@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz#9b67844bd9b7f246ba0708c3a93e34269c774f6f" integrity sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A== @@ -11321,7 +11342,7 @@ is-stream@^2.0.0: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== -is-string@^1.0.5, is-string@^1.0.7, is-string@^1.1.1: +is-string@^1.0.7, is-string@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.1.1.tgz#92ea3f3d5c5b6e039ca8677e5ac8d07ea773cbb9" integrity sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA== @@ -11329,11 +11350,6 @@ is-string@^1.0.5, is-string@^1.0.7, is-string@^1.1.1: call-bound "^1.0.3" has-tostringtag "^1.0.2" -is-subset@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-subset/-/is-subset-0.1.1.tgz#8a59117d932de1de00f245fcdd39ce43f1e939a6" - integrity sha512-6Ybun0IkarhmEqxXCNw/C0bna6Zb/TkfUX9UbwJtK6ObwAVCxmAP308WWTHviM/zAqXk05cdhYsUsZeGQh99iw== - is-symbol@^1.0.4, is-symbol@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.1.1.tgz#f47761279f532e2b05a7024a7506dbbedacd0634" @@ -12176,21 +12192,6 @@ lodash.debounce@^4.0.8: resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== -lodash.escape@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-4.0.1.tgz#c9044690c21e04294beaa517712fded1fa88de98" - integrity sha512-nXEOnb/jK9g0DYMr1/Xvq6l5xMD7GDG55+GSYIYmS0G4tBk/hURD4JR9WCavs04t33WmJx9kCyp9vJ+mr4BOUw== - -lodash.flattendeep@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2" - integrity sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ== - -lodash.isequal@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" - integrity sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ== - lodash.isequalwith@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.isequalwith/-/lodash.isequalwith-4.4.0.tgz#266726ddd528f854f21f4ea98a065606e0fbc6b0" @@ -12371,6 +12372,11 @@ ltgt@2.2.1, ltgt@^2.1.2, ltgt@~2.2.0: resolved "https://registry.yarnpkg.com/ltgt/-/ltgt-2.2.1.tgz#f35ca91c493f7b73da0e07495304f17b31f87ee5" integrity sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA== +lz-string@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.5.0.tgz#c1ab50f77887b712621201ba9fd4e3a6ed099941" + integrity sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ== + magic-string@^0.30.17, magic-string@^0.30.3: version "0.30.21" resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.21.tgz#56763ec09a0fa8091df27879fd94d19078c00d91" @@ -12652,6 +12658,11 @@ min-document@^2.19.0: dependencies: dom-walk "^0.1.0" +min-indent@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" + integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== + minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" @@ -12875,11 +12886,6 @@ moment@^2.18.1, moment@^2.29.1: resolved "https://registry.yarnpkg.com/moment/-/moment-2.30.1.tgz#f8c91c07b7a786e30c59926df530b4eac96974ae" integrity sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how== -moo@^0.5.0: - version "0.5.2" - resolved "https://registry.yarnpkg.com/moo/-/moo-0.5.2.tgz#f9fe82473bc7c184b0d32e2215d3f6e67278733c" - integrity sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q== - ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -12992,16 +12998,6 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== -nearley@^2.7.10: - version "2.20.1" - resolved "https://registry.yarnpkg.com/nearley/-/nearley-2.20.1.tgz#246cd33eff0d012faf197ff6774d7ac78acdd474" - integrity sha512-+Mc8UaAebFzgV+KpI5n7DasuuQCHA89dmwm7JXw3TV43ukfNQ9DnBH3Mdb2g/I4Fdxc26pwimBWvjIw0UAILSQ== - dependencies: - commander "^2.19.0" - moo "^0.5.0" - railroad-diagrams "^1.0.0" - randexp "0.4.6" - negotiator@0.6.3: version "0.6.3" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" @@ -13338,12 +13334,12 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" -object-inspect@^1.13.3, object-inspect@^1.13.4, object-inspect@^1.7.0: +object-inspect@^1.13.3, object-inspect@^1.13.4: version "1.13.4" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213" integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== -object-is@^1.0.2, object-is@^1.1.5: +object-is@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.6.tgz#1a6a53aed2dd8f7e6775ff870bea58545956ab07" integrity sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q== @@ -13380,7 +13376,7 @@ object.assign@^4.1.0, object.assign@^4.1.4, object.assign@^4.1.7: has-symbols "^1.1.0" object-keys "^1.1.1" -object.entries@^1.1.0, object.entries@^1.1.1, object.entries@^1.1.9: +object.entries@^1.1.0, object.entries@^1.1.9: version "1.1.9" resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.9.tgz#e4770a6a1444afb61bd39f984018b5bede25f8b3" integrity sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw== @@ -13390,7 +13386,7 @@ object.entries@^1.1.0, object.entries@^1.1.1, object.entries@^1.1.9: define-properties "^1.2.1" es-object-atoms "^1.1.1" -object.fromentries@^2.0.0, object.fromentries@^2.0.8: +object.fromentries@^2.0.8: version "2.0.8" resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.8.tgz#f7195d8a9b97bd95cbc1999ea939ecd1a2b00c65" integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ== @@ -13437,7 +13433,7 @@ object.pick@^1.3.0: dependencies: isobject "^3.0.1" -object.values@^1.1.0, object.values@^1.1.1, object.values@^1.1.6, object.values@^1.2.1: +object.values@^1.1.0, object.values@^1.1.6, object.values@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.1.tgz#deed520a50809ff7f75a7cfd4bc64c7a038c6216" integrity sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA== @@ -14240,6 +14236,15 @@ pretty-bytes@^5.4.1: resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== +pretty-format@^27.0.2: + version "27.5.1" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" + integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== + dependencies: + ansi-regex "^5.0.1" + ansi-styles "^5.0.0" + react-is "^17.0.1" + process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" @@ -14291,7 +14296,7 @@ prop-types-extra@^1.1.0: react-is "^16.3.2" warning "^4.0.0" -prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.0, prop-types@^15.7.2, prop-types@^15.8.1: +prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: version "15.8.1" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== @@ -14493,31 +14498,11 @@ quick-lru@^5.1.1: resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== -raf@^3.4.1: - version "3.4.1" - resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39" - integrity sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA== - dependencies: - performance-now "^2.1.0" - -railroad-diagrams@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz#eb7e6267548ddedfb899c1b90e57374559cddb7e" - integrity sha512-cz93DjNeLY0idrCNOH6PviZGRN9GJhsdm9hpn1YCS879fj4W+x5IFJhhkRZcwVgMmFF7R82UA/7Oh+R8lLZg6A== - ramda@~0.27.1: version "0.27.2" resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.27.2.tgz#84463226f7f36dc33592f6f4ed6374c48306c3f1" integrity sha512-SbiLPU40JuJniHexQSAgad32hfwd+DRUdwF2PlVuI5RZD0/vahUco7R8vD86J/tcEKKF9vZrUVwgtmGCqlCKyA== -randexp@0.4.6: - version "0.4.6" - resolved "https://registry.yarnpkg.com/randexp/-/randexp-0.4.6.tgz#e986ad5e5e31dae13ddd6f7b3019aa7c87f60ca3" - integrity sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ== - dependencies: - discontinuous-range "1.0.0" - ret "~0.1.10" - randomatic@^3.0.0: version "3.1.1" resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.1.tgz#b776efc59375984e36c537b2f51a1f0aff0da1ed" @@ -14637,17 +14622,12 @@ react-i18next@^11.11.4: "@babel/runtime" "^7.14.5" html-parse-stringify "^3.0.1" -react-is@^16.12.0, react-is@^16.13.1, react-is@^16.3.2, react-is@^16.6.0, react-is@^16.7.0: +react-is@^16.13.1, react-is@^16.3.2, react-is@^16.6.0, react-is@^16.7.0: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== -"react-is@^16.12.0 || ^17.0.0 || ^18.0.0": - version "18.3.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e" - integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg== - -react-is@^17.0.0, react-is@^17.0.2: +react-is@^17.0.1, react-is@^17.0.2: version "17.0.2" resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== @@ -14716,14 +14696,6 @@ react-router@5.3.4, react-router@^5.1.2: tiny-invariant "^1.0.2" tiny-warning "^1.0.0" -react-shallow-renderer@^16.13.1: - version "16.15.0" - resolved "https://registry.yarnpkg.com/react-shallow-renderer/-/react-shallow-renderer-16.15.0.tgz#48fb2cf9b23d23cde96708fe5273a7d3446f4457" - integrity sha512-oScf2FqQ9LFVQgA73vr86xl2NaOIX73rh+YFqcOp68CWj56tSfgtGKrEbyhCj0rSijyG9M1CYprTh39fBi5hzA== - dependencies: - object-assign "^4.1.1" - react-is "^16.12.0 || ^17.0.0 || ^18.0.0" - react-switch@^5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/react-switch/-/react-switch-5.0.1.tgz#449277f4c3aed5286fffd0f50d5cbc2a23330406" @@ -14731,16 +14703,6 @@ react-switch@^5.0.0: dependencies: prop-types "^15.6.2" -react-test-renderer@^17.0.0: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-17.0.2.tgz#4cd4ae5ef1ad5670fc0ef776e8cc7e1231d9866c" - integrity sha512-yaQ9cB89c17PUb0x6UfWRs7kQCorVdHlutU1boVPEsB8IDZH6n9tHxMacc3y0JoXOJUsZb/t/Mb8FUWMKaM7iQ== - dependencies: - object-assign "^4.1.1" - react-is "^17.0.2" - react-shallow-renderer "^16.13.1" - scheduler "^0.20.2" - react-transition-group@^4.4.1: version "4.4.5" resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.5.tgz#e53d4e3f3344da8521489fbef8f2581d42becdd1" @@ -14894,6 +14856,14 @@ recompose@^0.27.1: react-lifecycles-compat "^3.0.2" symbol-observable "^1.0.4" +redent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" + integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== + dependencies: + indent-string "^4.0.0" + strip-indent "^3.0.0" + redux-logger@^3.0.6: version "3.0.6" resolved "https://registry.yarnpkg.com/redux-logger/-/redux-logger-3.0.6.tgz#f7555966f3098f3c88604c449cf0baf5778274bf" @@ -14998,7 +14968,7 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" -regexp.prototype.flags@^1.5.3, regexp.prototype.flags@^1.5.4: +regexp.prototype.flags@^1.5.1, regexp.prototype.flags@^1.5.3, regexp.prototype.flags@^1.5.4: version "1.5.4" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz#1ad6c62d44a259007e55b3970e00f746efbcaa19" integrity sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA== @@ -15368,14 +15338,6 @@ rskjs-util@^1.0.3: dependencies: keccak "^1.0.2" -rst-selector-parser@^2.2.3: - version "2.2.3" - resolved "https://registry.yarnpkg.com/rst-selector-parser/-/rst-selector-parser-2.2.3.tgz#81b230ea2fcc6066c89e3472de794285d9b03d91" - integrity sha512-nDG1rZeP6oFTLN6yNDV/uiAvs1+FS/KlrEwh7+y7dpuApDBy6bI2HTBcc0/V8lv9OTqfyD34eF7au2pm8aBbhA== - dependencies: - lodash.flattendeep "^4.4.0" - nearley "^2.7.10" - rustbn.js@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/rustbn.js/-/rustbn.js-0.2.0.tgz#8082cb886e707155fd1cb6f23bd591ab8d55d0ca" @@ -16169,7 +16131,7 @@ std-env@^3.9.0: resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.10.0.tgz#d810b27e3a073047b2b5e40034881f5ea6f9c83b" integrity sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg== -stop-iteration-iterator@^1.1.0: +stop-iteration-iterator@^1.0.0, stop-iteration-iterator@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz#f481ff70a548f6124d0312c3aa14cbfa7aa542ad" integrity sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ== @@ -16295,7 +16257,7 @@ string.prototype.repeat@^1.0.0: define-properties "^1.1.3" es-abstract "^1.17.5" -string.prototype.trim@^1.2.1, string.prototype.trim@^1.2.10: +string.prototype.trim@^1.2.10: version "1.2.10" resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz#40b2dd5ee94c959b4dcfb1d65ce72e90da480c81" integrity sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA== @@ -16410,6 +16372,13 @@ strip-hex-prefix@1.0.0: dependencies: is-hex-prefixed "1.0.0" +strip-indent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" + integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== + dependencies: + min-indent "^1.0.0" + strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" @@ -18894,7 +18863,7 @@ whatwg-url@^5.0.0: tr46 "~0.0.3" webidl-conversions "^3.0.0" -which-boxed-primitive@^1.1.0, which-boxed-primitive@^1.1.1: +which-boxed-primitive@^1.0.2, which-boxed-primitive@^1.1.0, which-boxed-primitive@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz#d76ec27df7fa165f18d5808374a5fe23c29b176e" integrity sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA== @@ -18924,7 +18893,7 @@ which-builtin-type@^1.2.1: which-collection "^1.0.2" which-typed-array "^1.1.16" -which-collection@^1.0.2: +which-collection@^1.0.1, which-collection@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.2.tgz#627ef76243920a107e7ce8e96191debe4b16c2a0" integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== @@ -18944,6 +18913,19 @@ which-module@^2.0.0: resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.1.tgz#776b1fe35d90aebe99e8ac15eb24093389a4a409" integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ== +which-typed-array@^1.1.13: + version "1.1.22" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.22.tgz#8f3cc78aefb40b437346dd40a1dbfa5d1da43fe9" + integrity sha512-fvO4ExWMFsqyhG3AiPAObMuY1lxaqgYcxbc49CNdWDDECOJNgQyvsOWVwbZc+qf3rzRtxojBK+CMEv0Ld5CYpw== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.9" + call-bound "^1.0.4" + for-each "^0.3.5" + get-proto "^1.0.1" + gopd "^1.2.0" + has-tostringtag "^1.0.2" + which-typed-array@^1.1.16, which-typed-array@^1.1.19, which-typed-array@^1.1.2: version "1.1.19" resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.19.tgz#df03842e870b6b88e117524a4b364b6fc689f956" From 745c5c83e780c1bd53b7ff0c16488d95d628adfe Mon Sep 17 00:00:00 2001 From: Jesse Clark Date: Thu, 2 Jul 2026 14:51:13 +0300 Subject: [PATCH 03/10] Upgrade React 17 to 18 Bumps react/react-dom to ^18 and @testing-library/react to ^16 (all RTL majors 13+ require React 18). src/index.js now uses createRoot and wraps the tree in . Required correctness fixes for a safe StrictMode adoption (behavior- preserving, not new features): - Ported the two componentWillReceiveProps usages (ResolveComponent, DomainStateComponent) to componentDidUpdate. - Fixed two Rules-of-Hooks violations where a hook was called conditionally inside an early-return branch (AdminTabComponent's useEffect, ErrorTabComponent's useState-as-side-effect calling rLoginConnect from within render, worse than the first since lazy initializers run during render, not after). Both moved to an unconditional hook at the top of the component with the original condition preserved inside as a guard - only the calling component's hook structure changed, not rLoginConnect's own wallet-connector logic. - Converted all 22 function-component defaultProps declarations to JS default parameters ahead of the React 18.3+ deprecation, and added `functions: 'defaultArguments'` to the airbnb react/require-default-props ESLint rule so it recognizes the new pattern instead of only the old defaultProps property. Verified with StrictMode active in dev (where double-invoke actually happens) across all main routes and the wallet-connect modal - zero hooks errors, zero wallet-connector regressions. No changes to src/app/auth/operations.js, src/app/rLogin/rLogin.js, or any other wallet-connector logic. Co-Authored-By: Claude Sonnet 5 --- .eslintrc.js | 2 +- package.json | 7 +- .../auth/components/LoginDropdownComponent.js | 6 +- src/app/auth/components/LoginFormComponent.js | 6 +- .../auth/components/SingleDomainComponent.js | 6 +- .../auth/components/StartButtonComponent.js | 13 +- src/app/components/AddressInputComponent.js | 81 ++++------ src/app/components/TextRotationComponent.js | 6 +- src/app/components/ToggleComponent.js | 20 +-- src/app/components/UserErrorComponent.js | 13 +- src/app/components/UserSuccessComponent.js | 16 +- src/app/components/UserWaitingComponent.js | 7 +- .../UserSuccessComponent.test.js.snap | 1 - src/app/routes.js | 9 +- src/app/tabs/error/ErrorTabComponent.js | 20 ++- .../home/components/SearchResultsComponent.js | 7 +- .../SearchBoxComponent.test.js.snap | 1 - .../newAdmin/components/AdminTabComponent.js | 17 +- .../newAdmin/components/ReclaimComponent.js | 6 +- .../components/DomainInfoComponent.js | 30 ++-- .../components/RenewButtonComponent.js | 14 +- .../myurl/components/MyUrlComponent.js | 6 +- .../components/ViewContractAbiComponent.js | 7 +- .../components/NewSubdomainComponent.js | 9 +- .../resolve/components/ResolutionComponent.js | 7 +- .../components/ResolveChainAddrComponent.js | 7 +- .../resolve/components/ResolveComponent.js | 11 +- .../search/components/DomainStateComponent.js | 7 +- src/index.js | 14 +- yarn.lock | 148 ++++-------------- 30 files changed, 150 insertions(+), 354 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 14fe13bd..cb574f91 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -26,7 +26,7 @@ module.exports = { rules: { 'react/jsx-filename-extension': [1, { extensions: ['.js', '.jsx'] }], 'react/destructuring-assignment': 'warn', - 'react/require-default-props': 'warn', + 'react/require-default-props': ['warn', { functions: 'defaultArguments' }], 'import/no-cycle': 'off', 'jsx-a11y/label-has-associated-control': 'off', }, diff --git a/package.json b/package.json index 4bc2bda0..5ca88ddd 100644 --- a/package.json +++ b/package.json @@ -21,10 +21,10 @@ "js-sha3": "^0.8.0", "prop-types": "^15.7.2", "query-string": "^6.2.0", - "react": "^17.0.2", + "react": "^18", "react-add-to-calendar": "^0.1.5", "react-bootstrap": "^1.0.0-beta.9", - "react-dom": "^17.0.2", + "react-dom": "^18", "react-redux": "^7.1.1", "react-router": "^5.1.2", "react-router-dom": "^5.1.2", @@ -61,8 +61,9 @@ "not op_mini all" ], "devDependencies": { + "@testing-library/dom": "^10", "@testing-library/jest-dom": "^6", - "@testing-library/react": "^12", + "@testing-library/react": "^16", "@vitejs/plugin-react": "^5.2.0", "cypress": "^6.6.0", "eslint": "^7.32.0", diff --git a/src/app/auth/components/LoginDropdownComponent.js b/src/app/auth/components/LoginDropdownComponent.js index fa6c0927..d93883d9 100644 --- a/src/app/auth/components/LoginDropdownComponent.js +++ b/src/app/auth/components/LoginDropdownComponent.js @@ -7,7 +7,7 @@ import LoginFormContainer from '../containers/LoginFormContainer'; import SingleDomainComponent from './SingleDomainComponent'; const LoginDropDownComponent = ({ - strings, name, handleLogin, authError, getPreviousDomains, isLoggedIn, isWalletConnected, + strings, name = null, handleLogin, authError, getPreviousDomains, isLoggedIn, isWalletConnected, showPopUp, toggleShowPopUp, disconnectDomain, disconnectWallet, redirectAdmin, }) => { const [previousDomains, setPreviousDomains] = useState([]); @@ -72,10 +72,6 @@ const LoginDropDownComponent = ({ ); }; -LoginDropDownComponent.defaultProps = { - name: null, -}; - LoginDropDownComponent.propTypes = { strings: propTypes.shape({ login: propTypes.string.isRequired, diff --git a/src/app/auth/components/LoginFormComponent.js b/src/app/auth/components/LoginFormComponent.js index b5958d78..446e6324 100644 --- a/src/app/auth/components/LoginFormComponent.js +++ b/src/app/auth/components/LoginFormComponent.js @@ -4,7 +4,7 @@ import { multilanguage } from 'redux-multilanguage'; import { Button } from 'react-bootstrap'; const LoginFormComponent = ({ - strings, authError, handleLogin, showLoginInitState, domainInputInitialState, + strings, authError, handleLogin, showLoginInitState, domainInputInitialState = '', }) => { const [domainInput, setDomainInput] = useState(domainInputInitialState); const [localError, setLocalError] = useState(''); @@ -60,10 +60,6 @@ const LoginFormComponent = ({ ); }; -LoginFormComponent.defaultProps = { - domainInputInitialState: '', -}; - LoginFormComponent.propTypes = { strings: propTypes.shape({ not_domains_owner_message: propTypes.string.isRequired, diff --git a/src/app/auth/components/SingleDomainComponent.js b/src/app/auth/components/SingleDomainComponent.js index 746e43fd..de43f12c 100644 --- a/src/app/auth/components/SingleDomainComponent.js +++ b/src/app/auth/components/SingleDomainComponent.js @@ -4,7 +4,7 @@ import propTypes from 'prop-types'; import { OverlayTrigger, Tooltip } from 'react-bootstrap'; const SingleDomainComponent = ({ - strings, domain, handleTextClick, handleDisconnectClick, isCurrent, + strings, domain, handleTextClick, handleDisconnectClick, isCurrent = false, }) => (
  • @@ -26,10 +26,6 @@ const SingleDomainComponent = ({
  • ); -SingleDomainComponent.defaultProps = { - isCurrent: false, -}; - SingleDomainComponent.propTypes = { domain: propTypes.string.isRequired, handleTextClick: propTypes.func.isRequired, diff --git a/src/app/auth/components/StartButtonComponent.js b/src/app/auth/components/StartButtonComponent.js index 4d46ee77..1a65de74 100644 --- a/src/app/auth/components/StartButtonComponent.js +++ b/src/app/auth/components/StartButtonComponent.js @@ -5,11 +5,9 @@ import { } from 'react-bootstrap'; import { multilanguage } from 'redux-multilanguage'; -const StartButtonComponent = (props) => { - const { - strings, open, user, isOwner, domain, address, - } = props; - +const StartButtonComponent = ({ + strings, open, user, isOwner, domain = null, address = null, +}) => { const className = 'start my-2 my-sm-0'; if (!address) { @@ -54,9 +52,4 @@ StartButtonComponent.propTypes = { address: propTypes.string, }; -StartButtonComponent.defaultProps = { - domain: null, - address: null, -}; - export default multilanguage(StartButtonComponent); diff --git a/src/app/components/AddressInputComponent.js b/src/app/components/AddressInputComponent.js index 30d48a94..d5a9ffc2 100644 --- a/src/app/components/AddressInputComponent.js +++ b/src/app/components/AddressInputComponent.js @@ -16,25 +16,40 @@ import closeBlue from '../../assets/img/close-blue.svg'; import settings from '../../assets/img/settings.svg'; const AddressInputComponent = ({ - allowDelete, - allowRsk, + allowDelete = true, + allowRsk = false, label, - labelDisplay, - labelIcon, + labelDisplay = null, + labelIcon = null, value, - isWaiting, - isError, - handleErrorClose, - handleSuccessClose, + isWaiting = false, + isError = false, + handleErrorClose = () => {}, + handleSuccessClose = () => {}, handleSubmit, - handleDelete, - isSuccess, - strings, - successTx, - validationChainId, - validation, - suggestions, - settingsMenu, + handleDelete = () => {}, + isSuccess = false, + strings = { + cancel: 'Cancel', + delete: 'Delete', + delete_confirm_text: 'Are you sure you want to delete?', + edit: 'Edit', + edit_placeholder: 'enter address', + edit_propmt: 'Change ownership', + error_title: 'Error Title', + error_message: 'Error Message', + submit: 'Submit', + success_title: 'Success Title', + success_message: 'Success Message', + value_prefix: 'Owner', + waiting: 'Waiting text', + suggestion: '', + }, + successTx = '', + validationChainId = null, + validation = true, + suggestions = [], + settingsMenu = null, }) => { const [isEditing, setIsEditing] = useState(false); const [isDeleting, setIsDeleting] = useState(false); @@ -264,40 +279,6 @@ const AddressInputComponent = ({ ); }; -AddressInputComponent.defaultProps = { - allowDelete: true, - allowRsk: false, - isError: false, - isWaiting: false, - isSuccess: false, - successTx: '', - validation: true, - validationChainId: null, - strings: { - cancel: 'Cancel', - delete: 'Delete', - delete_confirm_text: 'Are you sure you want to delete?', - edit: 'Edit', - edit_placeholder: 'enter address', - edit_propmt: 'Change ownership', - error_title: 'Error Title', - error_message: 'Error Message', - submit: 'Submit', - success_title: 'Success Title', - success_message: 'Success Message', - value_prefix: 'Owner', - waiting: 'Waiting text', - suggestion: '', - }, - handleDelete: () => {}, - handleErrorClose: () => {}, - handleSuccessClose: () => {}, - labelDisplay: null, - labelIcon: null, - suggestions: [], - settingsMenu: null, -}; - AddressInputComponent.propTypes = { allowDelete: propTypes.bool, allowRsk: propTypes.bool, diff --git a/src/app/components/TextRotationComponent.js b/src/app/components/TextRotationComponent.js index 1363ed67..56a8dcbc 100644 --- a/src/app/components/TextRotationComponent.js +++ b/src/app/components/TextRotationComponent.js @@ -2,7 +2,7 @@ import React, { useEffect, useState } from 'react'; import propTypes from 'prop-types'; const TextRotationComponent = ({ - heading, language, messages, timer, + heading, language, messages, timer = 1000, }) => { const [counter, setCounter] = useState(0); const updateCounter = () => { @@ -52,10 +52,6 @@ const TextRotationComponent = ({ ); }; -TextRotationComponent.defaultProps = { - timer: 1000, -}; - TextRotationComponent.propTypes = { language: propTypes.string.isRequired, heading: propTypes.string.isRequired, diff --git a/src/app/components/ToggleComponent.js b/src/app/components/ToggleComponent.js index 9d246239..20f74578 100644 --- a/src/app/components/ToggleComponent.js +++ b/src/app/components/ToggleComponent.js @@ -2,14 +2,12 @@ import React from 'react'; import propTypes from 'prop-types'; -const ToggleComponent = (props) => { - const { - labelLeft, - labelRight, - onChange, - value, - } = props; - +const ToggleComponent = ({ + labelLeft = 'leftLabel', + labelRight = 'rightLabel', + onChange, + value = false, +}) => { const handleChange = (changeTo) => { onChange(changeTo); }; @@ -43,12 +41,6 @@ const ToggleComponent = (props) => { ); }; -ToggleComponent.defaultProps = { - labelLeft: 'leftLabel', - labelRight: 'rightLabel', - value: false, -}; - ToggleComponent.propTypes = { labelLeft: propTypes.string, labelRight: propTypes.string, diff --git a/src/app/components/UserErrorComponent.js b/src/app/components/UserErrorComponent.js index 6691725a..ab462616 100644 --- a/src/app/components/UserErrorComponent.js +++ b/src/app/components/UserErrorComponent.js @@ -10,7 +10,11 @@ import { TRANSACTION_RECEIPT_FAILED } from '../types'; import closeRed from '../../assets/img/close-red.svg'; const UserErrorComponent = ({ - title, message, handleCloseClick, strings, visible, + title = 'Error', + message = 'Error Message', + handleCloseClick = () => {}, + strings, + visible = true, }) => { if (!visible) { return (<>); @@ -41,13 +45,6 @@ const UserErrorComponent = ({ ); }; -UserErrorComponent.defaultProps = { - title: 'Error', - message: 'Error Message', - handleCloseClick: () => {}, - visible: true, -}; - UserErrorComponent.propTypes = { strings: propTypes.shape({ close: propTypes.string.isRequired, diff --git a/src/app/components/UserSuccessComponent.js b/src/app/components/UserSuccessComponent.js index c242a655..995a2ccd 100644 --- a/src/app/components/UserSuccessComponent.js +++ b/src/app/components/UserSuccessComponent.js @@ -6,8 +6,12 @@ import closeBlue from '../../assets/img/close-blue.svg'; import blueCheck from '../../assets/img/check-blue.svg'; const UserSuccessComponent = ({ - strings, title, message, handleCloseClick, address, - visible, + strings, + title = 'Success', + message = 'Success Message', + handleCloseClick = () => {}, + address = '', + visible = true, }) => { if (!visible) { return (<>); @@ -42,14 +46,6 @@ const UserSuccessComponent = ({ ); }; -UserSuccessComponent.defaultProps = { - title: 'Success', - message: 'Success Message', - handleCloseClick: () => {}, - address: '', - visible: true, -}; - UserSuccessComponent.propTypes = { strings: propTypes.shape({ close: propTypes.string.isRequired, diff --git a/src/app/components/UserWaitingComponent.js b/src/app/components/UserWaitingComponent.js index 3575923b..9fd5d021 100644 --- a/src/app/components/UserWaitingComponent.js +++ b/src/app/components/UserWaitingComponent.js @@ -2,7 +2,7 @@ import React from 'react'; import propTypes from 'prop-types'; import { Loader } from 'rimble-ui'; -const UserWaitingComponent = ({ message, visible }) => { +const UserWaitingComponent = ({ message = '', visible = true }) => { if (!visible) { return (<>); } @@ -17,11 +17,6 @@ const UserWaitingComponent = ({ message, visible }) => { ); }; -UserWaitingComponent.defaultProps = { - message: '', - visible: true, -}; - UserWaitingComponent.propTypes = { message: propTypes.string, visible: propTypes.bool, diff --git a/src/app/components/__snapshots__/UserSuccessComponent.test.js.snap b/src/app/components/__snapshots__/UserSuccessComponent.test.js.snap index afeaf2f9..e3a99cdc 100644 --- a/src/app/components/__snapshots__/UserSuccessComponent.test.js.snap +++ b/src/app/components/__snapshots__/UserSuccessComponent.test.js.snap @@ -28,7 +28,6 @@ exports[`UserSuccessComponent > renders and matches snapshot 1`] = `

    Success Message

    - `; diff --git a/src/app/routes.js b/src/app/routes.js index f2ea3e99..dc035a1a 100644 --- a/src/app/routes.js +++ b/src/app/routes.js @@ -13,9 +13,7 @@ import { FaqTab, } from './tabs'; -const Routes = (props) => { - const { networkMatch, walletUnlocked, hasContracts } = props; - +const Routes = ({ networkMatch = false, walletUnlocked = false, hasContracts }) => { const notLoggedIn = !window.rLogin || !networkMatch || !walletUnlocked; return ( @@ -40,11 +38,6 @@ const Routes = (props) => { ); }; -Routes.defaultProps = { - networkMatch: false, - walletUnlocked: false, -}; - Routes.propTypes = { networkMatch: propTypes.bool, walletUnlocked: propTypes.bool, diff --git a/src/app/tabs/error/ErrorTabComponent.js b/src/app/tabs/error/ErrorTabComponent.js index 69ead15c..283f4f85 100644 --- a/src/app/tabs/error/ErrorTabComponent.js +++ b/src/app/tabs/error/ErrorTabComponent.js @@ -1,4 +1,4 @@ -import React, { useState } from 'react'; +import React, { useEffect } from 'react'; import { multilanguage } from 'redux-multilanguage'; import propTypes from 'prop-types'; import { @@ -16,9 +16,15 @@ const ContainerWrapper = ({ children }) => ( ); const ErrorTabComponent = ({ - hasWeb3Provider, hasContracts, walletNetwork, envNetwork, - walletUnlocked, rLoginConnect, strings, notFound, + hasWeb3Provider, hasContracts, walletNetwork = '', envNetwork, + walletUnlocked, rLoginConnect, strings, notFound = false, }) => { + useEffect(() => { + if (!notFound && hasContracts && hasWeb3Provider && !walletUnlocked) { + rLoginConnect(); + } + }, []); + if (notFound) { return ( @@ -50,9 +56,6 @@ const ErrorTabComponent = ({ ); } if (!walletUnlocked) { - useState(() => { - rLoginConnect(); - }, []); return ( rsk_wallet @@ -85,11 +88,6 @@ ContainerWrapper.propTypes = ({ children: propTypes.node.isRequired, }); -ErrorTabComponent.defaultProps = { - walletNetwork: '', - notFound: false, -}; - ErrorTabComponent.propTypes = { hasWeb3Provider: propTypes.bool.isRequired, hasContracts: propTypes.bool.isRequired, diff --git a/src/app/tabs/home/components/SearchResultsComponent.js b/src/app/tabs/home/components/SearchResultsComponent.js index e5796ed0..097ce7f7 100644 --- a/src/app/tabs/home/components/SearchResultsComponent.js +++ b/src/app/tabs/home/components/SearchResultsComponent.js @@ -6,7 +6,7 @@ import { Loader } from 'rimble-ui'; import { Button, Row, Col } from 'react-bootstrap'; const SearchResultsComponent = ({ - strings, domain, available, blocked, isSearching, rifCost, handleClick, + strings, domain = undefined, available, blocked = undefined, isSearching, rifCost, handleClick, }) => { if (!domain) { return <>; @@ -88,11 +88,6 @@ const SearchResultsComponent = ({ ); }; -SearchResultsComponent.defaultProps = { - domain: undefined, - blocked: undefined, -}; - SearchResultsComponent.propTypes = { strings: propTypes.shape({ results: propTypes.string.isRequired, diff --git a/src/app/tabs/home/components/__snapshots__/SearchBoxComponent.test.js.snap b/src/app/tabs/home/components/__snapshots__/SearchBoxComponent.test.js.snap index d1005bbb..f8578063 100644 --- a/src/app/tabs/home/components/__snapshots__/SearchBoxComponent.test.js.snap +++ b/src/app/tabs/home/components/__snapshots__/SearchBoxComponent.test.js.snap @@ -30,6 +30,5 @@ exports[`SearchBoxComponent > renders and matches snapshot 1`] = ` - `; diff --git a/src/app/tabs/newAdmin/components/AdminTabComponent.js b/src/app/tabs/newAdmin/components/AdminTabComponent.js index a408d25f..5042d2ce 100644 --- a/src/app/tabs/newAdmin/components/AdminTabComponent.js +++ b/src/app/tabs/newAdmin/components/AdminTabComponent.js @@ -23,20 +23,20 @@ const AdminComponent = ({ strings, toggleAdvancedBasic, advancedView, - domain, + domain = '', isRegistryOwner, enabling, start, - isExpired, + isExpired = false, }) => { + useEffect(() => { + if (domain) start(); + }, []); + if (enabling) { return ; } - if (domain) { - useEffect(() => start(), []); - } - if (isExpired) { return ; } @@ -78,11 +78,6 @@ const AdminComponent = ({ ); }; -AdminComponent.defaultProps = { - domain: '', - isExpired: false, -}; - AdminComponent.propTypes = { strings: propTypes.shape({ admin: propTypes.string.isRequired, diff --git a/src/app/tabs/newAdmin/components/ReclaimComponent.js b/src/app/tabs/newAdmin/components/ReclaimComponent.js index 7b000f81..e1ce5177 100644 --- a/src/app/tabs/newAdmin/components/ReclaimComponent.js +++ b/src/app/tabs/newAdmin/components/ReclaimComponent.js @@ -7,7 +7,7 @@ import { UserWaitingComponent, UserErrorComponent } from '../../../components'; const ReclaimComponent = ({ strings, reclaimDomain, isError, errorMessage, handleCloseClick, isSettingRegistryOwner, - isDomainInfo, domain, registryOwner, + isDomainInfo = false, domain, registryOwner, }) => (
    @@ -60,10 +60,6 @@ const ReclaimComponent = ({
    ); -ReclaimComponent.defaultProps = { - isDomainInfo: false, -}; - ReclaimComponent.propTypes = { strings: propTypes.shape({ set_controller: propTypes.string.isRequired, diff --git a/src/app/tabs/newAdmin/domainInfo/components/DomainInfoComponent.js b/src/app/tabs/newAdmin/domainInfo/components/DomainInfoComponent.js index 75df4393..ecf4fd7c 100644 --- a/src/app/tabs/newAdmin/domainInfo/components/DomainInfoComponent.js +++ b/src/app/tabs/newAdmin/domainInfo/components/DomainInfoComponent.js @@ -14,20 +14,18 @@ import { SetControllerViewContainer, } from '../containers'; -const DomainInfoComponent = (props) => { - const { - strings, - domain, - isSubdomain, - isTransferSuccess, - isTokenOwner, - checkingRegistryOwner, - checkingOwnership, - isRegistryOwner, - isFifsMigrated, - isWalletConnect, - } = props; - +const DomainInfoComponent = ({ + strings, + domain, + isSubdomain, + isTransferSuccess, + isTokenOwner = false, + checkingRegistryOwner, + checkingOwnership, + isRegistryOwner, + isFifsMigrated, + isWalletConnect, +}) => { if (isTransferSuccess) { return ( @@ -86,10 +84,6 @@ const DomainInfoComponent = (props) => { ); }; -DomainInfoComponent.defaultProps = { - isTokenOwner: false, -}; - DomainInfoComponent.propTypes = { strings: propTypes.shape({ cancel: propTypes.string.isRequired, diff --git a/src/app/tabs/newAdmin/domainInfo/components/RenewButtonComponent.js b/src/app/tabs/newAdmin/domainInfo/components/RenewButtonComponent.js index 0dd6c67d..81044f04 100644 --- a/src/app/tabs/newAdmin/domainInfo/components/RenewButtonComponent.js +++ b/src/app/tabs/newAdmin/domainInfo/components/RenewButtonComponent.js @@ -6,12 +6,10 @@ import { Button } from 'react-bootstrap'; import { dayMath, formatDate } from '../../helpers'; -const RenewButtonComponent = (props) => { - const { - expires, handleClick, checkingExpirationTime, isRenewOpen, - strings, isFifsMigrated, - } = props; - +const RenewButtonComponent = ({ + expires = 0, handleClick, checkingExpirationTime, isRenewOpen, + strings, isFifsMigrated, +}) => { const disable = (checkingExpirationTime || expires <= 0 || !isFifsMigrated); return ( @@ -25,10 +23,6 @@ const RenewButtonComponent = (props) => { ); }; -RenewButtonComponent.defaultProps = { - expires: 0, -}; - RenewButtonComponent.propTypes = { expires: propTypes.number, checkingExpirationTime: propTypes.bool.isRequired, diff --git a/src/app/tabs/newAdmin/myurl/components/MyUrlComponent.js b/src/app/tabs/newAdmin/myurl/components/MyUrlComponent.js index 33f0ba69..ddd57a9b 100644 --- a/src/app/tabs/newAdmin/myurl/components/MyUrlComponent.js +++ b/src/app/tabs/newAdmin/myurl/components/MyUrlComponent.js @@ -7,7 +7,7 @@ import AddressInputComponent from '../../../../components/AddressInputComponent' import MigrateToMultiResolverContainer from '../../addresses/containers/MigrateToMultiResolverContainer'; const MyUrlComponent = ({ - strings, url, gettingContent, handleSave, + strings, url = null, gettingContent, handleSave, }) => { const [newInput, setNewInput] = useState(''); const contentHashPlaceholder = 'ipfs://..., ipns://..., bzz://..., onion://..., onion3://...'; @@ -77,10 +77,6 @@ const MyUrlComponent = ({ ); }; -MyUrlComponent.defaultProps = { - url: null, -}; - MyUrlComponent.propTypes = { strings: propTypes.shape().isRequired, url: propTypes.shape(), diff --git a/src/app/tabs/newAdmin/resolver/components/ViewContractAbiComponent.js b/src/app/tabs/newAdmin/resolver/components/ViewContractAbiComponent.js index adcecfb9..961597c1 100644 --- a/src/app/tabs/newAdmin/resolver/components/ViewContractAbiComponent.js +++ b/src/app/tabs/newAdmin/resolver/components/ViewContractAbiComponent.js @@ -13,7 +13,7 @@ import editActive from '../../../../../assets/img/edit-active.svg'; import closeBlue from '../../../../../assets/img/close-blue.svg'; const ViewContractAbiComponent = ({ - strings, value, handleClick, isWaiting, errorMessage, handleCloseClick, successTx, + strings, value, handleClick, isWaiting, errorMessage = null, handleCloseClick, successTx = null, prettyJson, }) => { const [isEditing, setIsEditing] = useState(false); @@ -136,11 +136,6 @@ const ViewContractAbiComponent = ({ ); }; -ViewContractAbiComponent.defaultProps = { - errorMessage: null, - successTx: null, -}; - ViewContractAbiComponent.propTypes = { strings: propTypes.shape({ contract_abi: propTypes.string.isRequired, diff --git a/src/app/tabs/newAdmin/subdomains/components/NewSubdomainComponent.js b/src/app/tabs/newAdmin/subdomains/components/NewSubdomainComponent.js index c08a3363..1ad1064a 100644 --- a/src/app/tabs/newAdmin/subdomains/components/NewSubdomainComponent.js +++ b/src/app/tabs/newAdmin/subdomains/components/NewSubdomainComponent.js @@ -24,8 +24,8 @@ const NewSubdomainComponent = ({ confirmedTx, newRequesting, newWaiting, - initialSubdomain, - initialOwner, + initialSubdomain = '', + initialOwner = '', chainId, advancedView, isWalletConnect, @@ -201,11 +201,6 @@ const NewSubdomainComponent = ({ ); }; -NewSubdomainComponent.defaultProps = { - initialSubdomain: '', - initialOwner: '', -}; - NewSubdomainComponent.propTypes = { strings: propTypes.shape({ admin_your_domain_action_3: propTypes.string.isRequired, diff --git a/src/app/tabs/resolve/components/ResolutionComponent.js b/src/app/tabs/resolve/components/ResolutionComponent.js index b9c1c469..fc6dcee5 100644 --- a/src/app/tabs/resolve/components/ResolutionComponent.js +++ b/src/app/tabs/resolve/components/ResolutionComponent.js @@ -9,7 +9,7 @@ import { } from '../../../components'; const ResolutionComponent = ({ - error, loading, value, strings, + error = null, loading, value = null, strings, }) => { if (error) { return ; @@ -48,9 +48,4 @@ ResolutionComponent.propTypes = { }).isRequired, }; -ResolutionComponent.defaultProps = { - error: null, - value: null, -}; - export default multilanguage(ResolutionComponent); diff --git a/src/app/tabs/resolve/components/ResolveChainAddrComponent.js b/src/app/tabs/resolve/components/ResolveChainAddrComponent.js index d0c9898f..5a89c1da 100644 --- a/src/app/tabs/resolve/components/ResolveChainAddrComponent.js +++ b/src/app/tabs/resolve/components/ResolveChainAddrComponent.js @@ -6,7 +6,7 @@ import ResolutionComponent from './ResolutionComponent'; import networks from '../../newAdmin/addresses/networks.json'; const ResolveChainAddr = ({ - strings, loading, error, value, getChainAddr, hasMulticoin, + strings, loading, error = null, value = null, getChainAddr, hasMulticoin, }) => { const [selectedChain, setSelectedChain] = useState(''); const handleChange = (e) => { @@ -68,9 +68,4 @@ ResolveChainAddr.propTypes = { hasMulticoin: propTypes.bool.isRequired, }; -ResolveChainAddr.defaultProps = { - error: null, - value: null, -}; - export default multilanguage(ResolveChainAddr); diff --git a/src/app/tabs/resolve/components/ResolveComponent.js b/src/app/tabs/resolve/components/ResolveComponent.js index c1eb52ee..ed288489 100644 --- a/src/app/tabs/resolve/components/ResolveComponent.js +++ b/src/app/tabs/resolve/components/ResolveComponent.js @@ -76,14 +76,15 @@ class ResolveComponent extends Component { } } - componentWillReceiveProps(newProps) { - const { name, error } = this.props; + componentDidUpdate(prevProps) { + const { name, error, resolve } = this.props; - if (name !== newProps.name) { - newProps.resolve(); + if (name !== prevProps.name) { + resolve(); } - if (error !== newProps.error) { + if (error !== prevProps.error) { + // eslint-disable-next-line react/no-did-update-set-state this.setState({ showError: true }); } } diff --git a/src/app/tabs/search/components/DomainStateComponent.js b/src/app/tabs/search/components/DomainStateComponent.js index 0dda9301..0ec4856d 100644 --- a/src/app/tabs/search/components/DomainStateComponent.js +++ b/src/app/tabs/search/components/DomainStateComponent.js @@ -76,10 +76,9 @@ class DomainStateComponent extends Component { if (domain && getState) getState(domain); } - componentWillReceiveProps(newProps) { - const { getState } = newProps; - const { domain } = this.props; - if (domain !== newProps.domain) getState(newProps.domain); + componentDidUpdate(prevProps) { + const { getState, domain } = this.props; + if (domain !== prevProps.domain) getState(domain); } onSearch(event) { diff --git a/src/index.js b/src/index.js index cc28f961..d4bfa3f0 100755 --- a/src/index.js +++ b/src/index.js @@ -1,5 +1,5 @@ import React from 'react'; -import { render } from 'react-dom'; +import { createRoot } from 'react-dom/client'; import { Provider } from 'react-redux'; import configureStore, { history } from './configureStore'; import App from './app'; @@ -13,11 +13,13 @@ import './assets/css/sass/_index.scss'; const store = configureStore(); -render( - - - , - document.getElementById('root'), +const root = createRoot(document.getElementById('root')); +root.render( + + + + + , ); serviceWorker.unregister(); diff --git a/yarn.lock b/yarn.lock index 06cdfd60..92e78068 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3810,18 +3810,18 @@ dependencies: defer-to-connect "^2.0.1" -"@testing-library/dom@^8.0.0": - version "8.20.1" - resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-8.20.1.tgz#2e52a32e46fc88369eef7eef634ac2a192decd9f" - integrity sha512-/DiOQ5xBxgdYRC8LNk7U+RWat0S3qRLeIw3ZIkMQ9kkVlRmwD/Eg8k8CqIpD6GW7u20JIUOfMKbxtiLutpjQ4g== +"@testing-library/dom@^10": + version "10.4.1" + resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-10.4.1.tgz#d444f8a889e9a46e9a3b4f3b88e0fcb3efb6cf95" + integrity sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg== dependencies: "@babel/code-frame" "^7.10.4" "@babel/runtime" "^7.12.5" "@types/aria-query" "^5.0.1" - aria-query "5.1.3" - chalk "^4.1.0" + aria-query "5.3.0" dom-accessibility-api "^0.5.9" lz-string "^1.5.0" + picocolors "1.1.1" pretty-format "^27.0.2" "@testing-library/jest-dom@^6": @@ -3836,14 +3836,12 @@ picocolors "^1.1.1" redent "^3.0.0" -"@testing-library/react@^12": - version "12.1.5" - resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-12.1.5.tgz#bb248f72f02a5ac9d949dea07279095fa577963b" - integrity sha512-OfTXCJUFgjd/digLUuPxa0+/3ZxsQmE7ub9kcbW/wi96Bh3o/p5vrETcBGfP17NWPGqeYYl5LTRpwyGoMC4ysg== +"@testing-library/react@^16": + version "16.3.2" + resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-16.3.2.tgz#672883b7acb8e775fc0492d9e9d25e06e89786d0" + integrity sha512-XU5/SytQM+ykqMnAnvB2umaJNIOsLF3PVv//1Ew4CTcpz0/BRyy/af40qqrt7SjKpDdT1saBMc42CUok5gaw+g== dependencies: "@babel/runtime" "^7.12.5" - "@testing-library/dom" "^8.0.0" - "@types/react-dom" "<18.0.0" "@tootallnate/once@1": version "1.1.2" @@ -4533,11 +4531,6 @@ resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb" integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== -"@types/react-dom@<18.0.0": - version "17.0.26" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-17.0.26.tgz#fa7891ba70fd39ddbaa7e85b6ff9175bb546bc1b" - integrity sha512-Z+2VcYXJwOqQ79HreLU/1fyQ88eXSSFh6I3JdrEHQIfYSI0kCQpTGvOrbE6jFGGYXKsHuwY9tBa/w5Uo6KzrEg== - "@types/react-redux@^7.1.20": version "7.1.34" resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-7.1.34.tgz#83613e1957c481521e6776beeac4fd506d11bd0e" @@ -5373,12 +5366,12 @@ argsarray@0.0.1: resolved "https://registry.yarnpkg.com/argsarray/-/argsarray-0.0.1.tgz#6e7207b4ecdb39b0af88303fa5ae22bda8df61cb" integrity sha512-u96dg2GcAKtpTrBdDoFIM7PjcBA+6rSP0OR94MOReNRyUECL6MtQt5XXmRr4qrftYaef9+l5hcpO5te7sML1Cg== -aria-query@5.1.3: - version "5.1.3" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.1.3.tgz#19db27cd101152773631396f7a95a3b58c22c35e" - integrity sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ== +aria-query@5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.0.tgz#650c569e41ad90b51b3d7df5e5eed1c7549c103e" + integrity sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A== dependencies: - deep-equal "^2.0.5" + dequal "^2.0.3" aria-query@^5.0.0, aria-query@^5.3.2: version "5.3.2" @@ -5407,7 +5400,7 @@ arr-union@^3.1.0: resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" integrity sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q== -array-buffer-byte-length@^1.0.0, array-buffer-byte-length@^1.0.1, array-buffer-byte-length@^1.0.2: +array-buffer-byte-length@^1.0.1, array-buffer-byte-length@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz#384d12a37295aec3769ab022ad323a18a51ccf8b" integrity sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw== @@ -6381,7 +6374,7 @@ call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.7, call-bind@^1.0.8: get-intrinsic "^1.2.4" set-function-length "^1.2.2" -call-bind@^1.0.5, call-bind@^1.0.9: +call-bind@^1.0.9: version "1.0.9" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.9.tgz#39a644700c80bc7d0ca9102fc6d1d43b2fd7eee7" integrity sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ== @@ -7663,30 +7656,6 @@ deep-eql@^5.0.1: resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-5.0.2.tgz#4b756d8d770a9257300825d52a2c2cff99c3a341" integrity sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q== -deep-equal@^2.0.5: - version "2.2.3" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.2.3.tgz#af89dafb23a396c7da3e862abc0be27cf51d56e1" - integrity sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA== - dependencies: - array-buffer-byte-length "^1.0.0" - call-bind "^1.0.5" - es-get-iterator "^1.1.3" - get-intrinsic "^1.2.2" - is-arguments "^1.1.1" - is-array-buffer "^3.0.2" - is-date-object "^1.0.5" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" - isarray "^2.0.5" - object-is "^1.1.5" - object-keys "^1.1.1" - object.assign "^4.1.4" - regexp.prototype.flags "^1.5.1" - side-channel "^1.0.4" - which-boxed-primitive "^1.0.2" - which-collection "^1.0.1" - which-typed-array "^1.1.13" - deep-extend@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" @@ -8354,21 +8323,6 @@ es-errors@^1.3.0: resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== -es-get-iterator@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.3.tgz#3ef87523c5d464d41084b2c3c9c214f1199763d6" - integrity sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.3" - has-symbols "^1.0.3" - is-arguments "^1.1.1" - is-map "^2.0.2" - is-set "^2.0.2" - is-string "^1.0.7" - isarray "^2.0.5" - stop-iteration-iterator "^1.0.0" - es-iterator-helpers@^1.2.1: version "1.3.3" resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.3.3.tgz#0a229dc38ada0450b8cfaa85809fd73dbb34113c" @@ -10101,7 +10055,7 @@ get-caller-file@^2.0.1, get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.1.3, get-intrinsic@^1.2.2, get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.2.7, get-intrinsic@^1.3.0: +get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.2.7, get-intrinsic@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== @@ -10913,7 +10867,7 @@ is-accessor-descriptor@^1.0.1: dependencies: hasown "^2.0.0" -is-arguments@^1.0.4, is-arguments@^1.1.1: +is-arguments@^1.0.4: version "1.2.0" resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.2.0.tgz#ad58c6aecf563b78ef2bf04df540da8f5d7d8e1b" integrity sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA== @@ -10921,7 +10875,7 @@ is-arguments@^1.0.4, is-arguments@^1.1.1: call-bound "^1.0.2" has-tostringtag "^1.0.2" -is-array-buffer@^3.0.2, is-array-buffer@^3.0.4, is-array-buffer@^3.0.5: +is-array-buffer@^3.0.4, is-array-buffer@^3.0.5: version "3.0.5" resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.5.tgz#65742e1e687bd2cc666253068fd8707fe4d44280" integrity sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A== @@ -11181,7 +11135,7 @@ is-lower-case@^1.1.0: dependencies: lower-case "^1.1.0" -is-map@^2.0.2, is-map@^2.0.3: +is-map@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e" integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== @@ -11295,7 +11249,7 @@ is-promise@^2.1.0: resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1" integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ== -is-regex@^1.1.4, is-regex@^1.2.1: +is-regex@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.2.1.tgz#76d70a3ed10ef9be48eb577887d74205bf0cad22" integrity sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g== @@ -11315,12 +11269,12 @@ is-retry-allowed@^3.0.0: resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-3.0.0.tgz#ea79389fd350d156823c491bee9c69f485b1445c" integrity sha512-9xH0xvoggby+u0uGF7cZXdrutWiBiaFG8ZT4YFPXL8NzkyAwX3AKGLeFQLvzDpM430+nDFBZ1LHkie/8ocL06A== -is-set@^2.0.2, is-set@^2.0.3: +is-set@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d" integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg== -is-shared-array-buffer@^1.0.2, is-shared-array-buffer@^1.0.4: +is-shared-array-buffer@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz#9b67844bd9b7f246ba0708c3a93e34269c774f6f" integrity sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A== @@ -11342,7 +11296,7 @@ is-stream@^2.0.0: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== -is-string@^1.0.7, is-string@^1.1.1: +is-string@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.1.1.tgz#92ea3f3d5c5b6e039ca8677e5ac8d07ea773cbb9" integrity sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA== @@ -13888,7 +13842,7 @@ performance-now@^2.1.0: resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== -picocolors@^1.0.0, picocolors@^1.1.1: +picocolors@1.1.1, picocolors@^1.0.0, picocolors@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== @@ -14587,7 +14541,7 @@ react-bootstrap@^1.0.0-beta.9: uncontrollable "^7.2.1" warning "^4.0.3" -react-dom@18.3.1: +react-dom@18.3.1, react-dom@^18: version "18.3.1" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.3.1.tgz#c2265d79511b57d479b3dd3fdfa51536494c5cb4" integrity sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw== @@ -14605,15 +14559,6 @@ react-dom@^16.8.6: prop-types "^15.6.2" scheduler "^0.19.1" -react-dom@^17.0.2: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23" - integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - scheduler "^0.20.2" - react-i18next@^11.11.4: version "11.18.6" resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-11.18.6.tgz#e159c2960c718c1314f1e8fcaa282d1c8b167887" @@ -14718,7 +14663,7 @@ react-zlib-js@^1.0.4: resolved "https://registry.yarnpkg.com/react-zlib-js/-/react-zlib-js-1.0.5.tgz#7bb433e1a4ae53a8e6f361b3d36166baf5bbc60f" integrity sha512-TLcPdmqhIl+ylwOwlfm1WUuI7NVvhAv3L74d1AabhjyaAbmLOROTA/Q4EQ/UMCFCOjIkVim9fT3UZOQSFk/mlA== -react@18.3.1: +react@18.3.1, react@^18: version "18.3.1" resolved "https://registry.yarnpkg.com/react/-/react-18.3.1.tgz#49ab892009c53933625bd16b2533fc754cab2891" integrity sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ== @@ -14734,14 +14679,6 @@ react@^16.8.6: object-assign "^4.1.1" prop-types "^15.6.2" -react@^17.0.2: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" - integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - read-pkg-up@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" @@ -14968,7 +14905,7 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" -regexp.prototype.flags@^1.5.1, regexp.prototype.flags@^1.5.3, regexp.prototype.flags@^1.5.4: +regexp.prototype.flags@^1.5.3, regexp.prototype.flags@^1.5.4: version "1.5.4" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz#1ad6c62d44a259007e55b3970e00f746efbcaa19" integrity sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA== @@ -15445,14 +15382,6 @@ scheduler@^0.19.1: loose-envify "^1.1.0" object-assign "^4.1.1" -scheduler@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91" - integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - scheduler@^0.23.2: version "0.23.2" resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.2.tgz#414ba64a3b282892e944cf2108ecc078d115cdc3" @@ -16131,7 +16060,7 @@ std-env@^3.9.0: resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.10.0.tgz#d810b27e3a073047b2b5e40034881f5ea6f9c83b" integrity sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg== -stop-iteration-iterator@^1.0.0, stop-iteration-iterator@^1.1.0: +stop-iteration-iterator@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz#f481ff70a548f6124d0312c3aa14cbfa7aa542ad" integrity sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ== @@ -18863,7 +18792,7 @@ whatwg-url@^5.0.0: tr46 "~0.0.3" webidl-conversions "^3.0.0" -which-boxed-primitive@^1.0.2, which-boxed-primitive@^1.1.0, which-boxed-primitive@^1.1.1: +which-boxed-primitive@^1.1.0, which-boxed-primitive@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz#d76ec27df7fa165f18d5808374a5fe23c29b176e" integrity sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA== @@ -18893,7 +18822,7 @@ which-builtin-type@^1.2.1: which-collection "^1.0.2" which-typed-array "^1.1.16" -which-collection@^1.0.1, which-collection@^1.0.2: +which-collection@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.2.tgz#627ef76243920a107e7ce8e96191debe4b16c2a0" integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== @@ -18913,19 +18842,6 @@ which-module@^2.0.0: resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.1.tgz#776b1fe35d90aebe99e8ac15eb24093389a4a409" integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ== -which-typed-array@^1.1.13: - version "1.1.22" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.22.tgz#8f3cc78aefb40b437346dd40a1dbfa5d1da43fe9" - integrity sha512-fvO4ExWMFsqyhG3AiPAObMuY1lxaqgYcxbc49CNdWDDECOJNgQyvsOWVwbZc+qf3rzRtxojBK+CMEv0Ld5CYpw== - dependencies: - available-typed-arrays "^1.0.7" - call-bind "^1.0.9" - call-bound "^1.0.4" - for-each "^0.3.5" - get-proto "^1.0.1" - gopd "^1.2.0" - has-tostringtag "^1.0.2" - which-typed-array@^1.1.16, which-typed-array@^1.1.19, which-typed-array@^1.1.2: version "1.1.19" resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.19.tgz#df03842e870b6b88e117524a4b364b6fc689f956" From f6b518336d7e1cb622912d91c6baaecd0d6a3783 Mon Sep 17 00:00:00 2001 From: Jesse Clark Date: Thu, 2 Jul 2026 17:40:18 +0300 Subject: [PATCH 04/10] Migrate router from react-router v5 + connected-react-router to v6 connected-react-router is unmaintained and has no react-router v6 compatibility path. Its Redux integration turned out to be almost entirely inert plumbing - no reducer ever consumed its LOCATION_CHANGE action; the router slice existed only so components could read location off Redux instead of react-router's own APIs. - react-router/react-router-dom bumped to ^6.30.4, history to ^5.3.0, connected-react-router removed entirely. - App already had a shared `history` singleton (needed for navigating from Redux thunks); wired it into v6 via `unstable_HistoryRouter` instead of `ConnectedRouter`, so all 13 `dispatch(push(path))` call sites became direct `history.push(path)` calls with zero change to when/where navigation happens. - 10 files reading `state.router.location.*` (plus 3 more discovered during implementation via a shared `getSearch` selector with more consumers than the initial grep found) now get location via `useLocation()`, wrapped so the existing mapStateToProps(state, ownProps) shape didn't need restructuring. - `routes.js` and the nested routes in `AdminTabComponent.js` needed real structural changes, not just Switch->Routes renaming: v5's Switch matches first-declared route regardless of specificity, but v6 ranks by path specificity regardless of declaration order. The two conditional path-less guards (contracts-not-deployed, not-logged-in) were restructured as explicit if/else route-set swaps to preserve the exact original branching - this is react router's own documented pattern for this exact migration case, not a stylistic choice. Co-Authored-By: Claude Sonnet 5 --- package.json | 7 +- src/app/auth/containers/AuthModalContainer.js | 4 +- .../auth/containers/LoginDropdownContainer.js | 6 +- .../auth/containers/StartButtonContainer.js | 4 +- src/app/auth/operations.js | 10 +- src/app/containers/GetDomainStateContainer.js | 23 +++- src/app/index.js | 6 +- src/app/reducers.js | 4 +- src/app/routes.js | 42 +++--- .../home/containers/SearchResultsContainer.js | 4 +- .../newAdmin/components/AdminTabComponent.js | 28 ++-- .../containers/ExpiredDomainContainer.js | 4 +- .../newAdmin/containers/LeftNavContainer.js | 15 ++- .../containers/AutoLoginContainer.js | 6 +- .../registrar/containers/CommitContainer.js | 15 ++- .../registrar/containers/LoadingContainer.js | 15 ++- .../containers/RegistrarContainer.js | 15 ++- .../containers/RentalPeriodContainer.js | 15 ++- .../registrar/containers/RevealContainer.js | 15 ++- .../containers/ResolveAddrContainer.js | 15 ++- .../containers/ResolveChainAddrContainer.js | 15 ++- .../resolve/containers/ResolveContainer.js | 19 ++- .../containers/ResolveNameContainer.js | 15 ++- src/app/tabs/resolve/selectors.js | 2 +- .../search/containers/DomainStateContainer.js | 21 ++- .../containers/SearchDomainContainer.js | 19 ++- src/configureStore.js | 5 +- yarn.lock | 125 +++++------------- 28 files changed, 266 insertions(+), 208 deletions(-) diff --git a/package.json b/package.json index 5ca88ddd..3110ba18 100644 --- a/package.json +++ b/package.json @@ -15,9 +15,8 @@ "@rsksmart/rns-suite": "^1.1.0", "bootstrap": "^4.3.1", "cbor": "^5.0.2", - "connected-react-router": "^6.3.1", "eth-ens-namehash": "^2.0.8", - "history": "^4.7.2", + "history": "^5.3.0", "js-sha3": "^0.8.0", "prop-types": "^15.7.2", "query-string": "^6.2.0", @@ -26,8 +25,8 @@ "react-bootstrap": "^1.0.0-beta.9", "react-dom": "^18", "react-redux": "^7.1.1", - "react-router": "^5.1.2", - "react-router-dom": "^5.1.2", + "react-router": "^6.30.4", + "react-router-dom": "^6.30.4", "react-switch": "^5.0.0", "react-zlib-js": "^1.0.4", "redux": "^4.0.1", diff --git a/src/app/auth/containers/AuthModalContainer.js b/src/app/auth/containers/AuthModalContainer.js index 45c25bb4..4a928a19 100644 --- a/src/app/auth/containers/AuthModalContainer.js +++ b/src/app/auth/containers/AuthModalContainer.js @@ -1,9 +1,9 @@ import { connect } from 'react-redux'; -import { push } from 'connected-react-router'; import { AuthModalComponent } from '../components'; import { closeModal } from '../actions'; import { authenticate } from '../operations'; import { networkSelector } from '../../selectors'; +import { history } from '../../../configureStore'; const mapStateToProps = state => ({ show: state.auth.showModal, @@ -26,7 +26,7 @@ const mapDispatchToProps = dispatch => ({ close: () => dispatch(closeModal()), authenticate: (name, address) => dispatch(authenticate(name, address)), openWallets: () => { - dispatch(push('/setup')); + history.push('/setup'); dispatch(closeModal()); }, }); diff --git a/src/app/auth/containers/LoginDropdownContainer.js b/src/app/auth/containers/LoginDropdownContainer.js index 55dcbddd..d2081f24 100644 --- a/src/app/auth/containers/LoginDropdownContainer.js +++ b/src/app/auth/containers/LoginDropdownContainer.js @@ -1,5 +1,5 @@ import { connect } from 'react-redux'; -import { push } from 'connected-react-router'; +import { history } from '../../../configureStore'; import LoginDropdownComponent from '../components/LoginDropdownComponent'; @@ -34,13 +34,13 @@ const mapStateToProps = state => ({ const mapDispatchToProps = dispatch => ({ handleLogin: (domain, address) => { - dispatch(push('/newAdmin')); + history.push('/newAdmin'); dispatch(logOut()); dispatch(authenticate(domain, address, true)); }, redirectAdmin: () => { dispatch(togglePopUp(false)); - dispatch(push('/newAdmin')); + history.push('/newAdmin'); }, disconnectDomain: (domain, isCurrent) => dispatch(disconnectDomain(domain, isCurrent)), disconnectWallet: () => dispatch(logoutManager()), diff --git a/src/app/auth/containers/StartButtonContainer.js b/src/app/auth/containers/StartButtonContainer.js index 4076212b..ea6df8af 100644 --- a/src/app/auth/containers/StartButtonContainer.js +++ b/src/app/auth/containers/StartButtonContainer.js @@ -1,8 +1,8 @@ import { connect } from 'react-redux'; -import { push } from 'connected-react-router'; import { StartButtonComponent } from '../components'; import { showModal } from '../actions'; import { start } from '../operations'; +import { history } from '../../../configureStore'; const mapStateToProps = state => ({ address: state.auth.address, @@ -15,7 +15,7 @@ const mapDispatchToProps = dispatch => ({ dispatch(showModal()); dispatch(start()); }, - user: () => dispatch(push('/newAdmin')), + user: () => history.push('/newAdmin'), }); const mergeProps = (stateProps, dispatchProps, ownProps) => ({ diff --git a/src/app/auth/operations.js b/src/app/auth/operations.js index 9bcd67ea..ff0e127c 100644 --- a/src/app/auth/operations.js +++ b/src/app/auth/operations.js @@ -1,7 +1,7 @@ /* eslint-disable radix */ import Web3 from 'web3'; import { hash as namehash } from 'eth-ens-namehash'; -import { push } from 'connected-react-router'; +import { history } from '../../configureStore'; import { rns as registryAddress, rskOwner as rskOwnerAddress, @@ -84,7 +84,7 @@ export const removeDomainToLocalStorage = (domain) => { const successfulLogin = (name, noRedirect) => (dispatch) => { if (!noRedirect) { - dispatch(push('/newAdmin')); + history.push('/newAdmin'); } localStorage.setItem('name', name); @@ -96,7 +96,7 @@ const successfulLogin = (name, noRedirect) => (dispatch) => { const failedLogin = name => (dispatch) => { localStorage.removeItem('name'); - dispatch(push('/')); + history.push('/'); return dispatch(errorLogin('failed login', name)); }; @@ -207,7 +207,7 @@ export const logoutManager = (redirect = '') => (dispatch) => { localStorage.removeItem('walletconnect'); window.rLogin = null; dispatch(logOut()); - dispatch(push(`/${redirect}`)); + history.push(`/${redirect}`); }; /** @@ -221,7 +221,7 @@ export const disconnectDomain = (domain, isCurrent) => (dispatch) => { if (isCurrent) { dispatch(logOut()); localStorage.removeItem('name'); - dispatch(push('/')); + history.push('/'); } }; diff --git a/src/app/containers/GetDomainStateContainer.js b/src/app/containers/GetDomainStateContainer.js index c284a8dc..7152fe59 100644 --- a/src/app/containers/GetDomainStateContainer.js +++ b/src/app/containers/GetDomainStateContainer.js @@ -1,18 +1,27 @@ +import React from 'react'; import { connect } from 'react-redux'; -import { push } from 'connected-react-router'; +import { useLocation } from 'react-router-dom'; import { parse } from 'query-string'; import { GetDomainStateComponent } from '../components'; +import { history } from '../../configureStore'; -const mapStateToProps = state => ({ - domain: parse(state.router.location.search).domain, - disableSearchButton: (state.registrar.committing || state.registrar.committed) && state.router.location.pathname === '/registrar', +const mapStateToProps = (state, ownProps) => ({ + domain: parse(ownProps.location.search).domain, + disableSearchButton: (state.registrar.committing || state.registrar.committed) && ownProps.location.pathname === '/registrar', }); -const mapDispatchToProps = dispatch => ({ - getDomainState: domain => dispatch(push(`/search?domain=${domain}`)), +const mapDispatchToProps = () => ({ + getDomainState: domain => history.push(`/search?domain=${domain}`), }); -export default connect( +const ConnectedGetDomainStateComponent = connect( mapStateToProps, mapDispatchToProps, )(GetDomainStateComponent); + +const GetDomainStateContainer = (props) => { + const location = useLocation(); + return ; +}; + +export default GetDomainStateContainer; diff --git a/src/app/index.js b/src/app/index.js index 5da426fb..f7300fec 100755 --- a/src/app/index.js +++ b/src/app/index.js @@ -1,5 +1,5 @@ import React from 'react'; -import { ConnectedRouter } from 'connected-react-router'; +import { unstable_HistoryRouter as HistoryRouter } from 'react-router-dom'; import Routes from './routes'; import FooterComponent from './components/FooterComponent'; import HeaderContainer from './containers/HeaderContainer'; @@ -9,7 +9,7 @@ import { AuthModal } from './auth'; // eslint-disable-next-line react/prop-types const App = ({ history }) => ( - + @@ -17,7 +17,7 @@ const App = ({ history }) => ( - + ); export default App; diff --git a/src/app/reducers.js b/src/app/reducers.js index e56dd316..8a2feb8a 100644 --- a/src/app/reducers.js +++ b/src/app/reducers.js @@ -1,5 +1,4 @@ import { combineReducers } from 'redux'; -import { connectRouter } from 'connected-react-router'; import authReducer from './auth'; import notificationReducer from './notifications'; import browserNotificationsReducer from './browerNotifications'; @@ -10,7 +9,7 @@ import registrar from './tabs/registrar/reducer'; import resolve from './tabs/resolve/reducer'; import search from './tabs/search/reducer'; -const rootReducer = history => combineReducers({ +const rootReducer = () => combineReducers({ auth: authReducer, browserNotifications: browserNotificationsReducer, multilanguage, @@ -18,7 +17,6 @@ const rootReducer = history => combineReducers({ notifications: notificationReducer, registrar, resolve, - router: connectRouter(history), search, }); diff --git a/src/app/routes.js b/src/app/routes.js index dc035a1a..a384c6d4 100644 --- a/src/app/routes.js +++ b/src/app/routes.js @@ -1,6 +1,6 @@ import React from 'react'; import propTypes from 'prop-types'; -import { Switch, Route, withRouter } from 'react-router'; +import { Routes as RouterRoutes, Route } from 'react-router-dom'; import { connect } from 'react-redux'; import { HomeTab, @@ -16,25 +16,29 @@ import { const Routes = ({ networkMatch = false, walletUnlocked = false, hasContracts }) => { const notLoggedIn = !window.rLogin || !networkMatch || !walletUnlocked; + if (!hasContracts) { + return ; + } + return ( - - { - !hasContracts && - } - + + } /> {/* the following path is only for GitHub pages */} - - - - - - { - notLoggedIn && - } - - - } /> - + } /> + } /> + } /> + } /> + } /> + {notLoggedIn ? ( + } /> + ) : ( + <> + } /> + } /> + } /> + + )} + ); }; @@ -50,4 +54,4 @@ const mapStateToProps = state => ({ hasContracts: state.auth.hasContracts, }); -export default withRouter(connect(mapStateToProps)(Routes)); +export default connect(mapStateToProps)(Routes); diff --git a/src/app/tabs/home/containers/SearchResultsContainer.js b/src/app/tabs/home/containers/SearchResultsContainer.js index 4dda9890..cbcd0735 100644 --- a/src/app/tabs/home/containers/SearchResultsContainer.js +++ b/src/app/tabs/home/containers/SearchResultsContainer.js @@ -1,7 +1,7 @@ import { connect } from 'react-redux'; -import { push } from 'connected-react-router'; import SearchResultsComponent from '../components/SearchResultsComponent'; import { clearDomainState } from '../../search/actions'; +import { history } from '../../../../configureStore'; const mapStateToProps = state => ({ domain: state.search.domain, @@ -14,7 +14,7 @@ const mapStateToProps = state => ({ const mapDispatchToProps = dispatch => ({ handleClick: (domain) => { dispatch(clearDomainState()); - dispatch(push(`/registrar?domain=${domain}`)); + history.push(`/registrar?domain=${domain}`); }, }); diff --git a/src/app/tabs/newAdmin/components/AdminTabComponent.js b/src/app/tabs/newAdmin/components/AdminTabComponent.js index 5042d2ce..0b0a9070 100644 --- a/src/app/tabs/newAdmin/components/AdminTabComponent.js +++ b/src/app/tabs/newAdmin/components/AdminTabComponent.js @@ -2,7 +2,7 @@ import React, { useEffect } from 'react'; import propTypes from 'prop-types'; import { multilanguage } from 'redux-multilanguage'; import { Row, Col } from 'react-bootstrap'; -import { Switch, Route } from 'react-router'; +import { Routes, Route } from 'react-router-dom'; import { AuthTabWrapper } from '../../../auth'; import ToggleComponent from '../../../components/ToggleComponent'; @@ -59,18 +59,20 @@ const AdminComponent = ({ - - - - - { - !isRegistryOwner && - } - - - - - + + } /> + : } /> + {!isRegistryOwner ? ( + } /> + ) : ( + <> + } /> + } /> + } /> + : } /> + + )} + diff --git a/src/app/tabs/newAdmin/containers/ExpiredDomainContainer.js b/src/app/tabs/newAdmin/containers/ExpiredDomainContainer.js index fa84529a..2f14f64f 100644 --- a/src/app/tabs/newAdmin/containers/ExpiredDomainContainer.js +++ b/src/app/tabs/newAdmin/containers/ExpiredDomainContainer.js @@ -1,7 +1,7 @@ import { connect } from 'react-redux'; -import { push } from 'connected-react-router'; import { ExpiredDomainComponent } from '../components'; import getDomainState from '../../search/operations'; +import { history } from '../../../../configureStore'; const mapStateToProps = state => ({ domain: state.auth.name, @@ -11,7 +11,7 @@ const mapStateToProps = state => ({ const mapDispatchToProps = dispatch => ({ handleClick: (domain) => { dispatch(getDomainState(domain.replace('.rsk', ''))); - dispatch(push('/')); + history.push('/'); }, }); diff --git a/src/app/tabs/newAdmin/containers/LeftNavContainer.js b/src/app/tabs/newAdmin/containers/LeftNavContainer.js index 238e0e60..1c83ed73 100644 --- a/src/app/tabs/newAdmin/containers/LeftNavContainer.js +++ b/src/app/tabs/newAdmin/containers/LeftNavContainer.js @@ -1,13 +1,22 @@ +import React from 'react'; import { connect } from 'react-redux'; +import { useLocation } from 'react-router-dom'; import { LeftNavComponent } from '../components'; -const mapStateToProps = state => ({ +const mapStateToProps = (state, ownProps) => ({ advancedView: state.newAdmin.view.advancedView, - location: state.router.location.pathname, + location: ownProps.location.pathname, domain: state.auth.name, }); -export default connect( +const ConnectedLeftNavComponent = connect( mapStateToProps, null, )(LeftNavComponent); + +const LeftNavContainer = (props) => { + const location = useLocation(); + return ; +}; + +export default LeftNavContainer; diff --git a/src/app/tabs/registrar/containers/AutoLoginContainer.js b/src/app/tabs/registrar/containers/AutoLoginContainer.js index 1c9faf47..02886f45 100644 --- a/src/app/tabs/registrar/containers/AutoLoginContainer.js +++ b/src/app/tabs/registrar/containers/AutoLoginContainer.js @@ -1,7 +1,7 @@ import { connect } from 'react-redux'; -import { push } from 'connected-react-router'; import { AutoLoginComponent } from '../components'; import { resetRegistrarState } from '../actions'; +import { history } from '../../../../configureStore'; import { autoLogin } from '../../../auth/operations'; @@ -11,12 +11,12 @@ const mapStateToProps = state => ({ const mapDispatchToProps = dispatch => ({ handleManageClick: () => { - dispatch(push('/newAdmin')); + history.push('/newAdmin'); dispatch(autoLogin(localStorage.getItem('name'))); dispatch(resetRegistrarState()); }, handleRegisterNewClick: () => { - dispatch(push('/')); + history.push('/'); dispatch(resetRegistrarState()); }, }); diff --git a/src/app/tabs/registrar/containers/CommitContainer.js b/src/app/tabs/registrar/containers/CommitContainer.js index d305be2d..8e806ea5 100644 --- a/src/app/tabs/registrar/containers/CommitContainer.js +++ b/src/app/tabs/registrar/containers/CommitContainer.js @@ -1,13 +1,15 @@ +import React from 'react'; import { connect } from 'react-redux'; +import { useLocation } from 'react-router-dom'; import { parse } from 'query-string'; import { CommitComponent } from '../components'; import { commit, checkIfInProgress, hasEnoughRif } from '../operations'; import { toggleSetupAddr } from '../actions'; -const mapStateToProps = state => ({ +const mapStateToProps = (state, ownProps) => ({ committing: state.registrar.committing, committed: state.registrar.committed, - domain: parse(state.router.location.search).domain, + domain: parse(ownProps.location.search).domain, setupAddr: state.registrar.setupAddr, duration: state.registrar.duration, rifCost: state.registrar.rifCost, @@ -38,8 +40,15 @@ const mergeProps = (stateProps, dispatchProps, ownProps) => ({ checkBalance: () => dispatchProps.hasEnoughRif(stateProps.rifCost), }); -export default connect( +const ConnectedCommitComponent = connect( mapStateToProps, mapDispatchToProps, mergeProps, )(CommitComponent); + +const CommitContainer = (props) => { + const location = useLocation(); + return ; +}; + +export default CommitContainer; diff --git a/src/app/tabs/registrar/containers/LoadingContainer.js b/src/app/tabs/registrar/containers/LoadingContainer.js index 71cb5932..46a04858 100644 --- a/src/app/tabs/registrar/containers/LoadingContainer.js +++ b/src/app/tabs/registrar/containers/LoadingContainer.js @@ -1,14 +1,16 @@ +import React from 'react'; import { connect } from 'react-redux'; +import { useLocation } from 'react-router-dom'; import { parse } from 'query-string'; import { LoadingComponent } from '../components'; import { checkCanReveal } from '../operations'; -const mapStateToProps = state => ({ +const mapStateToProps = (state, ownProps) => ({ waiting: state.registrar.waiting, hash: state.registrar.hash, setupAddr: state.registrar.setupAddr, commitConfirmed: state.registrar.commitConfirmed, - domain: parse(state.router.location.search).domain, + domain: parse(ownProps.location.search).domain, }); const mapDispatchToProps = dispatch => ({ @@ -21,8 +23,15 @@ const mergeProps = (stateProps, dispatchProps, ownProps) => ({ checkCanReveal: () => dispatchProps.checkCanReveal(stateProps.hash, stateProps.domain), }); -export default connect( +const ConnectedLoadingComponent = connect( mapStateToProps, mapDispatchToProps, mergeProps, )(LoadingComponent); + +const LoadingContainer = (props) => { + const location = useLocation(); + return ; +}; + +export default LoadingContainer; diff --git a/src/app/tabs/registrar/containers/RegistrarContainer.js b/src/app/tabs/registrar/containers/RegistrarContainer.js index bae6d44a..3c3a286d 100644 --- a/src/app/tabs/registrar/containers/RegistrarContainer.js +++ b/src/app/tabs/registrar/containers/RegistrarContainer.js @@ -1,12 +1,14 @@ +import React from 'react'; import { parse } from 'query-string'; import { connect } from 'react-redux'; +import { useLocation } from 'react-router-dom'; import { RegistrarComponent } from '../components'; import getDomainState from '../../search/operations'; import { checkIfInProgress } from '../operations'; import { closeErrorMessage } from '../actions'; -const mapStateToProps = state => ({ - domain: parse(state.router.location.search).domain, +const mapStateToProps = (state, ownProps) => ({ + domain: parse(ownProps.location.search).domain, domainStateLoading: state.search.domainStateLoading, owned: state.search.owned, owner: state.search.owner, @@ -27,7 +29,14 @@ const mapDispatchToProps = dispatch => ({ handleCloseClick: () => dispatch(closeErrorMessage()), }); -export default connect( +const ConnectedRegistrarComponent = connect( mapStateToProps, mapDispatchToProps, )(RegistrarComponent); + +const RegistrarContainer = (props) => { + const location = useLocation(); + return ; +}; + +export default RegistrarContainer; diff --git a/src/app/tabs/registrar/containers/RentalPeriodContainer.js b/src/app/tabs/registrar/containers/RentalPeriodContainer.js index b8b2e5f8..63255237 100644 --- a/src/app/tabs/registrar/containers/RentalPeriodContainer.js +++ b/src/app/tabs/registrar/containers/RentalPeriodContainer.js @@ -1,14 +1,16 @@ +import React from 'react'; import { connect } from 'react-redux'; +import { useLocation } from 'react-router-dom'; import { parse } from 'query-string'; import { RentalPeriodComponent } from '../components'; import { getCost, getConversionRate } from '../operations'; -const mapStateToProps = state => ({ +const mapStateToProps = (state, ownProps) => ({ rifCost: state.registrar.rifCost, getting: state.registrar.gettingCost, committing: state.registrar.committing, committed: state.registrar.committed, - domain: parse(state.router.location.search).domain || state.auth.name, + domain: parse(ownProps.location.search).domain || state.auth.name, gettingConversionRate: state.registrar.gettingConversionRate, conversionRate: state.registrar.conversionRate, }); @@ -25,8 +27,15 @@ const mergeProps = (stateProps, dispatchProps, ownProps) => ({ getConversionRate: () => dispatchProps.getConversionRate(stateProps.conversionRate), }); -export default connect( +const ConnectedRentalPeriodComponent = connect( mapStateToProps, mapDispatchToProps, mergeProps, )(RentalPeriodComponent); + +const RentalPeriodContainer = (props) => { + const location = useLocation(); + return ; +}; + +export default RentalPeriodContainer; diff --git a/src/app/tabs/registrar/containers/RevealContainer.js b/src/app/tabs/registrar/containers/RevealContainer.js index 284a268e..b95f115e 100644 --- a/src/app/tabs/registrar/containers/RevealContainer.js +++ b/src/app/tabs/registrar/containers/RevealContainer.js @@ -1,9 +1,11 @@ +import React from 'react'; import { connect } from 'react-redux'; +import { useLocation } from 'react-router-dom'; import { parse } from 'query-string'; import { RevealComponent } from '../components'; import { revealCommit } from '../operations'; -const mapStateToProps = state => ({ +const mapStateToProps = (state, ownProps) => ({ waiting: state.registrar.waiting, commitConfirmed: state.registrar.commitConfirmed, revealConfirmed: state.registrar.revealConfirmed, @@ -11,7 +13,7 @@ const mapStateToProps = state => ({ revealing: state.registrar.revealing, revealed: state.registrar.revealed, committed: state.registrar.committed, - domain: parse(state.router.location.search).domain, + domain: parse(ownProps.location.search).domain, hash: state.registrar.hash, rifCost: state.registrar.rifCost, duration: state.registrar.duration, @@ -28,8 +30,15 @@ const mergeProps = (stateProps, dispatchProps, ownProps) => ({ revealCommit: () => dispatchProps.revealCommit(stateProps.domain), }); -export default connect( +const ConnectedRevealComponent = connect( mapStateToProps, mapDispatchToProps, mergeProps, )(RevealComponent); + +const RevealContainer = (props) => { + const location = useLocation(); + return ; +}; + +export default RevealContainer; diff --git a/src/app/tabs/resolve/containers/ResolveAddrContainer.js b/src/app/tabs/resolve/containers/ResolveAddrContainer.js index 50d86850..3400ce79 100644 --- a/src/app/tabs/resolve/containers/ResolveAddrContainer.js +++ b/src/app/tabs/resolve/containers/ResolveAddrContainer.js @@ -1,10 +1,12 @@ +import React from 'react'; import { connect } from 'react-redux'; +import { useLocation } from 'react-router-dom'; import { ResolveQRComponent } from '../components'; import { getSearch, getResolverAddress, getAddr } from '../selectors'; import { getAddress } from '../operations'; -const mapStateToProps = state => ({ - name: getSearch(state), +const mapStateToProps = (state, ownProps) => ({ + name: getSearch(ownProps.location), resolverAddress: getResolverAddress(state), addr: getAddr(state), supportedInterfaces: state.resolve.supportedInterfaces, @@ -24,8 +26,15 @@ const mergeProps = (stateProps, dispatchProps, ownProps) => ({ ), }); -export default connect( +const ConnectedResolveQRComponent = connect( mapStateToProps, mapDispatchToProps, mergeProps, )(ResolveQRComponent); + +const ResolveAddrContainer = (props) => { + const location = useLocation(); + return ; +}; + +export default ResolveAddrContainer; diff --git a/src/app/tabs/resolve/containers/ResolveChainAddrContainer.js b/src/app/tabs/resolve/containers/ResolveChainAddrContainer.js index 51e663c5..30f98268 100644 --- a/src/app/tabs/resolve/containers/ResolveChainAddrContainer.js +++ b/src/app/tabs/resolve/containers/ResolveChainAddrContainer.js @@ -1,10 +1,12 @@ +import React from 'react'; import { connect } from 'react-redux'; +import { useLocation } from 'react-router-dom'; import { ResolveChainAddrComponent } from '../components'; import { getSearch, getChainAddr, getResolverAddress } from '../selectors'; import { getAddress } from '../operations'; -const mapStateToProps = state => ({ - name: getSearch(state), +const mapStateToProps = (state, ownProps) => ({ + name: getSearch(ownProps.location), resolverAddress: getResolverAddress(state), chainAddr: getChainAddr(state), supportedInterfaces: state.resolve.supportedInterfaces, @@ -26,8 +28,15 @@ const mergeProps = (stateProps, dispatchProps, ownProps) => ({ }, }); -export default connect( +const ConnectedResolveChainAddrComponent = connect( mapStateToProps, mapDispatchToProps, mergeProps, )(ResolveChainAddrComponent); + +const ResolveChainAddrContainer = (props) => { + const location = useLocation(); + return ; +}; + +export default ResolveChainAddrContainer; diff --git a/src/app/tabs/resolve/containers/ResolveContainer.js b/src/app/tabs/resolve/containers/ResolveContainer.js index 452a9212..12eb250a 100644 --- a/src/app/tabs/resolve/containers/ResolveContainer.js +++ b/src/app/tabs/resolve/containers/ResolveContainer.js @@ -1,17 +1,19 @@ +import React from 'react'; import { connect } from 'react-redux'; -import { push } from 'connected-react-router'; +import { useLocation } from 'react-router-dom'; import { ResolveComponent } from '../components'; import { searchAddressOrDomain } from '../operations'; import { getSearch, getResolve } from '../selectors'; import { resetResolve } from '../actions'; +import { history } from '../../../../configureStore'; -const mapStateToProps = state => ({ - name: getSearch(state), +const mapStateToProps = (state, ownProps) => ({ + name: getSearch(ownProps.location), ...getResolve(state), }); const mapDispatchToProps = dispatch => ({ - search: name => dispatch(push(`resolve?name=${name}`)), + search: name => history.push(`resolve?name=${name}`), resolve: name => dispatch(searchAddressOrDomain(name.toLowerCase())), reset: () => dispatch(resetResolve()), }); @@ -24,8 +26,15 @@ const mergeProps = (stateProps, dispatchProps, ownProps) => ({ reset: () => dispatchProps.reset(), }); -export default connect( +const ConnectedResolveComponent = connect( mapStateToProps, mapDispatchToProps, mergeProps, )(ResolveComponent); + +const ResolveContainer = (props) => { + const location = useLocation(); + return ; +}; + +export default ResolveContainer; diff --git a/src/app/tabs/resolve/containers/ResolveNameContainer.js b/src/app/tabs/resolve/containers/ResolveNameContainer.js index 79bd0e72..5137969d 100644 --- a/src/app/tabs/resolve/containers/ResolveNameContainer.js +++ b/src/app/tabs/resolve/containers/ResolveNameContainer.js @@ -1,10 +1,12 @@ +import React from 'react'; import { connect } from 'react-redux'; +import { useLocation } from 'react-router-dom'; import { ResolveQRComponent } from '../components'; import { getSearch, getResolverAddress, getName } from '../selectors'; import { name } from '../operations'; -const mapStateToProps = state => ({ - name: getSearch(state), +const mapStateToProps = (state, ownProps) => ({ + name: getSearch(ownProps.location), resolverAddress: getResolverAddress(state), nameResolution: getName(state), }); @@ -19,8 +21,15 @@ const mergeProps = (stateProps, dispatchProps, ownProps) => ({ getResolution: () => dispatchProps.getName(stateProps.resolverAddress, stateProps.name), }); -export default connect( +const ConnectedResolveQRComponent = connect( mapStateToProps, mapDispatchToProps, mergeProps, )(ResolveQRComponent); + +const ResolveNameContainer = (props) => { + const location = useLocation(); + return ; +}; + +export default ResolveNameContainer; diff --git a/src/app/tabs/resolve/selectors.js b/src/app/tabs/resolve/selectors.js index fc3f96fc..bac68bf6 100644 --- a/src/app/tabs/resolve/selectors.js +++ b/src/app/tabs/resolve/selectors.js @@ -1,6 +1,6 @@ import { parse } from 'query-string'; -export const getSearch = state => parse(state.router.location.search).name || ''; +export const getSearch = location => parse(location.search).name || ''; export const getResolve = state => ({ loading: state.resolve.loading, diff --git a/src/app/tabs/search/containers/DomainStateContainer.js b/src/app/tabs/search/containers/DomainStateContainer.js index 0a705604..ed3b4402 100644 --- a/src/app/tabs/search/containers/DomainStateContainer.js +++ b/src/app/tabs/search/containers/DomainStateContainer.js @@ -1,13 +1,15 @@ +import React from 'react'; import { connect } from 'react-redux'; -import { push } from 'connected-react-router'; +import { useLocation } from 'react-router-dom'; import { parse } from 'query-string'; import { DomainStateComponent } from '../components'; import getDomainState from '../operations'; import { resetRegistrarState } from '../../registrar/actions'; import { checkBrowserNotifications } from '../../../browerNotifications/operations'; +import { history } from '../../../../configureStore'; -const mapStateToProps = state => ({ - domain: parse(state.router.location.search).domain || '', +const mapStateToProps = (state, ownProps) => ({ + domain: parse(ownProps.location.search).domain || '', domainStateLoading: state.search.domainStateLoading, owned: state.search.owned, owner: state.search.owner, @@ -19,15 +21,22 @@ const mapStateToProps = state => ({ const mapDispatchToProps = dispatch => ({ getState: domain => dispatch(getDomainState(domain)), - search: domain => dispatch(push(`/search?domain=${domain}`)), + search: domain => history.push(`/search?domain=${domain}`), registerDomain: (domain) => { dispatch(resetRegistrarState()); - dispatch(push(`/registrar?domain=${domain}`)); + history.push(`/registrar?domain=${domain}`); dispatch(checkBrowserNotifications()); }, }); -export default connect( +const ConnectedDomainStateComponent = connect( mapStateToProps, mapDispatchToProps, )(DomainStateComponent); + +const DomainStateContainer = (props) => { + const location = useLocation(); + return ; +}; + +export default DomainStateContainer; diff --git a/src/app/tabs/search/containers/SearchDomainContainer.js b/src/app/tabs/search/containers/SearchDomainContainer.js index 8243015a..34492f4d 100644 --- a/src/app/tabs/search/containers/SearchDomainContainer.js +++ b/src/app/tabs/search/containers/SearchDomainContainer.js @@ -1,21 +1,30 @@ +import React from 'react'; import { connect } from 'react-redux'; -import { push } from 'connected-react-router'; +import { useLocation } from 'react-router-dom'; import { parse } from 'query-string'; import { GetDomainStateComponent } from '../../../components'; import getAuctionState from '../operations'; +import { history } from '../../../../configureStore'; -const mapStateToProps = state => ({ - domain: parse(state.router.location.search).domain, +const mapStateToProps = (state, ownProps) => ({ + domain: parse(ownProps.location.search).domain, }); const mapDispatchToProps = dispatch => ({ getDomainState: (domain) => { dispatch(getAuctionState(domain)); - dispatch(push(`/search?domain=${domain}`)); + history.push(`/search?domain=${domain}`); }, }); -export default connect( +const ConnectedGetDomainStateComponent = connect( mapStateToProps, mapDispatchToProps, )(GetDomainStateComponent); + +const SearchDomainContainer = (props) => { + const location = useLocation(); + return ; +}; + +export default SearchDomainContainer; diff --git a/src/configureStore.js b/src/configureStore.js index 2cfa33d5..e5881181 100644 --- a/src/configureStore.js +++ b/src/configureStore.js @@ -1,13 +1,12 @@ import { createBrowserHistory } from 'history'; import thunk from 'redux-thunk'; -import { routerMiddleware } from 'connected-react-router'; import { applyMiddleware, createStore } from 'redux'; import { createLogger } from 'redux-logger'; import rootReducer from './app/reducers'; export const history = createBrowserHistory(); -const middleware = [thunk, routerMiddleware(history)]; +const middleware = [thunk]; if (import.meta.env.DEV) { middleware.push(createLogger()); @@ -15,7 +14,7 @@ if (import.meta.env.DEV) { const configureStore = (prelodedState) => { const store = createStore( - rootReducer(history), + rootReducer(), prelodedState, applyMiddleware(...middleware), ); diff --git a/yarn.lock b/yarn.lock index 92e78068..f26c0e87 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1020,11 +1020,16 @@ "@babel/plugin-transform-react-jsx-development" "^7.27.1" "@babel/plugin-transform-react-pure-annotations" "^7.27.1" -"@babel/runtime@^7.1.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.8", "@babel/runtime@^7.14.0", "@babel/runtime@^7.14.5", "@babel/runtime@^7.15.4", "@babel/runtime@^7.19.0", "@babel/runtime@^7.28.4", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": +"@babel/runtime@^7.12.0", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.8", "@babel/runtime@^7.14.0", "@babel/runtime@^7.14.5", "@babel/runtime@^7.15.4", "@babel/runtime@^7.19.0", "@babel/runtime@^7.28.4", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": version "7.28.4" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.28.4.tgz#a70226016fabe25c5783b2f22d3e1c9bc5ca3326" integrity sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ== +"@babel/runtime@^7.7.6": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.29.7.tgz#12022450c45a4da6d8d8287b18a4ff2ddb23f768" + integrity sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw== + "@babel/template@^7.27.1", "@babel/template@^7.27.2": version "7.27.2" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.27.2.tgz#fa78ceed3c4e7b63ebf6cb39e5852fca45f6809d" @@ -2516,6 +2521,11 @@ redux-thunk "^3.1.0" reselect "^5.1.0" +"@remix-run/router@1.23.3": + version "1.23.3" + resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.23.3.tgz#957c098d4393d301a8aa7dccf3ef28ea5430e36a" + integrity sha512-4An71tdz9X8+3sI4Qqqd2LWd9vS39J7sqd9EU4Scw7TJE/qB10Flv/UuqbPVgfQV9XoK8Np6jNquZitnZq5i+Q== + "@resolver-engine/core@^0.2.1": version "0.2.1" resolved "https://registry.yarnpkg.com/@resolver-engine/core/-/core-0.2.1.tgz#0d71803f6d3b8cb2e9ed481a1bf0ca5f5256d0c0" @@ -7014,17 +7024,6 @@ confusing-browser-globals@^1.0.5: resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz#ae40e9b57cdd3915408a2805ebd3a5585608dc81" integrity sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA== -connected-react-router@^6.3.1: - version "6.9.3" - resolved "https://registry.yarnpkg.com/connected-react-router/-/connected-react-router-6.9.3.tgz#72300aca9f9d6f38e1f4a2901572faa02adec972" - integrity sha512-4ThxysOiv/R2Dc4Cke1eJwjKwH1Y51VDwlOrOfs1LjpdYOVvCNjNkZDayo7+sx42EeGJPQUNchWkjAIJdXGIOQ== - dependencies: - lodash.isequalwith "^4.4.0" - prop-types "^15.7.2" - optionalDependencies: - immutable "^3.8.1 || ^4.0.0" - seamless-immutable "^7.1.3" - console-browserify@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" @@ -10527,17 +10526,12 @@ header-case@^1.0.0: no-case "^2.2.0" upper-case "^1.1.3" -history@^4.7.2, history@^4.9.0: - version "4.10.1" - resolved "https://registry.yarnpkg.com/history/-/history-4.10.1.tgz#33371a65e3a83b267434e2b3f3b1b4c58aad4cf3" - integrity sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew== +history@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/history/-/history-5.3.0.tgz#1548abaa245ba47992f063a0783db91ef201c73b" + integrity sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ== dependencies: - "@babel/runtime" "^7.1.2" - loose-envify "^1.2.0" - resolve-pathname "^3.0.0" - tiny-invariant "^1.0.2" - tiny-warning "^1.0.0" - value-equal "^1.0.1" + "@babel/runtime" "^7.7.6" hmac-drbg@^1.0.1: version "1.0.1" @@ -10553,7 +10547,7 @@ hoist-non-react-statics@^2.3.1: resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz#c5903cf409c0dfd908f388e619d86b9c1174cb47" integrity sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw== -hoist-non-react-statics@^3.0.0, hoist-non-react-statics@^3.1.0, hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.2: +hoist-non-react-statics@^3.0.0, hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== @@ -10740,11 +10734,6 @@ immer@^10.0.3: resolved "https://registry.yarnpkg.com/immer/-/immer-10.2.0.tgz#88a4ce06a1af64172d254b70f7cb04df51c871b1" integrity sha512-d/+XTN3zfODyjr89gM3mPq1WNX2B8pYsu7eORitdwyA2sBubnTl3laYlBk4sXY5FUa5qTZGBDPJICVbvqzjlbw== -"immutable@^3.8.1 || ^4.0.0": - version "4.3.7" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.7.tgz#c70145fc90d89fb02021e65c84eb0226e4e5a381" - integrity sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw== - immutable@^5.0.2: version "5.1.4" resolved "https://registry.yarnpkg.com/immutable/-/immutable-5.1.4.tgz#e3f8c1fe7b567d56cf26698f31918c241dae8c1f" @@ -12146,11 +12135,6 @@ lodash.debounce@^4.0.8: resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== -lodash.isequalwith@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.isequalwith/-/lodash.isequalwith-4.4.0.tgz#266726ddd528f854f21f4ea98a065606e0fbc6b0" - integrity sha512-dcZON0IalGBpRmJBmMkaoV7d3I80R2O+FrzsZyHdNSFrANq/cgDqKQNmAHE8UEj4+QYWwwhkQOVdLHiAopzlsQ== - lodash.isplainobject@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" @@ -12250,7 +12234,7 @@ longest@^1.0.1: resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" integrity sha512-k+yt5n3l48JU4k8ftnKG6V7u32wyH2NfKzeMto9F/QRE0amxy/LayxwlvjjkZEIzqR+19IrtFO8p5kB9QaYUFg== -loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0: +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== @@ -13772,13 +13756,6 @@ path-parse@^1.0.7: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== -path-to-regexp@^1.7.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.9.0.tgz#5dc0753acbf8521ca2e0f137b4578b917b10cf24" - integrity sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g== - dependencies: - isarray "0.0.1" - path-to-regexp@~0.1.12: version "0.1.12" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.12.tgz#d5e1a12e478a976d432ef3c58d534b9923164bb7" @@ -14567,7 +14544,7 @@ react-i18next@^11.11.4: "@babel/runtime" "^7.14.5" html-parse-stringify "^3.0.1" -react-is@^16.13.1, react-is@^16.3.2, react-is@^16.6.0, react-is@^16.7.0: +react-is@^16.13.1, react-is@^16.3.2, react-is@^16.7.0: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== @@ -14613,33 +14590,20 @@ react-refresh@^0.18.0: resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.18.0.tgz#2dce97f4fe932a4d8142fa1630e475c1729c8062" integrity sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw== -react-router-dom@^5.1.2: - version "5.3.4" - resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.3.4.tgz#2ed62ffd88cae6db134445f4a0c0ae8b91d2e5e6" - integrity sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ== +react-router-dom@^6.30.4: + version "6.30.4" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.30.4.tgz#f7167bf3da6c7d9132130ea985dd06def25e84d5" + integrity sha512-q4HvNl+mmDdkS0g+MqiBZNteQJCuimWoOyHMy4T/RQLAn9Z29+E91QXRaxOujeMl2HTzRSS0KFPd7lxX3PjV0Q== dependencies: - "@babel/runtime" "^7.12.13" - history "^4.9.0" - loose-envify "^1.3.1" - prop-types "^15.6.2" - react-router "5.3.4" - tiny-invariant "^1.0.2" - tiny-warning "^1.0.0" - -react-router@5.3.4, react-router@^5.1.2: - version "5.3.4" - resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.3.4.tgz#8ca252d70fcc37841e31473c7a151cf777887bb5" - integrity sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA== - dependencies: - "@babel/runtime" "^7.12.13" - history "^4.9.0" - hoist-non-react-statics "^3.1.0" - loose-envify "^1.3.1" - path-to-regexp "^1.7.0" - prop-types "^15.6.2" - react-is "^16.6.0" - tiny-invariant "^1.0.2" - tiny-warning "^1.0.0" + "@remix-run/router" "1.23.3" + react-router "6.30.4" + +react-router@6.30.4, react-router@^6.30.4: + version "6.30.4" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.30.4.tgz#638f35176527bd243d96d81d35d33b757bad46c2" + integrity sha512-SVUsDe+DybHM/WmYKIVYhZh1o5Dcuf16yM6WjG02Q9XVFMZIJyHYhwrr6bFBXZkVP6z69kNkMyBCujt8FaFLJA== + dependencies: + "@remix-run/router" "1.23.3" react-switch@^5.0.0: version "5.0.1" @@ -15058,11 +15022,6 @@ resolve-from@^4.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== -resolve-pathname@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-3.0.0.tgz#99d02224d3cf263689becbb393bc560313025dcd" - integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng== - resolve-url@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" @@ -15416,11 +15375,6 @@ scryptsy@2.1.0, scryptsy@^2.1.0: resolved "https://registry.yarnpkg.com/scryptsy/-/scryptsy-2.1.0.tgz#8d1e8d0c025b58fdd25b6fa9a0dc905ee8faa790" integrity sha512-1CdSqHQowJBnMAFyPEBRfqag/YP9OF394FV+4YREIJX4ljD7OxvQRDayyoyyCk+senRjSkP6VnUNQmVQqB6g7w== -seamless-immutable@^7.1.3: - version "7.1.4" - resolved "https://registry.yarnpkg.com/seamless-immutable/-/seamless-immutable-7.1.4.tgz#6e9536def083ddc4dea0207d722e0e80d0f372f8" - integrity sha512-XiUO1QP4ki4E2PHegiGAlu6r82o5A+6tRh7IkGGTVg/h+UoeX4nFBeCGPOhb4CYjvkqsfm/TUtvOMYC1xmV30A== - secp256k1@4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.3.tgz#c4559ecd1b8d3c1827ed2d1b94190d69ce267303" @@ -16612,11 +16566,6 @@ tiny-emitter@^2.0.0: resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz#1d1a56edfc51c43e863cbb5382a72330e3555423" integrity sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q== -tiny-invariant@^1.0.2: - version "1.3.3" - resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.3.tgz#46680b7a873a0d5d10005995eb90a70d74d60127" - integrity sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg== - tiny-secp256k1@^1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/tiny-secp256k1/-/tiny-secp256k1-1.1.7.tgz#0c1b6b9d2d93404f9093dc7e287b0aa834480573" @@ -16633,11 +16582,6 @@ tiny-typed-emitter@^2.1.0: resolved "https://registry.yarnpkg.com/tiny-typed-emitter/-/tiny-typed-emitter-2.1.0.tgz#b3b027fdd389ff81a152c8e847ee2f5be9fad7b5" integrity sha512-qVtvMxeXbVej0cQWKqVSSAHmKZEHAvxdF8HEUBFWts8h+xEo5m/lEiPakuyZ3BnCBjOD8i24kzNOiOLLgsSxhA== -tiny-warning@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" - integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== - tinybench@^2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/tinybench/-/tinybench-2.9.0.tgz#103c9f8ba6d7237a47ab6dd1dcff77251863426b" @@ -17406,11 +17350,6 @@ validate-npm-package-license@^3.0.1: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" -value-equal@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-1.0.1.tgz#1e0b794c734c5c0cade179c437d356d931a34d6c" - integrity sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw== - value-or-promise@1.0.11: version "1.0.11" resolved "https://registry.yarnpkg.com/value-or-promise/-/value-or-promise-1.0.11.tgz#3e90299af31dd014fe843fe309cefa7c1d94b140" From 4b55cb206d42b93efe15b28a1bf31cdb9f1ff5fd Mon Sep 17 00:00:00 2001 From: Jesse Clark Date: Thu, 2 Jul 2026 17:59:26 +0300 Subject: [PATCH 05/10] Dependency hygiene pass: remove dead deps, rename octicons, prune resolutions - Removed unused direct dependencies confirmed via full-repo grep: react-add-to-calendar, react-switch, and the explicit react-router entry (react-router-dom already depends on it transitively). - Moved @rsksmart/rns-suite to devDependencies - it's only used by tests/setupRnsSuite.js, never shipped in the app bundle. - Renamed @githubprimer/octicons-react -> @primer/octicons-react (the package moved scopes years ago). The rename coincided with a major version bump in the new scope, so verified the earliest available version (9.6.0) still ships the same Octicon/ getIconByName API before picking it, keeping this a pure rename rather than an unplanned API migration. - Shrank the `resolutions` block from 7 entries to 1: lodash.template, sqlite3, node-sass, and cheerio had zero requesters left anywhere in the dependency tree (vestigial). eslint-utils and @babel/core were actively harmful, not just redundant - both were pinning versions BELOW what the project's own current eslint/ @vitejs/plugin-react already require, so removing them lets those packages resolve to what they actually ask for. Kept the lodash override, which is still needed to force a resolution against an exact-pinned lodash@4.17.15 from @rsksmart/rsk3-utils. Kept styled-components as a direct dependency despite zero usage in src/ - rimble-ui (still actively used) imports it directly and needs it resolvable at the top level of node_modules; removing it broke the build via a hoisting/resolution failure, caught during verification. Co-Authored-By: Claude Sonnet 5 --- package.json | 15 +- src/app/components/CopyableComponent.js | 2 +- yarn.lock | 867 +++++------------------- 3 files changed, 174 insertions(+), 710 deletions(-) diff --git a/package.json b/package.json index 3110ba18..f6a9e556 100644 --- a/package.json +++ b/package.json @@ -9,10 +9,9 @@ }, "dependencies": { "@ensdomains/address-encoder": "^0.1.8", - "@githubprimer/octicons-react": "^8.5.0", + "@primer/octicons-react": "^9.6.0", "@rsksmart/rlogin-essentials": "1.0.5", "@rsksmart/rns": "^1.9.0", - "@rsksmart/rns-suite": "^1.1.0", "bootstrap": "^4.3.1", "cbor": "^5.0.2", "eth-ens-namehash": "^2.0.8", @@ -21,13 +20,10 @@ "prop-types": "^15.7.2", "query-string": "^6.2.0", "react": "^18", - "react-add-to-calendar": "^0.1.5", "react-bootstrap": "^1.0.0-beta.9", "react-dom": "^18", "react-redux": "^7.1.1", - "react-router": "^6.30.4", "react-router-dom": "^6.30.4", - "react-switch": "^5.0.0", "react-zlib-js": "^1.0.4", "redux": "^4.0.1", "redux-logger": "^3.0.6", @@ -60,6 +56,7 @@ "not op_mini all" ], "devDependencies": { + "@rsksmart/rns-suite": "^1.1.0", "@testing-library/dom": "^10", "@testing-library/jest-dom": "^6", "@testing-library/react": "^16", @@ -81,12 +78,6 @@ "web-streams-polyfill": "^4.1.0" }, "resolutions": { - "lodash": "^4.17.14", - "lodash.template": "^4.5.0", - "eslint-utils": "^1.4.1", - "sqlite3": "^5.1.6", - "node-sass": "npm:sass@^1.32.0", - "cheerio": "1.0.0-rc.5", - "@babel/core": "^7.27.3" + "lodash": "^4.17.14" } } diff --git a/src/app/components/CopyableComponent.js b/src/app/components/CopyableComponent.js index 894602b2..a346ca85 100644 --- a/src/app/components/CopyableComponent.js +++ b/src/app/components/CopyableComponent.js @@ -3,7 +3,7 @@ import propTypes from 'prop-types'; import { FormGroup, FormControl, InputGroup, Button, } from 'react-bootstrap'; -import Octicon, { getIconByName } from '@githubprimer/octicons-react'; +import Octicon, { getIconByName } from '@primer/octicons-react'; const copy = (value) => { const el = document.createElement('textarea'); diff --git a/yarn.lock b/yarn.lock index f26c0e87..42126c83 100644 --- a/yarn.lock +++ b/yarn.lock @@ -154,7 +154,7 @@ dependencies: "@babel/highlight" "^7.10.4" -"@babel/code-frame@^7.10.4": +"@babel/code-frame@^7.10.4", "@babel/code-frame@^7.29.7": version "7.29.7" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.29.7.tgz#f2fbbfea87c44a21590ec515b778b2c26d8866e7" integrity sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw== @@ -177,7 +177,33 @@ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.28.5.tgz#a8a4962e1567121ac0b3b487f52107443b455c7f" integrity sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA== -"@babel/core@^7.27.3", "@babel/core@^7.29.0", "@babel/core@^7.4.5": +"@babel/compat-data@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.29.7.tgz#6f0237f0f36d2e51c0570a636faed9d2d0efe629" + integrity sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg== + +"@babel/core@^7.29.0": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.29.7.tgz#80c10b17248082968b57a857b91640971f2070f7" + integrity sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA== + dependencies: + "@babel/code-frame" "^7.29.7" + "@babel/generator" "^7.29.7" + "@babel/helper-compilation-targets" "^7.29.7" + "@babel/helper-module-transforms" "^7.29.7" + "@babel/helpers" "^7.29.7" + "@babel/parser" "^7.29.7" + "@babel/template" "^7.29.7" + "@babel/traverse" "^7.29.7" + "@babel/types" "^7.29.7" + "@jridgewell/remapping" "^2.3.5" + convert-source-map "^2.0.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.3" + semver "^6.3.1" + +"@babel/core@^7.4.5": version "7.28.5" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.28.5.tgz#4c81b35e51e1b734f510c99b07dfbc7bbbb48f7e" integrity sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw== @@ -209,6 +235,17 @@ "@jridgewell/trace-mapping" "^0.3.28" jsesc "^3.0.2" +"@babel/generator@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.29.7.tgz#cca0b8827e6bcf3ba176788e7f3b180ad6db2fa3" + integrity sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ== + dependencies: + "@babel/parser" "^7.29.7" + "@babel/types" "^7.29.7" + "@jridgewell/gen-mapping" "^0.3.12" + "@jridgewell/trace-mapping" "^0.3.28" + jsesc "^3.0.2" + "@babel/helper-annotate-as-pure@^7.22.5", "@babel/helper-annotate-as-pure@^7.27.1", "@babel/helper-annotate-as-pure@^7.27.3": version "7.27.3" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz#f31fd86b915fc4daf1f3ac6976c59be7084ed9c5" @@ -227,6 +264,17 @@ lru-cache "^5.1.1" semver "^6.3.1" +"@babel/helper-compilation-targets@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz#7a1def704302401c47f64fa85589e974ae217042" + integrity sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g== + dependencies: + "@babel/compat-data" "^7.29.7" + "@babel/helper-validator-option" "^7.29.7" + browserslist "^4.24.0" + lru-cache "^5.1.1" + semver "^6.3.1" + "@babel/helper-create-class-features-plugin@^7.27.1", "@babel/helper-create-class-features-plugin@^7.28.3": version "7.28.5" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.5.tgz#472d0c28028850968979ad89f173594a6995da46" @@ -265,6 +313,11 @@ resolved "https://registry.yarnpkg.com/@babel/helper-globals/-/helper-globals-7.28.0.tgz#b9430df2aa4e17bc28665eadeae8aa1d985e6674" integrity sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw== +"@babel/helper-globals@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/helper-globals/-/helper-globals-7.29.7.tgz#f04a96fbd8473241b1079243f5b3f03a3010ab7b" + integrity sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA== + "@babel/helper-member-expression-to-functions@^7.27.1", "@babel/helper-member-expression-to-functions@^7.28.5": version "7.28.5" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.28.5.tgz#f3e07a10be37ed7a63461c63e6929575945a6150" @@ -281,6 +334,14 @@ "@babel/traverse" "^7.27.1" "@babel/types" "^7.27.1" +"@babel/helper-module-imports@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz#ef25048a518e828d7393fac5882ddd73921d7396" + integrity sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g== + dependencies: + "@babel/traverse" "^7.29.7" + "@babel/types" "^7.29.7" + "@babel/helper-module-transforms@^7.27.1", "@babel/helper-module-transforms@^7.28.3": version "7.28.3" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz#a2b37d3da3b2344fe085dab234426f2b9a2fa5f6" @@ -290,6 +351,15 @@ "@babel/helper-validator-identifier" "^7.27.1" "@babel/traverse" "^7.28.3" +"@babel/helper-module-transforms@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz#b062747a5997ba138637201328bbff77960574ae" + integrity sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg== + dependencies: + "@babel/helper-module-imports" "^7.29.7" + "@babel/helper-validator-identifier" "^7.29.7" + "@babel/traverse" "^7.29.7" + "@babel/helper-optimise-call-expression@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz#c65221b61a643f3e62705e5dd2b5f115e35f9200" @@ -338,6 +408,11 @@ resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz#54da796097ab19ce67ed9f88b47bb2ec49367687" integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA== +"@babel/helper-string-parser@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz#7f0871d99824d23137d60f86fcf6130fd5a1b51f" + integrity sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw== + "@babel/helper-validator-identifier@^7.25.9", "@babel/helper-validator-identifier@^7.29.7": version "7.29.7" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz#bd87084ced0c796ec46bda492de6e83d29e89fc2" @@ -353,6 +428,11 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz#fa52f5b1e7db1ab049445b421c4471303897702f" integrity sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg== +"@babel/helper-validator-option@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz#cf315be940213b354eb4abcc0bd01ebe3f73bc2a" + integrity sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw== + "@babel/helper-wrap-function@^7.27.1": version "7.28.3" resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.28.3.tgz#fe4872092bc1438ffd0ce579e6f699609f9d0a7a" @@ -370,6 +450,14 @@ "@babel/template" "^7.27.2" "@babel/types" "^7.28.4" +"@babel/helpers@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.29.7.tgz#45abfde7548997e34376c3e69feb475cffb4a607" + integrity sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg== + dependencies: + "@babel/template" "^7.29.7" + "@babel/types" "^7.29.7" + "@babel/highlight@^7.10.4": version "7.25.9" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.25.9.tgz#8141ce68fc73757946f983b343f1231f4691acc6" @@ -387,6 +475,13 @@ dependencies: "@babel/types" "^7.28.5" +"@babel/parser@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.29.7.tgz#837b87387cbf5ec5530cb634b3c622f68edb9334" + integrity sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg== + dependencies: + "@babel/types" "^7.29.7" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.28.5": version "7.28.5" resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.28.5.tgz#fbde57974707bbfa0376d34d425ff4fa6c732421" @@ -1039,6 +1134,15 @@ "@babel/parser" "^7.27.2" "@babel/types" "^7.27.1" +"@babel/template@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.29.7.tgz#4d9d4004f645cdd304de958c725162784ecac700" + integrity sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg== + dependencies: + "@babel/code-frame" "^7.29.7" + "@babel/parser" "^7.29.7" + "@babel/types" "^7.29.7" + "@babel/traverse@^7.27.1", "@babel/traverse@^7.28.0", "@babel/traverse@^7.28.3", "@babel/traverse@^7.28.4", "@babel/traverse@^7.28.5", "@babel/traverse@^7.4.5": version "7.28.5" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.28.5.tgz#450cab9135d21a7a2ca9d2d35aa05c20e68c360b" @@ -1052,6 +1156,19 @@ "@babel/types" "^7.28.5" debug "^4.3.1" +"@babel/traverse@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.29.7.tgz#c47b07a41b95da0907d026b5dd894d98de7d2f2d" + integrity sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw== + dependencies: + "@babel/code-frame" "^7.29.7" + "@babel/generator" "^7.29.7" + "@babel/helper-globals" "^7.29.7" + "@babel/parser" "^7.29.7" + "@babel/template" "^7.29.7" + "@babel/types" "^7.29.7" + debug "^4.3.1" + "@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.27.1", "@babel/types@^7.27.3", "@babel/types@^7.28.2", "@babel/types@^7.28.4", "@babel/types@^7.28.5", "@babel/types@^7.4.4": version "7.28.5" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.28.5.tgz#10fc405f60897c35f07e85493c932c7b5ca0592b" @@ -1060,6 +1177,14 @@ "@babel/helper-string-parser" "^7.27.1" "@babel/helper-validator-identifier" "^7.28.5" +"@babel/types@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.29.7.tgz#8005e31d82712ee7adaef6e23c63b71a62770a92" + integrity sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA== + dependencies: + "@babel/helper-string-parser" "^7.29.7" + "@babel/helper-validator-identifier" "^7.29.7" + "@bramus/specificity@^2.4.2": version "2.4.2" resolved "https://registry.yarnpkg.com/@bramus/specificity/-/specificity-2.4.2.tgz#aa8db8eb173fdee7324f82284833106adeecc648" @@ -1889,18 +2014,6 @@ "@emurgo/cardano-serialization-lib-browser" "^13.2.0" "@emurgo/cardano-serialization-lib-nodejs" "13.2.0" -"@gar/promisify@^1.0.1": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" - integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== - -"@githubprimer/octicons-react@^8.5.0": - version "8.5.0" - resolved "https://registry.yarnpkg.com/@githubprimer/octicons-react/-/octicons-react-8.5.0.tgz#f3c9639b8efcd2789761822b7ac7715dd810b4c2" - integrity sha512-Tb9Nu4usHON3EGiyCnppNQoJmSJvhUw+iD1URpOsoc69YWv96jIcxUAU4/Tw/D6ydzOubf3H9kPdLKVqz8XOnQ== - dependencies: - prop-types "^15.6.1" - "@graphql-tools/batch-execute@8.5.1": version "8.5.1" resolved "https://registry.yarnpkg.com/@graphql-tools/batch-execute/-/batch-execute-8.5.1.tgz#fa3321d58c64041650be44250b1ebc3aab0ba7a9" @@ -2267,22 +2380,6 @@ resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-2.0.1.tgz#fc1a928061d1232b0a52bb754393c37a5216c89e" integrity sha512-XlOlEbQcE9fmuXxrVTXCTlG2nlRXa9Rj3rr5Ue/+tX+nmkgbX720YHh0VR3hBF9xDvwnb8D2shVGOwNx+ulArw== -"@npmcli/fs@^1.0.0": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-1.1.1.tgz#72f719fe935e687c56a4faecf3c03d06ba593257" - integrity sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ== - dependencies: - "@gar/promisify" "^1.0.1" - semver "^7.3.5" - -"@npmcli/move-file@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674" - integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg== - dependencies: - mkdirp "^1.0.4" - rimraf "^3.0.2" - "@openzeppelin/contracts@^2.3.0", "@openzeppelin/contracts@^2.4.0": version "2.5.1" resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-2.5.1.tgz#c76e3fc57aa224da3718ec351812a4251289db31" @@ -2413,6 +2510,13 @@ pocket-js-core "0.0.3" web3-provider-engine "16.0.1" +"@primer/octicons-react@^9.6.0": + version "9.6.0" + resolved "https://registry.yarnpkg.com/@primer/octicons-react/-/octicons-react-9.6.0.tgz#996f621cb063757a4985cd6b45e59ed00e3444bf" + integrity sha512-FR0fiU1UY1ds5ZMCUY+iVkkm1Eh4yDHf2ui+cxB3VvYX23DAdUAohPGit+qaMFy2caDd7uWYGRZduKS7dW1FZQ== + dependencies: + prop-types "^15.6.1" + "@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": version "1.1.2" resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf" @@ -3853,11 +3957,6 @@ dependencies: "@babel/runtime" "^7.12.5" -"@tootallnate/once@1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" - integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== - "@trezor/analytics@1.5.0": version "1.5.0" resolved "https://registry.yarnpkg.com/@trezor/analytics/-/analytics-1.5.0.tgz#659a9b62e170e0d57b902313f806ad9801f1d494" @@ -4922,11 +5021,6 @@ "@xrplf/isomorphic" "^1.0.1" ripple-keypairs "^2.0.0" -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - abort-controller@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" @@ -5040,33 +5134,11 @@ aes-js@3.0.0: resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" integrity sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw== -agent-base@6, agent-base@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - agent-base@^7.1.2: version "7.1.4" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.4.tgz#e3cd76d4c548ee895d3c3fd8dc1f6c5b9032e7a8" integrity sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ== -agentkeepalive@^4.1.3: - version "4.6.0" - resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.6.0.tgz#35f73e94b3f40bf65f105219c623ad19c136ea6a" - integrity sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ== - dependencies: - humanize-ms "^1.2.1" - -aggregate-error@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" - integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== - dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" - ajv-formats@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" @@ -5341,24 +5413,11 @@ app-module-path@^2.2.0: resolved "https://registry.yarnpkg.com/app-module-path/-/app-module-path-2.2.0.tgz#641aa55dfb7d6a6f0a8141c4b9c0aa50b6c24dd5" integrity sha512-gkco+qxENJV+8vFcDiiFhuoSvRXb2a/QPqpSoWhVz829VNJfOTnELbBmPmNKFxf3xdNnw4DWCkzkDaavcX/1YQ== -"aproba@^1.0.3 || ^2.0.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.1.0.tgz#75500a190313d95c64e871e7e4284c6ac219f0b1" - integrity sha512-tLIEcj5GuR2RSTnxNKdkK0dJ/GrC7P38sUkiDmDuHfsHmbagTFAxDVIBltoklXEVIQ/f14IL8IMJ5pn9Hez1Ew== - arch@^2.1.2: version "2.2.0" resolved "https://registry.yarnpkg.com/arch/-/arch-2.2.0.tgz#1bc47818f305764f23ab3306b0bfc086c5a29d11" integrity sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ== -are-we-there-yet@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz#679df222b278c64f2cdba1175cdc00b0d96164bd" - integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg== - dependencies: - delegates "^1.0.0" - readable-stream "^3.6.0" - argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -5923,15 +5982,6 @@ bl@^1.0.0: readable-stream "^2.3.5" safe-buffer "^5.1.1" -bl@^4.0.3: - version "4.1.0" - resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" - integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== - dependencies: - buffer "^5.5.0" - inherits "^2.0.4" - readable-stream "^3.4.0" - blake-hash@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/blake-hash/-/blake-hash-2.0.0.tgz#af184dce641951126d05b7d1c3de3224f538d66e" @@ -6286,30 +6336,6 @@ cac@^6.7.14: resolved "https://registry.yarnpkg.com/cac/-/cac-6.7.14.tgz#804e1e6f506ee363cb0e3ccbb09cad5dd9870959" integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ== -cacache@^15.2.0: - version "15.3.0" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.3.0.tgz#dc85380fb2f556fe3dda4c719bfa0ec875a7f1eb" - integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ== - dependencies: - "@npmcli/fs" "^1.0.0" - "@npmcli/move-file" "^1.0.1" - chownr "^2.0.0" - fs-minipass "^2.0.0" - glob "^7.1.4" - infer-owner "^1.0.4" - lru-cache "^6.0.0" - minipass "^3.1.1" - minipass-collect "^1.0.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.2" - mkdirp "^1.0.3" - p-map "^4.0.0" - promise-inflight "^1.0.1" - rimraf "^3.0.2" - ssri "^8.0.1" - tar "^6.0.2" - unique-filename "^1.1.1" - cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" @@ -6609,30 +6635,6 @@ checkpoint-store@^1.1.0: dependencies: functional-red-black-tree "^1.0.1" -cheerio-select-tmp@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/cheerio-select-tmp/-/cheerio-select-tmp-0.1.1.tgz#55bbef02a4771710195ad736d5e346763ca4e646" - integrity sha512-YYs5JvbpU19VYJyj+F7oYrIE2BOll1/hRU7rEy/5+v9BzkSo3bK81iAeeQEMI92vRIxz677m72UmJUiVwwgjfQ== - dependencies: - css-select "^3.1.2" - css-what "^4.0.0" - domelementtype "^2.1.0" - domhandler "^4.0.0" - domutils "^2.4.4" - -cheerio@1.0.0-rc.5: - version "1.0.0-rc.5" - resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.5.tgz#88907e1828674e8f9fee375188b27dadd4f0fa2f" - integrity sha512-yoqps/VCaZgN4pfXtenwHROTp8NG6/Hlt4Jpz2FEP0ZJQ+ZUkVDd0hAPDNKhj3nakpfPt/CNs57yEtxD1bXQiw== - dependencies: - cheerio-select-tmp "^0.1.0" - dom-serializer "~1.2.0" - domhandler "^4.0.0" - entities "~2.1.0" - htmlparser2 "^6.0.0" - parse5 "^6.0.0" - parse5-htmlparser2-tree-adapter "^6.0.0" - chokidar@3.5.3: version "3.5.3" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" @@ -6705,16 +6707,11 @@ chokidar@^4.0.0: dependencies: readdirp "^4.0.1" -chownr@^1.1.1, chownr@^1.1.4: +chownr@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== -chownr@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" - integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== - ci-info@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" @@ -6760,11 +6757,6 @@ classnames@^2.3.1: resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.5.1.tgz#ba774c614be0f016da105c858e7159eae8e7687b" integrity sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow== -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== - cli-cursor@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" @@ -6936,11 +6928,6 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -color-support@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" - integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== - colors@1.4.0, colors@^1.1.2: version "1.4.0" resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" @@ -7029,11 +7016,6 @@ console-browserify@^1.1.0: resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== -console-control-strings@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== - constant-case@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/constant-case/-/constant-case-2.0.0.tgz#4175764d389d3fa9c8ecd29186ed6005243b6a46" @@ -7310,17 +7292,6 @@ css-select@^2.0.0: domutils "^1.7.0" nth-check "^1.0.2" -css-select@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-3.1.2.tgz#d52cbdc6fee379fba97fb0d3925abbd18af2d9d8" - integrity sha512-qmss1EihSuBNWNNhHjxzxSfJoFBM/lERB/Q4EnsJQQC62R2evJDW481091oAdOr9uh46/0n4nrg0It5cAnj1RA== - dependencies: - boolbase "^1.0.0" - css-what "^4.0.0" - domhandler "^4.0.0" - domutils "^2.4.3" - nth-check "^2.0.0" - css-to-react-native@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/css-to-react-native/-/css-to-react-native-3.2.0.tgz#cdd8099f71024e149e4f6fe17a7d46ecd55f1e32" @@ -7359,11 +7330,6 @@ css-what@^3.2.1: resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.4.2.tgz#ea7026fcb01777edbde52124e21f327e7ae950e4" integrity sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ== -css-what@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-4.0.0.tgz#35e73761cab2eeb3d3661126b23d7aa0e8432233" - integrity sha512-teijzG7kwYfNVsUh2H/YN62xW3KK9YhXEgSlbxMlcyjPNvdKJqFx5lrwlJgoFP1ZHlB89iGDlo/JyshKeRhv5A== - css.escape@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb" @@ -7530,13 +7496,6 @@ debug@3.1.0, debug@=3.1.0: dependencies: ms "2.0.0" -debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.3, debug@^4.3.4, debug@^4.4.1: - version "4.4.3" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" - integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== - dependencies: - ms "^2.1.3" - debug@4.3.2: version "4.3.2" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" @@ -7558,6 +7517,13 @@ debug@^3.1.0, debug@^3.2.7: dependencies: ms "^2.1.1" +debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.4, debug@^4.4.1: + version "4.4.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" + integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== + dependencies: + ms "^2.1.3" + decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" @@ -7655,11 +7621,6 @@ deep-eql@^5.0.1: resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-5.0.2.tgz#4b756d8d770a9257300825d52a2c2cff99c3a341" integrity sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q== -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - deep-is@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" @@ -7745,11 +7706,6 @@ delegate@^3.1.2: resolved "https://registry.yarnpkg.com/delegate/-/delegate-3.2.0.tgz#b66b71c3158522e8ab5744f720d8ca0c2af59166" integrity sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw== -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== - delimit-stream@0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/delimit-stream/-/delimit-stream-0.1.0.tgz#9b8319477c0e5f8aeb3ce357ae305fc25ea1cd2b" @@ -7798,11 +7754,6 @@ detect-libc@^1.0.3: resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" integrity sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg== -detect-libc@^2.0.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.1.2.tgz#689c5dcdc1900ef5583a4cb9f6d7b473742074ad" - integrity sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ== - did-resolver@^3.0.2: version "3.2.2" resolved "https://registry.yarnpkg.com/did-resolver/-/did-resolver-3.2.2.tgz#6f4e252a810f785d1b28a10265fad6dffee25158" @@ -7877,24 +7828,6 @@ dom-serializer@0: domelementtype "^2.0.1" entities "^2.0.0" -dom-serializer@^1.0.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" - integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== - dependencies: - domelementtype "^2.0.1" - domhandler "^4.2.0" - entities "^2.0.0" - -dom-serializer@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.2.0.tgz#3433d9136aeb3c627981daa385fc7f32d27c48f1" - integrity sha512-n6kZFH/KlCrqs/1GHMOd5i2fd/beQHuehKdWvNNffbGHTr/almdhuVvTVFb3V7fglz+nC50fFusu3lY33h12pA== - dependencies: - domelementtype "^2.0.1" - domhandler "^4.0.0" - entities "^2.0.0" - dom-walk@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" @@ -7915,18 +7848,11 @@ domelementtype@1: resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== -domelementtype@^2.0.1, domelementtype@^2.1.0, domelementtype@^2.2.0: +domelementtype@^2.0.1: version "2.3.0" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== -domhandler@^4.0.0, domhandler@^4.2.0: - version "4.3.1" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" - integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== - dependencies: - domelementtype "^2.2.0" - domutils@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" @@ -7935,15 +7861,6 @@ domutils@^1.7.0: dom-serializer "0" domelementtype "1" -domutils@^2.4.3, domutils@^2.4.4, domutils@^2.5.2: - version "2.8.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" - integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== - dependencies: - dom-serializer "^1.0.1" - domelementtype "^2.2.0" - domhandler "^4.2.0" - dot-case@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-2.1.1.tgz#34dcf37f50a8e93c2b3bca8bb7fb9155c7da3bee" @@ -8104,14 +8021,14 @@ encoding-down@^6.3.0: level-codec "^9.0.0" level-errors "^2.0.0" -encoding@^0.1.11, encoding@^0.1.12: +encoding@^0.1.11: version "0.1.13" resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== dependencies: iconv-lite "^0.6.2" -end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1: +end-of-stream@^1.0.0, end-of-stream@^1.1.0: version "1.4.5" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.5.tgz#7344d711dea40e0b74abc2ed49778743ccedb08c" integrity sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg== @@ -8153,12 +8070,7 @@ entities@^8.0.0: resolved "https://registry.yarnpkg.com/entities/-/entities-8.0.0.tgz#c1df5fe3602429747fa233d0dd26f142f0ce4743" integrity sha512-zwfzJecQ/Uej6tusMqwAqU/6KL2XaB2VZ2Jg54Je6ahNBGNH6Ek6g3jjNCF0fG9EWQKGZNddNjU5F1ZQn/sBnA== -entities@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.1.0.tgz#992d3129cf7df6870b96c57858c249a120f8b8b5" - integrity sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w== - -env-paths@^2.2.0, env-paths@^2.2.1: +env-paths@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== @@ -8168,11 +8080,6 @@ eol@^0.9.1: resolved "https://registry.yarnpkg.com/eol/-/eol-0.9.1.tgz#f701912f504074be35c6117a5c4ade49cd547acd" integrity sha512-Ds/TEoZjwggRoz/Q2O7SE3i4Jm66mqTDfmdHdq/7DKVk3bro9Q8h6WdXKdPqFLMoqxrDK5SVRzHVPOS6uuGtrg== -err-code@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" - integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== - errno@^0.1.3, errno@~0.1.1: version "0.1.8" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" @@ -8644,10 +8551,10 @@ eslint-scope@^5.1.1: esrecurse "^4.3.0" estraverse "^4.1.1" -eslint-utils@^1.4.1, eslint-utils@^2.1.0: - version "1.4.3" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" - integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== +eslint-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" + integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== dependencies: eslint-visitor-keys "^1.1.0" @@ -9454,11 +9361,6 @@ expand-range@^1.8.1: dependencies: fill-range "^2.1.0" -expand-template@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" - integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== - expect-type@^1.2.1: version "1.4.0" resolved "https://registry.yarnpkg.com/expect-type/-/expect-type-1.4.0.tgz#24edf7f0cc69a44d008567ba4594ab96f3c3a3d6" @@ -9938,13 +9840,6 @@ fs-minipass@^1.2.7: dependencies: minipass "^2.6.0" -fs-minipass@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" - integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== - dependencies: - minipass "^3.0.0" - fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" @@ -10020,20 +9915,6 @@ ganache@7.9.1: bufferutil "4.0.5" utf-8-validate "5.0.7" -gauge@^4.0.3: - version "4.0.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce" - integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg== - dependencies: - aproba "^1.0.3 || ^2.0.0" - color-support "^1.1.3" - console-control-strings "^1.1.0" - has-unicode "^2.0.1" - signal-exit "^3.0.7" - string-width "^4.2.3" - strip-ansi "^6.0.1" - wide-align "^1.1.5" - generator-function@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/generator-function/-/generator-function-2.0.1.tgz#0e75dd410d1243687a0ba2e951b94eedb8f737a2" @@ -10138,11 +10019,6 @@ getpass@^0.1.1: dependencies: assert-plus "^1.0.0" -github-from-package@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" - integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== - glob-base@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" @@ -10197,7 +10073,7 @@ glob@7.2.0: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.1.3, glob@^7.1.4: +glob@^7.1.3: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -10324,7 +10200,7 @@ got@^7.1.0: url-parse-lax "^1.0.0" url-to-options "^1.0.1" -graceful-fs@^4.1.10, graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.6: +graceful-fs@^4.1.10, graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0: version "4.2.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== @@ -10424,11 +10300,6 @@ has-tostringtag@^1.0.2: dependencies: has-symbols "^1.0.3" -has-unicode@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== - has-value@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" @@ -10573,17 +10444,7 @@ html-parse-stringify@^3.0.1: dependencies: void-elements "3.1.0" -htmlparser2@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" - integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== - dependencies: - domelementtype "^2.0.1" - domhandler "^4.0.0" - domutils "^2.5.2" - entities "^2.0.0" - -http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.0: +http-cache-semantics@^4.0.0: version "4.2.0" resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz#205f4db64f8562b76a4ff9235aa5279839a09dd5" integrity sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ== @@ -10604,15 +10465,6 @@ http-https@^1.0.0: resolved "https://registry.yarnpkg.com/http-https/-/http-https-1.0.0.tgz#2f908dd5f1db4068c058cd6e6d4ce392c913389b" integrity sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg== -http-proxy-agent@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" - integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== - dependencies: - "@tootallnate/once" "1" - agent-base "6" - debug "4" - http-signature@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" @@ -10652,26 +10504,11 @@ https-browserify@^1.0.0: resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" integrity sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg== -https-proxy-agent@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" - integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== - dependencies: - agent-base "6" - debug "4" - human-signals@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== -humanize-ms@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" - integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== - dependencies: - ms "^2.0.0" - i18next-browser-languagedetector@^6.1.2: version "6.1.8" resolved "https://registry.yarnpkg.com/i18next-browser-languagedetector/-/i18next-browser-languagedetector-6.1.8.tgz#8e9c61b32a4dfe9b959b38bc9d2a8b95f799b27c" @@ -10770,11 +10607,6 @@ indent-string@^4.0.0: resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== -infer-owner@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" - integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== - inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -10798,11 +10630,6 @@ ini@1.3.7: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.7.tgz#a09363e1911972ea16d7a8851005d84cf09a9a84" integrity sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ== -ini@~1.3.0: - version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - int64-buffer@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/int64-buffer/-/int64-buffer-1.1.0.tgz#7ebe9822196a93bbedf93ec6b73b569561b5ae3a" @@ -11112,11 +10939,6 @@ is-installed-globally@^0.3.2: global-dirs "^2.0.1" is-path-inside "^3.0.1" -is-lambda@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" - integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== - is-lower-case@^1.1.0: version "1.1.3" resolved "https://registry.yarnpkg.com/is-lower-case/-/is-lower-case-1.1.3.tgz#7e147be4768dc466db3bfb21cc60b31e6ad69393" @@ -12120,11 +11942,6 @@ lodash-es@^4.2.1: resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.22.tgz#eb7d123ec2470d69b911abe34f85cb694849b346" integrity sha512-XEawp1t0gxSi9x01glktRZ5HDy0HXqrM0x5pXQM98EaI0NxO6jVM7omDOxsuEo5UIASAnm2bRp1Jt/e0a2XU8Q== -lodash._reinterpolate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" - integrity sha512-xYHt68QRoYGjeeM/XOE1uJtvXQAgvszfBhjV4yvsQH0u2i9I6cI6c6/eG4Hh3UAOVn0y/xAXwmTzEay49Q//HA== - lodash.assign@^4.0.3, lodash.assign@^4.0.6: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" @@ -12155,21 +11972,6 @@ lodash.sortby@^4.7.0: resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" integrity sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA== -lodash.template@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" - integrity sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A== - dependencies: - lodash._reinterpolate "^3.0.0" - lodash.templatesettings "^4.0.0" - -lodash.templatesettings@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz#e481310f049d3cf6d47e912ad09313b154f0fb33" - integrity sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ== - dependencies: - lodash._reinterpolate "^3.0.0" - lodash.truncate@^4.4.2: version "4.4.2" resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" @@ -12329,28 +12131,6 @@ make-dir@^1.0.0: dependencies: pify "^3.0.0" -make-fetch-happen@^9.1.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz#53085a09e7971433e6765f7971bf63f4e05cb968" - integrity sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg== - dependencies: - agentkeepalive "^4.1.3" - cacache "^15.2.0" - http-cache-semantics "^4.1.0" - http-proxy-agent "^4.0.1" - https-proxy-agent "^5.0.0" - is-lambda "^1.0.1" - lru-cache "^6.0.0" - minipass "^3.1.3" - minipass-collect "^1.0.2" - minipass-fetch "^1.3.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - negotiator "^0.6.2" - promise-retry "^2.0.1" - socks-proxy-agent "^6.0.0" - ssri "^8.0.0" - map-age-cleaner@^0.1.1: version "0.1.3" resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" @@ -12635,45 +12415,6 @@ minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5, minimist@^1.2.6: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== -minipass-collect@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" - integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== - dependencies: - minipass "^3.0.0" - -minipass-fetch@^1.3.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-1.4.1.tgz#d75e0091daac1b0ffd7e9d41629faff7d0c1f1b6" - integrity sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw== - dependencies: - minipass "^3.1.0" - minipass-sized "^1.0.3" - minizlib "^2.0.0" - optionalDependencies: - encoding "^0.1.12" - -minipass-flush@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" - integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== - dependencies: - minipass "^3.0.0" - -minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" - integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== - dependencies: - minipass "^3.0.0" - -minipass-sized@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" - integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== - dependencies: - minipass "^3.0.0" - minipass@^2.6.0, minipass@^2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" @@ -12682,18 +12423,6 @@ minipass@^2.6.0, minipass@^2.9.0: safe-buffer "^5.1.2" yallist "^3.0.0" -minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3: - version "3.3.6" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" - integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== - dependencies: - yallist "^4.0.0" - -minipass@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" - integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== - minizlib@^1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" @@ -12701,14 +12430,6 @@ minizlib@^1.3.3: dependencies: minipass "^2.9.0" -minizlib@^2.0.0, minizlib@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" - integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== - dependencies: - minipass "^3.0.0" - yallist "^4.0.0" - mixin-deep@^1.2.0: version "1.3.2" resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" @@ -12730,11 +12451,6 @@ mixin-object@^2.0.1: for-in "^0.1.3" is-extendable "^0.1.1" -mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" - integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== - mkdirp-promise@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz#e9b8f68e552c68a9c1713b84883f7a1dd039b8a1" @@ -12761,7 +12477,7 @@ mkdirp@^0.5.4, mkdirp@^0.5.5, mkdirp@~0.5.0, mkdirp@~0.5.1: dependencies: minimist "^1.2.6" -mkdirp@^1.0.3, mkdirp@^1.0.4: +mkdirp@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== @@ -12819,7 +12535,7 @@ module-error@^1.0.1: resolved "https://registry.yarnpkg.com/module-error/-/module-error-1.0.2.tgz#8d1a48897ca883f47a45816d4fb3e3c6ba404d86" integrity sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA== -moment@^2.18.1, moment@^2.29.1: +moment@^2.29.1: version "2.30.1" resolved "https://registry.yarnpkg.com/moment/-/moment-2.30.1.tgz#f8c91c07b7a786e30c59926df530b4eac96974ae" integrity sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how== @@ -12834,7 +12550,7 @@ ms@2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@2.1.3, ms@^2.0.0, ms@^2.1.1, ms@^2.1.3: +ms@2.1.3, ms@^2.1.1, ms@^2.1.3: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== @@ -12921,11 +12637,6 @@ nanomatch@^1.2.9: snapdragon "^0.8.1" to-regex "^3.0.1" -napi-build-utils@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-2.0.0.tgz#13c22c0187fcfccce1461844136372a47ddc027e" - integrity sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA== - napi-macros@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.0.0.tgz#2b6bae421e7b96eb687aa6c77a7858640670001b" @@ -12941,11 +12652,6 @@ negotiator@0.6.3: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== -negotiator@^0.6.2: - version "0.6.4" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.4.tgz#777948e2452651c570b712dd01c23e262713fff7" - integrity sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w== - neo-async@^2.5.0: version "2.6.2" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" @@ -12968,13 +12674,6 @@ no-case@^2.2.0, no-case@^2.3.2: dependencies: lower-case "^1.1.1" -node-abi@^3.3.0: - version "3.85.0" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.85.0.tgz#b115d575e52b2495ef08372b058e13d202875a7d" - integrity sha512-zsFhmbkAzwhTft6nd3VxcG0cvJsT70rL+BIGHWVq5fi6MwGrHwzqKaxXE+Hl2GmnGItnDKPPkO5/LQqjVkIdFg== - dependencies: - semver "^7.3.5" - node-abort-controller@^3.0.1: version "3.1.1" resolved "https://registry.yarnpkg.com/node-abort-controller/-/node-abort-controller-3.1.1.tgz#a94377e964a9a37ac3976d848cb5c765833b8548" @@ -13052,22 +12751,6 @@ node-gyp-build@~4.1.0: resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.1.1.tgz#d7270b5d86717068d114cc57fff352f96d745feb" integrity sha512-dSq1xmcPDKPZ2EED2S6zw/b9NKsqzXRE6dVr8TVQnI3FJOTteUMuqF3Qqs6LZg+mLGYJWqQzMbIjMtJqTv87nQ== -node-gyp@8.x: - version "8.4.1" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-8.4.1.tgz#3d49308fc31f768180957d6b5746845fbd429937" - integrity sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w== - dependencies: - env-paths "^2.2.0" - glob "^7.1.4" - graceful-fs "^4.2.6" - make-fetch-happen "^9.1.0" - nopt "^5.0.0" - npmlog "^6.0.0" - rimraf "^3.0.2" - semver "^7.3.5" - tar "^6.1.2" - which "^2.0.2" - node-interval-tree@^1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/node-interval-tree/-/node-interval-tree-1.3.3.tgz#15ffb904cde08270214acace8dc7653e89ae32b7" @@ -13109,17 +12792,6 @@ node-releases@^2.0.27: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.27.tgz#eedca519205cf20f650f61d56b070db111231e4e" integrity sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA== -"node-sass@npm:sass@^1.32.0": - version "1.97.2" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.97.2.tgz#e515a319092fd2c3b015228e3094b40198bff0da" - integrity sha512-y5LWb0IlbO4e97Zr7c3mlpabcbBtS+ieiZ9iwDooShpFKWXf62zz5pEPdwrLYm+Bxn1fnbwFGzHuCLSA9tBmrw== - dependencies: - chokidar "^4.0.0" - immutable "^5.0.2" - source-map-js ">=0.6.2 <2.0.0" - optionalDependencies: - "@parcel/watcher" "^2.4.1" - node-stdlib-browser@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/node-stdlib-browser/-/node-stdlib-browser-1.3.1.tgz#f41fa554f720a3df951e40339f4d92ac512222ac" @@ -13163,13 +12835,6 @@ nofilter@^3.0.2: resolved "https://registry.yarnpkg.com/nofilter/-/nofilter-3.1.0.tgz#c757ba68801d41ff930ba2ec55bab52ca184aa66" integrity sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g== -nopt@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" - integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== - dependencies: - abbrev "1" - normalize-package-data@^2.3.2: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" @@ -13216,16 +12881,6 @@ npm-run-path@^4.0.0: dependencies: path-key "^3.0.0" -npmlog@^6.0.0: - version "6.0.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830" - integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== - dependencies: - are-we-there-yet "^3.0.0" - console-control-strings "^1.1.0" - gauge "^4.0.3" - set-blocking "^2.0.0" - nth-check@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" @@ -13233,13 +12888,6 @@ nth-check@^1.0.2: dependencies: boolbase "~1.0.0" -nth-check@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" - integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== - dependencies: - boolbase "^1.0.0" - number-is-nan@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" @@ -13576,13 +13224,6 @@ p-map@^2.0.0: resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== -p-map@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== - dependencies: - aggregate-error "^3.0.0" - p-timeout@^1.1.1: version "1.2.1" resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-1.2.1.tgz#5eb3b353b7fce99f101a1038880bb054ebbea386" @@ -13660,18 +13301,6 @@ parse-json@^4.0.0: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" -parse5-htmlparser2-tree-adapter@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz#2cdf9ad823321140370d4dbf5d3e92c7c8ddc6e6" - integrity sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA== - dependencies: - parse5 "^6.0.1" - -parse5@^6.0.0, parse5@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" - integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== - parse5@^8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/parse5/-/parse5-8.0.1.tgz#f43bcd2cd683efe084075333e9ce0da7d06da31e" @@ -14119,24 +13748,6 @@ preact@10.4.1: resolved "https://registry.yarnpkg.com/preact/-/preact-10.4.1.tgz#9b3ba020547673a231c6cf16f0fbaef0e8863431" integrity sha512-WKrRpCSwL2t3tpOOGhf2WfTpcmbpxaWtDbdJdKdjd0aEiTkvOmS4NBkG6kzlaAHI9AkQ3iVqbFWM3Ei7mZ4o1Q== -prebuild-install@^7.1.1: - version "7.1.3" - resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.3.tgz#d630abad2b147443f20a212917beae68b8092eec" - integrity sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug== - dependencies: - detect-libc "^2.0.0" - expand-template "^2.0.3" - github-from-package "0.0.0" - minimist "^1.2.3" - mkdirp-classic "^0.5.3" - napi-build-utils "^2.0.0" - node-abi "^3.3.0" - pump "^3.0.0" - rc "^1.2.7" - simple-get "^4.0.0" - tar-fs "^2.0.0" - tunnel-agent "^0.6.0" - precond@0.2: version "0.2.3" resolved "https://registry.yarnpkg.com/precond/-/precond-0.2.3.tgz#aa9591bcaa24923f1e0f4849d240f47efc1075ac" @@ -14191,19 +13802,6 @@ progress@^2.0.0: resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== -promise-inflight@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" - integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== - -promise-retry@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" - integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== - dependencies: - err-code "^2.0.2" - retry "^0.12.0" - promise-to-callback@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/promise-to-callback/-/promise-to-callback-1.0.0.tgz#5d2a749010bfb67d963598fcd3960746a68feef7" @@ -14478,23 +14076,6 @@ raw-body@~2.5.3: iconv-lite "~0.4.24" unpipe "~1.0.0" -rc@^1.2.7: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - -react-add-to-calendar@^0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/react-add-to-calendar/-/react-add-to-calendar-0.1.5.tgz#ab077fe98ca0f178a5a3b70a3590d4b630c0f275" - integrity sha512-DI+q3vvHCiYhxgh+83sg9UrPD9sdyBYcuY77UMcfX3y1MUPMW+f/w/6EG0MZg7B07vLQ4R6nxqk6wtMtcXOicA== - optionalDependencies: - moment "^2.18.1" - react-bootstrap@^1.0.0-beta.9: version "1.6.8" resolved "https://registry.yarnpkg.com/react-bootstrap/-/react-bootstrap-1.6.8.tgz#e9380d81cdb92c433f61b37a9120b8edd49912a1" @@ -14598,20 +14179,13 @@ react-router-dom@^6.30.4: "@remix-run/router" "1.23.3" react-router "6.30.4" -react-router@6.30.4, react-router@^6.30.4: +react-router@6.30.4: version "6.30.4" resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.30.4.tgz#638f35176527bd243d96d81d35d33b757bad46c2" integrity sha512-SVUsDe+DybHM/WmYKIVYhZh1o5Dcuf16yM6WjG02Q9XVFMZIJyHYhwrr6bFBXZkVP6z69kNkMyBCujt8FaFLJA== dependencies: "@remix-run/router" "1.23.3" -react-switch@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/react-switch/-/react-switch-5.0.1.tgz#449277f4c3aed5286fffd0f50d5cbc2a23330406" - integrity sha512-Pa5kvqRfX85QUCK1Jv0rxyeElbC3aNpCP5hV0LoJpU/Y6kydf0t4kRriQ6ZYA4kxWwAYk/cH51T4/sPzV9mCgQ== - dependencies: - prop-types "^15.6.2" - react-transition-group@^4.4.1: version "4.4.5" resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.5.tgz#e53d4e3f3344da8521489fbef8f2581d42becdd1" @@ -14687,7 +14261,7 @@ readable-stream@1.1.14, readable-stream@^1.0.33: isarray "0.0.1" string_decoder "~0.10.x" -"readable-stream@2 || 3", readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.5.0, readable-stream@^3.6.0: +"readable-stream@2 || 3", readable-stream@^3.4.0, readable-stream@^3.5.0, readable-stream@^3.6.0: version "3.6.2" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== @@ -15096,11 +14670,6 @@ retry@0.13.1: resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== -retry@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" - integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== - right-align@^0.1.1: version "0.1.3" resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" @@ -15687,7 +15256,7 @@ siginfo@^2.0.0: resolved "https://registry.yarnpkg.com/siginfo/-/siginfo-2.0.0.tgz#32e76c70b79724e3bb567cb9d543eb858ccfaf30" integrity sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g== -signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.7: +signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.7" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== @@ -15706,15 +15275,6 @@ simple-get@^2.7.0: once "^1.3.1" simple-concat "^1.0.0" -simple-get@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543" - integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA== - dependencies: - decompress-response "^6.0.0" - once "^1.3.1" - simple-concat "^1.0.0" - slice-ansi@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" @@ -15780,16 +15340,7 @@ socks-proxy-agent@8.0.5: debug "^4.3.4" socks "^2.8.3" -socks-proxy-agent@^6.0.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz#2687a31f9d7185e38d530bef1944fe1f1496d6ce" - integrity sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ== - dependencies: - agent-base "^6.0.2" - debug "^4.3.3" - socks "^2.6.2" - -socks@^2.6.2, socks@^2.8.3: +socks@^2.8.3: version "2.8.7" resolved "https://registry.yarnpkg.com/socks/-/socks-2.8.7.tgz#e2fb1d9a603add75050a2067db8c381a0b5669ea" integrity sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A== @@ -15952,18 +15503,6 @@ sprintf-js@~1.0.2: resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== -sqlite3@^5.1.6: - version "5.1.7" - resolved "https://registry.yarnpkg.com/sqlite3/-/sqlite3-5.1.7.tgz#59ca1053c1ab38647396586edad019b1551041b7" - integrity sha512-GGIyOiFaG+TUra3JIfkI/zGP8yZYLPQ0pl1bH+ODjiX57sPhrLU5sQJn1y9bDKZUFYkX1crlrPfSYt0BKKdkog== - dependencies: - bindings "^1.5.0" - node-addon-api "^7.0.0" - prebuild-install "^7.1.1" - tar "^6.1.11" - optionalDependencies: - node-gyp "8.x" - sshpk@^1.14.1, sshpk@^1.7.0: version "1.18.0" resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.18.0.tgz#1663e55cddf4d688b86a46b77f0d5fe363aba028" @@ -15979,13 +15518,6 @@ sshpk@^1.14.1, sshpk@^1.7.0: safer-buffer "^2.0.2" tweetnacl "~0.14.0" -ssri@^8.0.0, ssri@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" - integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== - dependencies: - minipass "^3.1.1" - stable@^0.1.8: version "0.1.8" resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" @@ -16078,15 +15610,6 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - string-width@^2.0.0, string-width@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" @@ -16104,6 +15627,15 @@ string-width@^3.0.0, string-width@^3.1.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^5.1.0" +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + string.prototype.includes@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz#eceef21283640761a81dbe16d6c7171a4edf7d92" @@ -16267,11 +15799,6 @@ strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1. resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== - strip-literal@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/strip-literal/-/strip-literal-3.1.0.tgz#222b243dd2d49c0bcd0de8906adbd84177196032" @@ -16462,16 +15989,6 @@ tapable@^0.2.7: resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.9.tgz#af2d8bbc9b04f74ee17af2b4d9048f807acd18a8" integrity sha512-2wsvQ+4GwBvLPLWsNfLCDYGsW6xb7aeC6utq2Qh0PFwgEy7K7dsma9Jsmb2zSQj7GvYAyUGSntLtsv++GmgL1A== -tar-fs@^2.0.0: - version "2.1.4" - resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.4.tgz#800824dbf4ef06ded9afea4acafe71c67c76b930" - integrity sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ== - dependencies: - chownr "^1.1.1" - mkdirp-classic "^0.5.2" - pump "^3.0.0" - tar-stream "^2.1.4" - tar-stream@^1.5.2: version "1.6.2" resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.6.2.tgz#8ea55dab37972253d9a9af90fdcd559ae435c555" @@ -16485,17 +16002,6 @@ tar-stream@^1.5.2: to-buffer "^1.1.1" xtend "^4.0.0" -tar-stream@^2.1.4: - version "2.2.0" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" - integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== - dependencies: - bl "^4.0.3" - end-of-stream "^1.4.1" - fs-constants "^1.0.0" - inherits "^2.0.3" - readable-stream "^3.1.1" - tar@^4.0.2: version "4.4.19" resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.19.tgz#2e4d7263df26f2b914dee10c825ab132123742f3" @@ -16509,18 +16015,6 @@ tar@^4.0.2: safe-buffer "^5.2.1" yallist "^3.1.1" -tar@^6.0.2, tar@^6.1.11, tar@^6.1.2: - version "6.2.1" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.1.tgz#717549c541bc3c2af15751bea94b1dd068d4b03a" - integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A== - dependencies: - chownr "^2.0.0" - fs-minipass "^2.0.0" - minipass "^5.0.0" - minizlib "^2.1.1" - mkdirp "^1.0.3" - yallist "^4.0.0" - testrpc@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/testrpc/-/testrpc-0.0.1.tgz#83e2195b1f5873aec7be1af8cbe6dcf39edb7aed" @@ -17075,20 +16569,6 @@ union-value@^1.0.0: is-extendable "^0.1.1" set-value "^2.0.1" -unique-filename@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" - integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== - dependencies: - unique-slug "^2.0.0" - -unique-slug@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" - integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== - dependencies: - imurmurhash "^0.1.4" - universalify@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" @@ -18801,7 +18281,7 @@ which@^1.2.9: dependencies: isexe "^2.0.0" -which@^2.0.1, which@^2.0.2: +which@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== @@ -18816,13 +18296,6 @@ why-is-node-running@^2.3.0: siginfo "^2.0.0" stackback "0.0.2" -wide-align@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" - integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== - dependencies: - string-width "^1.0.2 || 2 || 3 || 4" - wif@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/wif/-/wif-5.0.0.tgz#445e44b8f62e155144d1c970c01ca2ba3979cc3f" From c301869b4125fd3c57b4e9a8655c1b828c9970b5 Mon Sep 17 00:00:00 2001 From: Jesse Clark Date: Fri, 3 Jul 2026 13:25:31 +0300 Subject: [PATCH 06/10] Address requested changes --- src/app/tabs/error/ErrorTabComponent.js | 2 +- src/app/tabs/newAdmin/components/AdminTabComponent.js | 2 +- src/app/tabs/resolve/containers/ResolveContainer.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/app/tabs/error/ErrorTabComponent.js b/src/app/tabs/error/ErrorTabComponent.js index 283f4f85..4210c766 100644 --- a/src/app/tabs/error/ErrorTabComponent.js +++ b/src/app/tabs/error/ErrorTabComponent.js @@ -23,7 +23,7 @@ const ErrorTabComponent = ({ if (!notFound && hasContracts && hasWeb3Provider && !walletUnlocked) { rLoginConnect(); } - }, []); + }, [notFound, hasContracts, hasWeb3Provider, walletUnlocked, rLoginConnect]); if (notFound) { return ( diff --git a/src/app/tabs/newAdmin/components/AdminTabComponent.js b/src/app/tabs/newAdmin/components/AdminTabComponent.js index 0b0a9070..989498b5 100644 --- a/src/app/tabs/newAdmin/components/AdminTabComponent.js +++ b/src/app/tabs/newAdmin/components/AdminTabComponent.js @@ -31,7 +31,7 @@ const AdminComponent = ({ }) => { useEffect(() => { if (domain) start(); - }, []); + }, [domain, start]); if (enabling) { return ; diff --git a/src/app/tabs/resolve/containers/ResolveContainer.js b/src/app/tabs/resolve/containers/ResolveContainer.js index 12eb250a..bcdb0d00 100644 --- a/src/app/tabs/resolve/containers/ResolveContainer.js +++ b/src/app/tabs/resolve/containers/ResolveContainer.js @@ -13,7 +13,7 @@ const mapStateToProps = (state, ownProps) => ({ }); const mapDispatchToProps = dispatch => ({ - search: name => history.push(`resolve?name=${name}`), + search: name => history.push(`/resolve?name=${name}`), resolve: name => dispatch(searchAddressOrDomain(name.toLowerCase())), reset: () => dispatch(resetResolve()), }); From f9d8052a3b3a6c0e0e95185cbfdada29365bcbcd Mon Sep 17 00:00:00 2001 From: Bernardo Codesido Date: Fri, 3 Jul 2026 14:47:50 -0300 Subject: [PATCH 07/10] Add dependency review workflow --- .github/workflows/dependency-review.yml | 29 +++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 .github/workflows/dependency-review.yml diff --git a/.github/workflows/dependency-review.yml b/.github/workflows/dependency-review.yml new file mode 100644 index 00000000..94414cf7 --- /dev/null +++ b/.github/workflows/dependency-review.yml @@ -0,0 +1,29 @@ +# Dependency Review Action +# +# This Action will scan dependency manifest files that change as part of a Pull Request, +# surfacing known-vulnerable versions of the packages declared or updated in the PR. +# Once installed, if the workflow run is marked as required, +# PRs introducing known-vulnerable packages will be blocked from merging. +# +# Source repository: https://github.com/actions/dependency-review-action +name: 'Dependency Review' +on: [pull_request] + +# Declare default permissions as read only. +permissions: read-all + +jobs: + dependency-review: + runs-on: ubuntu-latest + permissions: + contents: read + pull-requests: write + steps: + - name: 'Checkout Repository' + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + + - name: 'Dependency Review' + uses: actions/dependency-review-action@a1d282b36b6f3519aa1f3fc636f609c47dddb294 # v5.0.0 + with: + fail-on-severity: high + comment-summary-in-pr: true \ No newline at end of file From 21f3baa5e3e3f16fab1baf025a1ac3603217e1a9 Mon Sep 17 00:00:00 2001 From: Bernardo Codesido Date: Fri, 3 Jul 2026 14:53:23 -0300 Subject: [PATCH 08/10] Update and pin actions --- .github/workflows/ci.yml | 4 ++-- .github/workflows/deploy.yml | 12 ++++++------ .github/workflows/gh-deploy.yml | 6 +++--- .github/workflows/qa-deploy.yml | 6 +++--- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e4d582ef..bde4f2e8 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -12,9 +12,9 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Use Node.js - uses: actions/setup-node@v4 + uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e #v6.4.0 with: node-version-file: '.nvmrc' - run: yarn install --frozen-lockfile diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 595c6a63..f79a4b99 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -15,10 +15,10 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Setup Node - uses: actions/setup-node@v4 + uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e #v6.4.0 with: node-version-file: '.nvmrc' @@ -31,7 +31,7 @@ jobs: yarn build:testnet - name: Configure AWS credentials - uses: aws-actions/configure-aws-credentials@v1 + uses: aws-actions/configure-aws-credentials@254c19bd240aabef8777f48595e9d2d7b972184b #v6.2.1 with: aws-access-key-id: ${{ secrets.TESTNET_AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.TESTNET_AWS_SECRET_ACCESS_KEY }} @@ -55,10 +55,10 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Setup Node - uses: actions/setup-node@v4 + uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e #v6.4.0 with: node-version-file: '.nvmrc' @@ -71,7 +71,7 @@ jobs: yarn build:mainnet - name: Configure AWS credentials - uses: aws-actions/configure-aws-credentials@v1 + uses: aws-actions/configure-aws-credentials@254c19bd240aabef8777f48595e9d2d7b972184b #v6.2.1 with: aws-access-key-id: ${{ secrets.MAINNET_AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.MAINNET_AWS_SECRET_ACCESS_KEY }} diff --git a/.github/workflows/gh-deploy.yml b/.github/workflows/gh-deploy.yml index 5d28520b..2f790f7a 100644 --- a/.github/workflows/gh-deploy.yml +++ b/.github/workflows/gh-deploy.yml @@ -18,12 +18,12 @@ jobs: steps: - name: Checkout 🛎️ - uses: actions/checkout@v4 # persist-credentials must be false in most cases for the deployment to work correctly. + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 # persist-credentials must be false in most cases for the deployment to work correctly. with: persist-credentials: false - name: Setup Node - uses: actions/setup-node@v4 + uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e #v6.4.0 with: node-version-file: '.nvmrc' @@ -34,7 +34,7 @@ jobs: yarn build:ghpages - name: Deploy 🚀 - uses: JamesIves/github-pages-deploy-action@v4.6.8 + uses: JamesIves/github-pages-deploy-action@d92aa235d04922e8f08b40ce78cc5442fcfbfa2f #v4.8.0 with: BRANCH: gh-pages # The branch the action should deploy to. FOLDER: build # The folder the action should deploy. diff --git a/.github/workflows/qa-deploy.yml b/.github/workflows/qa-deploy.yml index 4633cd05..c377515f 100644 --- a/.github/workflows/qa-deploy.yml +++ b/.github/workflows/qa-deploy.yml @@ -11,10 +11,10 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Setup Node - uses: actions/setup-node@v4 + uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e #v6.4.0 with: node-version-file: '.nvmrc' @@ -27,7 +27,7 @@ jobs: yarn build:mainnet - name: Configure AWS credentials - uses: aws-actions/configure-aws-credentials@v1 + uses: aws-actions/configure-aws-credentials@254c19bd240aabef8777f48595e9d2d7b972184b #v6.2.1 with: aws-access-key-id: ${{ secrets.QA_AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.QA_AWS_SECRET_ACCESS_KEY }} From 379652b2034fd71b0d46d3d740241817dedd72ef Mon Sep 17 00:00:00 2001 From: Bernardo Codesido Date: Fri, 3 Jul 2026 14:56:42 -0300 Subject: [PATCH 09/10] Configure codeql --- .github/workflows/codeql.yml | 48 ++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 .github/workflows/codeql.yml diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml new file mode 100644 index 00000000..eeea83db --- /dev/null +++ b/.github/workflows/codeql.yml @@ -0,0 +1,48 @@ +name: "CodeQL" + +on: + push: + branches: [ "main" ] + pull_request: + branches: [ "main" ] + schedule: + - cron: "0 0 * * *" + +# Declare default permissions as read only. +permissions: read-all + +jobs: + analyze: + name: Analyze + runs-on: ubuntu-latest + permissions: + actions: read + contents: read + security-events: write + + strategy: + fail-fast: false + matrix: + language: [javascript] + + steps: + - name: Checkout + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + + - name: Before Index (java) + if: ${{ matrix.language == 'java' }} + run: ./configure.sh + + - name: Initialize CodeQL + uses: github/codeql-action/init@8aad20d150bbac5944a9f9d289da16a4b0d87c1e # v4.36.2 + with: + languages: ${{ matrix.language }} + queries: +security-and-quality + + - name: Autobuild + uses: github/codeql-action/autobuild@8aad20d150bbac5944a9f9d289da16a4b0d87c1e # v4.36.2 + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@8aad20d150bbac5944a9f9d289da16a4b0d87c1e # v4.36.2 + with: + category: "/language:${{ matrix.language }}" \ No newline at end of file From 47a73d4555305feb2dc8681dc8886ca4aeff2d04 Mon Sep 17 00:00:00 2001 From: Bernardo Codesido Date: Fri, 3 Jul 2026 15:07:12 -0300 Subject: [PATCH 10/10] Configure Dependabot --- .github/dependabot.yml | 46 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 .github/dependabot.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 00000000..3f5cafde --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,46 @@ +version: 2 +updates: + # Maintain dependencies for GitHub Actions + - package-ecosystem: github-actions + directory: / + schedule: + interval: weekly + # Wait at least 10 days after a new version is released before opening a PR + cooldown: + default-days: 5 + # one PR per week that groups BOTH minor + patch updates + groups: + actions-updates: + patterns: + - "*" + update-types: + - minor + - patch + + # Maintain dependencies for npm and yarn + - package-ecosystem: npm + directory: / + schedule: + interval: weekly + # Wait at least 10 days after a new version is released before opening a PR + cooldown: + default-days: 5 + semver-major-days: 30 + semver-minor-days: 7 + semver-patch-days: 3 + # one PR per week that groups BOTH minor + patch updates + groups: + production-dependencies: + dependency-type: "production" + patterns: + - "*" + update-types: + - minor + - patch + development-dependencies: + dependency-type: "development" + patterns: + - "*" + update-types: + - minor + - patch \ No newline at end of file