From 68ad193a73fbe191f5828b7eec5b80d73b4f0bf2 Mon Sep 17 00:00:00 2001 From: Lathan Britz <jucallme@gmail.com> Date: Wed, 22 May 2024 12:29:41 -0400 Subject: [PATCH 01/79] breakdown tab for payments and offercreates --- package-lock.json | 101 ++++-- package.json | 3 +- public/locales/ca-CA/translations.json | 7 +- public/locales/en-US/translations.json | 7 +- .../BreakDownTab/breakDownTab.scss | 119 +++++++ .../Transactions/BreakDownTab/index.tsx | 303 ++++++++++++++++++ src/containers/Transactions/index.tsx | 10 + 7 files changed, 519 insertions(+), 31 deletions(-) create mode 100644 src/containers/Transactions/BreakDownTab/breakDownTab.scss create mode 100644 src/containers/Transactions/BreakDownTab/index.tsx diff --git a/package-lock.json b/package-lock.json index 7b1f75f3a..3d3492750 100644 --- a/package-lock.json +++ b/package-lock.json @@ -59,7 +59,8 @@ "vite-plugin-html": "^3.2.0", "vite-plugin-svgr": "^4.2.0", "vite-tsconfig-paths": "^4.2.0", - "xrpl-client": "^2.1.0" + "xrpl-client": "^2.1.0", + "xrpl-tx-path-parser": "github:shortthefomo/xrpl-tx-path-parser#dev" }, "devDependencies": { "@babel/eslint-parser": "^7.22.6", @@ -5351,7 +5352,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", - "dev": true, "dependencies": { "@noble/hashes": "1.3.2" }, @@ -5521,7 +5521,6 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.2.tgz", "integrity": "sha512-N1ZhksgwD3OBlwTv3R6KFEcPojl/W4ElJOeCZdi+vuI5QmTFwLq3OFf2zd2ROpKvxFdgZ6hUpb0dx9bVNEwYCA==", - "dev": true, "dependencies": { "@noble/curves": "~1.2.0", "@noble/hashes": "~1.3.2", @@ -5535,7 +5534,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.1.tgz", "integrity": "sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==", - "dev": true, "dependencies": { "@noble/hashes": "~1.3.0", "@scure/base": "~1.1.0" @@ -6878,12 +6876,33 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/@xrplf/secret-numbers/-/secret-numbers-1.0.0.tgz", "integrity": "sha512-qsCLGyqe1zaq9j7PZJopK+iGTGRbk6akkg6iZXJJgxKwck0C5x5Gnwlb1HKYGOwPKyrXWpV6a2YmcpNpUFctGg==", - "dev": true, "dependencies": { "@xrplf/isomorphic": "^1.0.0", "ripple-keypairs": "^2.0.0" } }, + "node_modules/@xrplkit/amount": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@xrplkit/amount/-/amount-1.2.3.tgz", + "integrity": "sha512-poV7ym7EhjAlEGym9Kc3AHuy3uuhVW3qnl2KDr8D4zk7hANj7aG6l1XdtWIAGAgBpHnvPEaOG7+llPRRv1irZw==", + "dependencies": { + "@xrplkit/xfl": "2.0.2" + } + }, + "node_modules/@xrplkit/txmeta": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@xrplkit/txmeta/-/txmeta-1.3.1.tgz", + "integrity": "sha512-iJNtLgXTpbuYBI0VDsXJhi3MHxmsCdWsI3OumETk+21HjxDw1AmPGmVHWu8q8turFth1qzRIAtHjxLHDl307sg==", + "dependencies": { + "@xrplkit/amount": "1.2.3", + "@xrplkit/xfl": "2.0.2" + } + }, + "node_modules/@xrplkit/xfl": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@xrplkit/xfl/-/xfl-2.0.2.tgz", + "integrity": "sha512-OUZZzSoXSxYxuhBcz08Wb9Xme71PkFYejk3vq4jPzdXreVhF71ZrM6nSObHFgasC8/srWKoqiS37CnB2Ht3k/g==" + }, "node_modules/abab": { "version": "2.0.5", "dev": true, @@ -9825,10 +9844,9 @@ } }, "node_modules/decimal.js": { - "version": "10.3.1", - "dev": true, - "license": "MIT", - "peer": true + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" }, "node_modules/decimal.js-light": { "version": "2.5.1", @@ -23893,7 +23911,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ripple-binary-codec/-/ripple-binary-codec-2.0.0.tgz", "integrity": "sha512-zakENc9A5dlW85uzrmQHrJehymhL59ftggboRNrjxFDJdlNJ6DSE210P3ys/9kL0oVtOzFnTrOPFfxHZeOsA/Q==", - "dev": true, "dependencies": { "@xrplf/isomorphic": "^1.0.0", "bignumber.js": "^9.0.0", @@ -23907,7 +23924,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ripple-keypairs/-/ripple-keypairs-2.0.0.tgz", "integrity": "sha512-b5rfL2EZiffmklqZk1W+dvSy97v3V/C7936WxCCgDynaGPp7GE6R2XO7EU9O2LlM/z95rj870IylYnOQs+1Rag==", - "dev": true, "dependencies": { "@noble/curves": "^1.0.0", "@xrplf/isomorphic": "^1.0.0", @@ -27964,7 +27980,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/xrpl/-/xrpl-3.0.0.tgz", "integrity": "sha512-QC+dNx3tvMEn9IrxcXFFa0rWwvBwACkGFNKl+W2miMGYnlgSiIsnjdqwtG2WRs0Pyxs5dd9nBTQHyQ1BPxZ78A==", - "dev": true, "dependencies": { "@scure/bip32": "^1.3.1", "@scure/bip39": "^1.2.1", @@ -27990,11 +28005,20 @@ "websocket": "^1.0.34" } }, + "node_modules/xrpl-tx-path-parser": { + "version": "1.0.4", + "resolved": "git+ssh://git@github.com/shortthefomo/xrpl-tx-path-parser.git#8f5f4d5bc3bc83c6fffedf9bfe172d5a3c9d1c76", + "license": "ISC", + "dependencies": { + "@xrplkit/txmeta": "^1.3.1", + "decimal.js": "^10.4.3", + "xrpl": "^3.0.0" + } + }, "node_modules/xrpl/node_modules/cross-fetch": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==", - "dev": true, "dependencies": { "node-fetch": "^2.6.12" } @@ -28002,8 +28026,7 @@ "node_modules/xrpl/node_modules/eventemitter3": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", - "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", - "dev": true + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==" }, "node_modules/y18n": { "version": "4.0.3", @@ -31558,7 +31581,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", - "dev": true, "requires": { "@noble/hashes": "1.3.2" } @@ -31665,7 +31687,6 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.2.tgz", "integrity": "sha512-N1ZhksgwD3OBlwTv3R6KFEcPojl/W4ElJOeCZdi+vuI5QmTFwLq3OFf2zd2ROpKvxFdgZ6hUpb0dx9bVNEwYCA==", - "dev": true, "requires": { "@noble/curves": "~1.2.0", "@noble/hashes": "~1.3.2", @@ -31676,7 +31697,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.1.tgz", "integrity": "sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==", - "dev": true, "requires": { "@noble/hashes": "~1.3.0", "@scure/base": "~1.1.0" @@ -32576,12 +32596,33 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/@xrplf/secret-numbers/-/secret-numbers-1.0.0.tgz", "integrity": "sha512-qsCLGyqe1zaq9j7PZJopK+iGTGRbk6akkg6iZXJJgxKwck0C5x5Gnwlb1HKYGOwPKyrXWpV6a2YmcpNpUFctGg==", - "dev": true, "requires": { "@xrplf/isomorphic": "^1.0.0", "ripple-keypairs": "^2.0.0" } }, + "@xrplkit/amount": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@xrplkit/amount/-/amount-1.2.3.tgz", + "integrity": "sha512-poV7ym7EhjAlEGym9Kc3AHuy3uuhVW3qnl2KDr8D4zk7hANj7aG6l1XdtWIAGAgBpHnvPEaOG7+llPRRv1irZw==", + "requires": { + "@xrplkit/xfl": "2.0.2" + } + }, + "@xrplkit/txmeta": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@xrplkit/txmeta/-/txmeta-1.3.1.tgz", + "integrity": "sha512-iJNtLgXTpbuYBI0VDsXJhi3MHxmsCdWsI3OumETk+21HjxDw1AmPGmVHWu8q8turFth1qzRIAtHjxLHDl307sg==", + "requires": { + "@xrplkit/amount": "1.2.3", + "@xrplkit/xfl": "2.0.2" + } + }, + "@xrplkit/xfl": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@xrplkit/xfl/-/xfl-2.0.2.tgz", + "integrity": "sha512-OUZZzSoXSxYxuhBcz08Wb9Xme71PkFYejk3vq4jPzdXreVhF71ZrM6nSObHFgasC8/srWKoqiS37CnB2Ht3k/g==" + }, "abab": { "version": "2.0.5", "dev": true @@ -34648,9 +34689,9 @@ } }, "decimal.js": { - "version": "10.3.1", - "dev": true, - "peer": true + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" }, "decimal.js-light": { "version": "2.5.1" @@ -44266,7 +44307,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ripple-binary-codec/-/ripple-binary-codec-2.0.0.tgz", "integrity": "sha512-zakENc9A5dlW85uzrmQHrJehymhL59ftggboRNrjxFDJdlNJ6DSE210P3ys/9kL0oVtOzFnTrOPFfxHZeOsA/Q==", - "dev": true, "requires": { "@xrplf/isomorphic": "^1.0.0", "bignumber.js": "^9.0.0", @@ -44277,7 +44317,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ripple-keypairs/-/ripple-keypairs-2.0.0.tgz", "integrity": "sha512-b5rfL2EZiffmklqZk1W+dvSy97v3V/C7936WxCCgDynaGPp7GE6R2XO7EU9O2LlM/z95rj870IylYnOQs+1Rag==", - "dev": true, "requires": { "@noble/curves": "^1.0.0", "@xrplf/isomorphic": "^1.0.0", @@ -46953,7 +46992,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/xrpl/-/xrpl-3.0.0.tgz", "integrity": "sha512-QC+dNx3tvMEn9IrxcXFFa0rWwvBwACkGFNKl+W2miMGYnlgSiIsnjdqwtG2WRs0Pyxs5dd9nBTQHyQ1BPxZ78A==", - "dev": true, "requires": { "@scure/bip32": "^1.3.1", "@scure/bip39": "^1.2.1", @@ -46971,7 +47009,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==", - "dev": true, "requires": { "node-fetch": "^2.6.12" } @@ -46979,8 +47016,7 @@ "eventemitter3": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", - "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", - "dev": true + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==" } } }, @@ -46993,6 +47029,15 @@ "websocket": "^1.0.34" } }, + "xrpl-tx-path-parser": { + "version": "git+ssh://git@github.com/shortthefomo/xrpl-tx-path-parser.git#8f5f4d5bc3bc83c6fffedf9bfe172d5a3c9d1c76", + "from": "xrpl-tx-path-parser@github:shortthefomo/xrpl-tx-path-parser#dev", + "requires": { + "@xrplkit/txmeta": "^1.3.1", + "decimal.js": "^10.4.3", + "xrpl": "^3.0.0" + } + }, "y18n": { "version": "4.0.3", "dev": true, diff --git a/package.json b/package.json index 9a0de5711..9065f14e3 100644 --- a/package.json +++ b/package.json @@ -54,7 +54,8 @@ "vite-plugin-html": "^3.2.0", "vite-plugin-svgr": "^4.2.0", "vite-tsconfig-paths": "^4.2.0", - "xrpl-client": "^2.1.0" + "xrpl-client": "^2.1.0", + "xrpl-tx-path-parser": "github:shortthefomo/xrpl-tx-path-parser#dev" }, "devDependencies": { "@babel/eslint-parser": "^7.22.6", diff --git a/public/locales/ca-CA/translations.json b/public/locales/ca-CA/translations.json index 1e7efac16..8c7a11d27 100644 --- a/public/locales/ca-CA/translations.json +++ b/public/locales/ca-CA/translations.json @@ -75,6 +75,7 @@ "not_found_default_title": "No s'ha trobat la pàgina", "not_found_check_url": "Si us plau, comproba l'URL", "not_found": "No s'ha trobat", + "breakdown": "Breakdown", "buy": "Compra", "sell": "Ven", "price": "Preu", @@ -522,5 +523,9 @@ "note": "Nota", "indicate_unl": "indica un validador en una UNL", "transaction_tokens_involved": "<Currency/> i <Currency2/>", - "transaction_tokens_swapped": "<Currency/> per <Currency2/>" + "transaction_tokens_swapped": "<Currency/> per <Currency2/>", + "graph_dependant_currency": "*Graph is dependant on the currency used.", + "incomplete_transaction": "Incomplete transaction", + "liquidity_source": "Liquidity Source", + "balance_changes": "Balance Changes" } diff --git a/public/locales/en-US/translations.json b/public/locales/en-US/translations.json index 9d7630114..9af853fcb 100644 --- a/public/locales/en-US/translations.json +++ b/public/locales/en-US/translations.json @@ -76,6 +76,7 @@ "not_found_default_title": "Page Not Found", "not_found_check_url": "Please double check your URL", "not_found": "Not found", + "breakdown": "Breakdown", "buy": "Buy", "sell": "Sell", "price": "Price", @@ -522,5 +523,9 @@ "note": "Note", "indicate_unl": "indicates a validator on an UNL", "transaction_tokens_involved": "<Currency/> and <Currency2/>", - "transaction_tokens_swapped": "<Currency/> for <Currency2/>" + "transaction_tokens_swapped": "<Currency/> for <Currency2/>", + "graph_dependant_currency": "*Graph is dependant on the currency used.", + "incomplete_transaction": "Incomplete transaction", + "liquidity_source": "Liquidity Source", + "balance_changes": "Balance Changes" } diff --git a/src/containers/Transactions/BreakDownTab/breakDownTab.scss b/src/containers/Transactions/BreakDownTab/breakDownTab.scss new file mode 100644 index 000000000..2dd19fa67 --- /dev/null +++ b/src/containers/Transactions/BreakDownTab/breakDownTab.scss @@ -0,0 +1,119 @@ +@import '../../shared/css/variables'; + +.breakdown-body { + margin-top: 20px; + color: $black-40; + font-size: 12px; + letter-spacing: 0px; +} + +.detail-section { + padding: 5px 15px; + border-bottom: 1px solid $black-70; + margin: 0px 0px 30px; + + &:last-child { + border: none; + } + + &.no-border { + border: none; + } +} + +.title { + margin-bottom: 4px; + color: $white; + font-size: 16px; + text-transform: capitalize; + @include bold; + + span { + margin-left: 8px; + font-size: 10px; + line-height: 18px; + } +} + +.flex { + display: flex; +} + +.rectangle-container { + min-height: 200px; + // margin-top: 100px; +} + +:root{ + --max-height: 80%; +} + +// Build the cylinder +$circle-height: 9px; + +.rectangle-row { + position: relative; + display: block; + height: 50px; +} + +.rectangle { + position: relative; + left: 0; + display: block; + width: $circle-height; + height: 30px; + box-sizing: border-box; + border-top: solid 2px var(--cylinder-color); + border-bottom: solid 2px var(--cylinder-color); + margin-top: 10px; + margin-left: 10px; + animation: grow 600ms 1.5s ease both; + background: linear-gradient(to right, #271527, var(--cylinder-color)); + // transform: rotate(90deg); +} + +.margin-text { + position: relative; + display: block; + border-bottom: dashed 1px $white; + font-weight: bold; + text-align: right; + text-transform: capitalize; + // transform: rotate(-180deg); + // writing-mode: vertical-rl; +} + +.rectangle::before, +.rectangle::after { + position: absolute; + top: -2px; + right: -3px; + width: $circle-height; + height: 30px; + box-sizing: border-box; + border: solid 2px var(--cylinder-color); + border-radius: 50%; + content: ''; +} + +.rectangle::before { + left: calc(-1 * $circle-height / 2); + background: #271527; +} + +.rectangle::after { + z-index: -1; + right: calc(-1 * $circle-height / 2); + background: var(--cylinder-color); +} + +@keyframes grow { + 0% { + width: 0; + } + + 100% { + width: calc(var(--max-height) * var(--percent-value)); // Change this to make things ✨ + } +} diff --git a/src/containers/Transactions/BreakDownTab/index.tsx b/src/containers/Transactions/BreakDownTab/index.tsx new file mode 100644 index 000000000..31decba57 --- /dev/null +++ b/src/containers/Transactions/BreakDownTab/index.tsx @@ -0,0 +1,303 @@ +import { FC, useState } from 'react' +import { useTranslation } from 'react-i18next' +import parsePayment from 'xrpl-tx-path-parser' +import { Account } from '../../shared/components/Account' +import { Amount } from '../../shared/components/Amount' +import { formatAmount } from '../../../rippled/lib/txSummary/formatAmount' +import Currency from '../../shared/components/Currency' + +import './breakDownTab.scss' + +// import { +// createSourceAmount, +// createPaymentDefaultPaths, +// amountToBalance, +// } from 'xrpl-tx-path-parser' + +export const BreakDownTab: FC<{ data: any }> = ({ data }) => { + const { t } = useTranslation() + const [selectedView, setView] = useState('source') + + const hexToString = (hex: string) => { + let string = '' + for (let i = 0; i < hex.length; i += 2) { + const part = hex.substring(i, i + 2) + const code = parseInt(part, 16) + if (!isNaN(code) && code !== 0) { + string += String.fromCharCode(code) + } + } + return string + } + const BalanceChange: FC<{ + data: any + label: Boolean + type: String + }> = ({ data, label, type }) => { + const balances = [] + data.forEach((change, index) => { + change.value *= -1 + + let balanceLabel = + type === 'direct' ? 'recieved' : change.value < 0 ? 'sold' : 'bought' + if (type === 'direct') { + change.value *= -1 + } + if (!label) { + balanceLabel = '' + } + balances.push( + <li key={index}> + {balanceLabel} <Amount value={formatAmount(change)} /> + </li>, + ) + }) + + return <ul>{balances}</ul> + } + // eslint-disable-next-line react/no-unstable-nested-components + const Transaction: FC<{ parsed: any; account: Account }> = ({ + parsed, + account, + }) => { + const changes = [] + parsed.accountBalanceChanges.forEach((change, index) => { + if (account !== change.account) { + let type: String = 'direct' + if (change.isAMM) { + type = 'amm' + } + if (change.isOffer) { + type = 'dex' + } + if (change.isRippling) { + type = 'rippling' + } + changes.push( + <p key={`${index}-p`}> + <span>{type}</span> <Account account={change.account} /> + </p>, + + <BalanceChange + key={`${index}-b`} + data={change.balances} + label={!change.isRippling} + type={type} + />, + ) + } + }) + + return <div>{changes}</div> + } + + // eslint-disable-next-line react/no-unstable-nested-components + const Cylindars: FC<{ parsed: any; account: Account }> = ({ + parsed, + account, + }) => { + const sum = { + amm: 0, + rippling: 0, + dex: 0, + direct: 0, + total: 0, + } + parsed.accountBalanceChanges.forEach((change) => { + if (account !== change.account) { + change.balances.forEach((balance) => { + // if (parsed.sourceAmount.currency === balance.currency) { + if ( + (selectedView === 'source' && + parsed.destinationAmount.currency === balance.currency) || + (selectedView === 'destination' && + parsed.sourceAmount.currency === balance.currency) + ) { + if (change.isAMM) { + sum.amm += balance.value * -1 + sum.total += balance.value * -1 + } + if (change.isOffer) { + sum.dex += balance.value * -1 + sum.total += balance.value * -1 + } + if (change.isDirect) { + sum.direct += balance.value * 1 + sum.total += balance.value * 1 + } + if (change.isRippling && balance.value * 1 > 0) { + sum.rippling += + selectedView === 'destination' + ? balance.value * -1 + : balance.value * 1 + } + } + }) + } + }) + + const NON_STANDARD_CODE_LENGTH = 40 + const XRP = 'XRP' + const LP_TOKEN_IDENTIFIER = '03' + const destinationCurrencyCode = + parsed.destinationAmount.currency?.length === NON_STANDARD_CODE_LENGTH && + parsed.destinationAmount.currency?.substring(0, 2) !== LP_TOKEN_IDENTIFIER + ? hexToString(parsed.destinationAmount.currency) + : parsed.destinationAmount.currency + const sourceCurrencyCode = + parsed.sourceAmount.currency?.length === NON_STANDARD_CODE_LENGTH && + parsed.sourceAmount.currency?.substring(0, 2) !== LP_TOKEN_IDENTIFIER + ? hexToString(parsed.sourceAmount.currency) + : parsed.sourceAmount.currency + + return ( + <div> + {/* <h5> + AMM: {sum.amm} {(sum.amm / sum.total) * 100} + </h5> + <h5> + RIPPLING: {sum.rippling} {(sum.rippling / sum.total) * 100} + </h5> + <h5> + DEX: {sum.dex} {(sum.dex / sum.total) * 100} + </h5> + <h5> + DIRECT: {sum.direct} {(sum.direct / sum.total) * 100} + </h5> + <h5>TOTAL: {sum.total}</h5> */} + + <select + value={selectedView} // ...force the select's value to match the state variable... + onChange={(e) => setView(e.target.value)} + > + <option value="source"> + {sourceCurrencyCode} {t('source')} + </option> + <option value="destination"> + {destinationCurrencyCode} {t('destination')} + </option> + </select> + <p>{t('graph_dependant_currency')}</p> + <div className="rectangle-row"> + <div + className="rectangle" + style={{ + ['--percent-value' as any]: sum.amm / sum.total, + ['--cylinder-color' as any]: '#ff198b', + }} + /> + <span className="margin-text"> + AMM ({Math.round((sum.amm / sum.total) * 100)}%) + </span> + </div> + <div className="rectangle-row"> + <div + className="rectangle" + style={{ + ['--percent-value' as any]: sum.rippling / sum.total, + ['--cylinder-color' as any]: '#32e685', + }} + /> + <span className="margin-text"> + RIPPLING ({Math.round((sum.rippling / sum.total) * 100)}%) + </span> + </div> + <div className="rectangle-row"> + <div + className="rectangle" + style={{ + ['--percent-value' as any]: sum.dex / sum.total, + ['--cylinder-color' as any]: '#19a3ff', + }} + /> + <span className="margin-text"> + DEX ({Math.round((sum.dex / sum.total) * 100)}%) + </span> + </div> + <div className="rectangle-row"> + <div + className="rectangle" + style={{ + ['--percent-value' as any]: sum.direct / sum.total, + ['--cylinder-color' as any]: '#9a52ff', + }} + /> + <span className="margin-text"> + DIRECT ({Math.round((sum.direct / sum.total) * 100)}%) + </span> + </div> + <div className="rectangle-row"> + <div + className="rectangle" + style={{ + ['--percent-value' as any]: 1, + ['--cylinder-color' as any]: '#faff19', + }} + /> + <span className="margin-text"> + TOTAL{' '} + <Amount + value={formatAmount( + selectedView === 'destination' + ? parsed.sourceAmount + : parsed.destinationAmount, + )} + /> + </span> + </div> + </div> + ) + } + + const renderData = () => { + data.tx.meta = data.meta + // delete mutate.meta + try { + const parsed = parsePayment(data.tx) + if ( + parsed.sourceAmount.value === '0' && + data.tx.TransactionType === 'OfferCreate' + ) { + return <h3>{t('The offer has not crossed anything yet.')}</h3> + } + + return ( + <div className="row"> + <div className="detail-section"> + <div className="title">{data.tx.TransactionType}</div> + <div> + Source: <Account account={parsed.sourceAccount} /> + </div> + <div> + <Amount value={formatAmount(parsed.sourceAmount)} /> + </div> + <br /> + <div> + Destination: <Account account={parsed.destinationAccount} /> + </div> + <div> + <Amount value={formatAmount(parsed.destinationAmount)} /> + </div> + </div> + <div className="detail-section no-border"> + <div className="title">{t('liquidity_source')}</div> + <Cylindars parsed={parsed} account={parsed.sourceAccount} /> + </div> + <div className="detail-section"> + <div className="title">{t('balance_changes')}</div> + <Transaction parsed={parsed} account={parsed.sourceAccount} /> + </div> + {/* < + // debug.... + div className="detail-section"> + <pre>{JSON.stringify(parsed, null, 2)}</pre> + </div> */} + </div> + ) + } catch (e) { + return <h3>{t('incomplete_transaction')}</h3> + } + } + + return <div className="breakdown-body">{renderData()}</div> +} diff --git a/src/containers/Transactions/index.tsx b/src/containers/Transactions/index.tsx index b5de8319f..22d5161aa 100644 --- a/src/containers/Transactions/index.tsx +++ b/src/containers/Transactions/index.tsx @@ -9,6 +9,7 @@ import { Tabs } from '../shared/components/Tabs' import { NOT_FOUND, BAD_REQUEST, HASH_REGEX, CTID_REGEX } from '../shared/utils' import { SimpleTab } from './SimpleTab' import { DetailTab } from './DetailTab' +import { BreakDownTab } from './BreakDownTab' import './transaction.scss' import { AnalyticsFields, useAnalytics } from '../shared/analytics' import SocketContext from '../shared/SocketContext' @@ -115,6 +116,12 @@ export const Transaction = () => { function renderTabs() { const tabs = ['simple', 'detailed', 'raw'] + if ( + data.raw.tx.TransactionType === 'OfferCreate' || + data.raw.tx.TransactionType === 'Payment' + ) { + tabs.push('breakdown') + } const mainPath = buildPath(TRANSACTION_ROUTE, { identifier }) return <Tabs tabs={tabs} selected={tab} path={mainPath} /> } @@ -125,6 +132,9 @@ export const Transaction = () => { let body switch (tab) { + case 'breakdown': + body = <BreakDownTab data={data.raw} /> + break case 'detailed': body = <DetailTab data={data.raw} /> break From 842cbe75a83ef139ef0a846b6b05fde90f5d7bb9 Mon Sep 17 00:00:00 2001 From: Lathan Britz <jucallme@gmail.com> Date: Wed, 22 May 2024 12:56:08 -0400 Subject: [PATCH 02/79] color code breakdown and add missing transation labels --- public/locales/ca-CA/translations.json | 6 ++++- public/locales/en-US/translations.json | 6 ++++- .../BreakDownTab/breakDownTab.scss | 24 +++++++++++++++++++ .../Transactions/BreakDownTab/index.tsx | 23 ++++++++++++------ 4 files changed, 50 insertions(+), 9 deletions(-) diff --git a/public/locales/ca-CA/translations.json b/public/locales/ca-CA/translations.json index 8c7a11d27..894cfd305 100644 --- a/public/locales/ca-CA/translations.json +++ b/public/locales/ca-CA/translations.json @@ -527,5 +527,9 @@ "graph_dependant_currency": "*Graph is dependant on the currency used.", "incomplete_transaction": "Incomplete transaction", "liquidity_source": "Liquidity Source", - "balance_changes": "Balance Changes" + "balance_changes": "Balance Changes", + "direct": "direct", + "dex": "dex", + "amm": "amm", + "rippling": "rippling" } diff --git a/public/locales/en-US/translations.json b/public/locales/en-US/translations.json index 9af853fcb..ad03d229a 100644 --- a/public/locales/en-US/translations.json +++ b/public/locales/en-US/translations.json @@ -527,5 +527,9 @@ "graph_dependant_currency": "*Graph is dependant on the currency used.", "incomplete_transaction": "Incomplete transaction", "liquidity_source": "Liquidity Source", - "balance_changes": "Balance Changes" + "balance_changes": "Balance Changes", + "direct": "direct", + "dex": "dex", + "amm": "amm", + "rippling": "rippling" } diff --git a/src/containers/Transactions/BreakDownTab/breakDownTab.scss b/src/containers/Transactions/BreakDownTab/breakDownTab.scss index 2dd19fa67..16acfc3d3 100644 --- a/src/containers/Transactions/BreakDownTab/breakDownTab.scss +++ b/src/containers/Transactions/BreakDownTab/breakDownTab.scss @@ -35,6 +35,30 @@ } } +.badge { + padding: 5px; + padding-top: 3px; + border-radius: 5px; + color: $black; + + &.amm { + background-color: #ff198b; + + } + + &.dex { + background-color: #19a3ff; + } + + &.direct { + background-color: #9a52ff; + } + + &.rippling { + background-color: #32e685; + } +} + .flex { display: flex; } diff --git a/src/containers/Transactions/BreakDownTab/index.tsx b/src/containers/Transactions/BreakDownTab/index.tsx index 31decba57..f2ae68ae3 100644 --- a/src/containers/Transactions/BreakDownTab/index.tsx +++ b/src/containers/Transactions/BreakDownTab/index.tsx @@ -63,19 +63,28 @@ export const BreakDownTab: FC<{ data: any }> = ({ data }) => { const changes = [] parsed.accountBalanceChanges.forEach((change, index) => { if (account !== change.account) { - let type: String = 'direct' + let type: String = '' + let span_class: String = '' + if (change.isDirect) { + type = 'direct' + span_class = 'badge direct' + } if (change.isAMM) { type = 'amm' + span_class = 'badge amm' } if (change.isOffer) { type = 'dex' + span_class = 'badge dex' } if (change.isRippling) { type = 'rippling' + span_class = 'badge rippling' } changes.push( <p key={`${index}-p`}> - <span>{type}</span> <Account account={change.account} /> + <span className={span_class}>{type}</span>{' '} + <Account account={change.account} /> </p>, <BalanceChange @@ -187,7 +196,7 @@ export const BreakDownTab: FC<{ data: any }> = ({ data }) => { }} /> <span className="margin-text"> - AMM ({Math.round((sum.amm / sum.total) * 100)}%) + {t('amm')} ({Math.round((sum.amm / sum.total) * 100)}%) </span> </div> <div className="rectangle-row"> @@ -199,7 +208,7 @@ export const BreakDownTab: FC<{ data: any }> = ({ data }) => { }} /> <span className="margin-text"> - RIPPLING ({Math.round((sum.rippling / sum.total) * 100)}%) + {t('rippling')} ({Math.round((sum.rippling / sum.total) * 100)}%) </span> </div> <div className="rectangle-row"> @@ -211,7 +220,7 @@ export const BreakDownTab: FC<{ data: any }> = ({ data }) => { }} /> <span className="margin-text"> - DEX ({Math.round((sum.dex / sum.total) * 100)}%) + {t('dex')} ({Math.round((sum.dex / sum.total) * 100)}%) </span> </div> <div className="rectangle-row"> @@ -223,7 +232,7 @@ export const BreakDownTab: FC<{ data: any }> = ({ data }) => { }} /> <span className="margin-text"> - DIRECT ({Math.round((sum.direct / sum.total) * 100)}%) + {t('direct')} ({Math.round((sum.direct / sum.total) * 100)}%) </span> </div> <div className="rectangle-row"> @@ -235,7 +244,7 @@ export const BreakDownTab: FC<{ data: any }> = ({ data }) => { }} /> <span className="margin-text"> - TOTAL{' '} + {t('total')}{' '} <Amount value={formatAmount( selectedView === 'destination' From 511f0dc170e08a907e0577ff9b16517d144ddb1d Mon Sep 17 00:00:00 2001 From: Fomo <508629+shortthefomo@users.noreply.github.com> Date: Wed, 22 May 2024 14:02:00 -0400 Subject: [PATCH 03/79] Update public/locales/ca-CA/translations.json fix spelling Co-authored-by: Mayukha Vadari <mvadari@gmail.com> --- public/locales/ca-CA/translations.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/locales/ca-CA/translations.json b/public/locales/ca-CA/translations.json index 894cfd305..601d4ffb8 100644 --- a/public/locales/ca-CA/translations.json +++ b/public/locales/ca-CA/translations.json @@ -524,7 +524,7 @@ "indicate_unl": "indica un validador en una UNL", "transaction_tokens_involved": "<Currency/> i <Currency2/>", "transaction_tokens_swapped": "<Currency/> per <Currency2/>", - "graph_dependant_currency": "*Graph is dependant on the currency used.", + "graph_dependant_currency": "*Graph is dependent on the currency used.", "incomplete_transaction": "Incomplete transaction", "liquidity_source": "Liquidity Source", "balance_changes": "Balance Changes", From a453001ab084627b6cb12e854a9701e10620d791 Mon Sep 17 00:00:00 2001 From: Fomo <508629+shortthefomo@users.noreply.github.com> Date: Wed, 22 May 2024 14:02:35 -0400 Subject: [PATCH 04/79] Update src/containers/Transactions/index.tsx use of ternary Co-authored-by: Mayukha Vadari <mvadari@gmail.com> --- src/containers/Transactions/index.tsx | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/containers/Transactions/index.tsx b/src/containers/Transactions/index.tsx index 22d5161aa..aa884387b 100644 --- a/src/containers/Transactions/index.tsx +++ b/src/containers/Transactions/index.tsx @@ -115,13 +115,7 @@ export const Transaction = () => { } function renderTabs() { - const tabs = ['simple', 'detailed', 'raw'] - if ( - data.raw.tx.TransactionType === 'OfferCreate' || - data.raw.tx.TransactionType === 'Payment' - ) { - tabs.push('breakdown') - } + const tabs = (data.raw.tx.TransactionType === 'OfferCreate' || data.raw.tx.TransactionType === 'Payment') ? ['simple', 'breakdown', 'detailed', 'raw'] ? ['simple', 'detailed', 'raw'] const mainPath = buildPath(TRANSACTION_ROUTE, { identifier }) return <Tabs tabs={tabs} selected={tab} path={mainPath} /> } From ba3879469dce65da5ce20ac7cdc18cad19032b21 Mon Sep 17 00:00:00 2001 From: Lathan Britz <jucallme@gmail.com> Date: Wed, 22 May 2024 14:08:55 -0400 Subject: [PATCH 05/79] missed two more translation labels --- public/locales/ca-CA/translations.json | 6 ++++-- public/locales/en-US/translations.json | 6 ++++-- src/containers/Transactions/BreakDownTab/index.tsx | 8 ++++++-- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/public/locales/ca-CA/translations.json b/public/locales/ca-CA/translations.json index 601d4ffb8..5c46543b4 100644 --- a/public/locales/ca-CA/translations.json +++ b/public/locales/ca-CA/translations.json @@ -524,12 +524,14 @@ "indicate_unl": "indica un validador en una UNL", "transaction_tokens_involved": "<Currency/> i <Currency2/>", "transaction_tokens_swapped": "<Currency/> per <Currency2/>", - "graph_dependant_currency": "*Graph is dependent on the currency used.", + "graph_dependent_currency": "*Graph is dependent on the currency used.", "incomplete_transaction": "Incomplete transaction", "liquidity_source": "Liquidity Source", "balance_changes": "Balance Changes", "direct": "direct", "dex": "dex", "amm": "amm", - "rippling": "rippling" + "rippling": "rippling", + "sold": "sold", + "bought": "bought" } diff --git a/public/locales/en-US/translations.json b/public/locales/en-US/translations.json index ad03d229a..7f9bf7403 100644 --- a/public/locales/en-US/translations.json +++ b/public/locales/en-US/translations.json @@ -524,12 +524,14 @@ "indicate_unl": "indicates a validator on an UNL", "transaction_tokens_involved": "<Currency/> and <Currency2/>", "transaction_tokens_swapped": "<Currency/> for <Currency2/>", - "graph_dependant_currency": "*Graph is dependant on the currency used.", + "graph_dependent_currency": "*Graph is dependent on the currency used.", "incomplete_transaction": "Incomplete transaction", "liquidity_source": "Liquidity Source", "balance_changes": "Balance Changes", "direct": "direct", "dex": "dex", "amm": "amm", - "rippling": "rippling" + "rippling": "rippling", + "sold": "sold", + "bought": "bought" } diff --git a/src/containers/Transactions/BreakDownTab/index.tsx b/src/containers/Transactions/BreakDownTab/index.tsx index f2ae68ae3..cadfd6791 100644 --- a/src/containers/Transactions/BreakDownTab/index.tsx +++ b/src/containers/Transactions/BreakDownTab/index.tsx @@ -39,7 +39,11 @@ export const BreakDownTab: FC<{ data: any }> = ({ data }) => { change.value *= -1 let balanceLabel = - type === 'direct' ? 'recieved' : change.value < 0 ? 'sold' : 'bought' + type === 'direct' + ? 'recieved' + : change.value < 0 + ? t('sold') + : t('bought') if (type === 'direct') { change.value *= -1 } @@ -186,7 +190,7 @@ export const BreakDownTab: FC<{ data: any }> = ({ data }) => { {destinationCurrencyCode} {t('destination')} </option> </select> - <p>{t('graph_dependant_currency')}</p> + <p>{t('graph_dependent_currency')}</p> <div className="rectangle-row"> <div className="rectangle" From e529f6ca5f38cbb5fb3dbfcada00dab17ca61fc9 Mon Sep 17 00:00:00 2001 From: Lathan Britz <jucallme@gmail.com> Date: Wed, 22 May 2024 16:38:17 -0400 Subject: [PATCH 06/79] fix turnary --- src/containers/Transactions/index.tsx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/containers/Transactions/index.tsx b/src/containers/Transactions/index.tsx index aa884387b..0342dfc75 100644 --- a/src/containers/Transactions/index.tsx +++ b/src/containers/Transactions/index.tsx @@ -115,7 +115,11 @@ export const Transaction = () => { } function renderTabs() { - const tabs = (data.raw.tx.TransactionType === 'OfferCreate' || data.raw.tx.TransactionType === 'Payment') ? ['simple', 'breakdown', 'detailed', 'raw'] ? ['simple', 'detailed', 'raw'] + const tabs = + data.raw.tx.TransactionType === 'OfferCreate' || + data.raw.tx.TransactionType === 'Payment' + ? ['simple', 'breakdown', 'detailed', 'raw'] + : ['simple', 'detailed', 'raw'] const mainPath = buildPath(TRANSACTION_ROUTE, { identifier }) return <Tabs tabs={tabs} selected={tab} path={mainPath} /> } From 9bc78b812b9b422069f2fd2b5ca46d5c8ec26811 Mon Sep 17 00:00:00 2001 From: Lathan Britz <jucallme@gmail.com> Date: Thu, 23 May 2024 08:43:30 -0400 Subject: [PATCH 07/79] use non dev version of xrpl-tx-path-parser changes have been comitted --- package-lock.json | 14 +++-- package.json | 2 +- public/locales/ca-CA/translations.json | 3 +- public/locales/en-US/translations.json | 3 +- .../Transactions/BreakDownTab/index.tsx | 56 ++++++++----------- src/containers/Transactions/index.tsx | 1 + .../Transactions/test/Transaction.test.tsx | 5 +- 7 files changed, 40 insertions(+), 44 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3d3492750..bd7859205 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,6 +15,7 @@ "@vitejs/plugin-react": "^4.2.1", "@xrplf/isomorphic": "^1.0.0-beta.1", "@xrplf/prettier-config": "^1.9.1", + "@xrplkit/txmeta": "^1.3.1", "assert": "^2.1.0", "autoprefixer": "^10.4.17", "axios": "^1.6.5", @@ -60,7 +61,7 @@ "vite-plugin-svgr": "^4.2.0", "vite-tsconfig-paths": "^4.2.0", "xrpl-client": "^2.1.0", - "xrpl-tx-path-parser": "github:shortthefomo/xrpl-tx-path-parser#dev" + "xrpl-tx-path-parser": "^1.0.5" }, "devDependencies": { "@babel/eslint-parser": "^7.22.6", @@ -28006,9 +28007,9 @@ } }, "node_modules/xrpl-tx-path-parser": { - "version": "1.0.4", - "resolved": "git+ssh://git@github.com/shortthefomo/xrpl-tx-path-parser.git#8f5f4d5bc3bc83c6fffedf9bfe172d5a3c9d1c76", - "license": "ISC", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/xrpl-tx-path-parser/-/xrpl-tx-path-parser-1.0.5.tgz", + "integrity": "sha512-eQTdv/OKe5MIjOuiYB6FseUtiD8WOqYTmAGfOkHn4DWn233ES/970Yr10QPTrQoWtoA5forroXSiXBse6xxvow==", "dependencies": { "@xrplkit/txmeta": "^1.3.1", "decimal.js": "^10.4.3", @@ -47030,8 +47031,9 @@ } }, "xrpl-tx-path-parser": { - "version": "git+ssh://git@github.com/shortthefomo/xrpl-tx-path-parser.git#8f5f4d5bc3bc83c6fffedf9bfe172d5a3c9d1c76", - "from": "xrpl-tx-path-parser@github:shortthefomo/xrpl-tx-path-parser#dev", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/xrpl-tx-path-parser/-/xrpl-tx-path-parser-1.0.5.tgz", + "integrity": "sha512-eQTdv/OKe5MIjOuiYB6FseUtiD8WOqYTmAGfOkHn4DWn233ES/970Yr10QPTrQoWtoA5forroXSiXBse6xxvow==", "requires": { "@xrplkit/txmeta": "^1.3.1", "decimal.js": "^10.4.3", diff --git a/package.json b/package.json index 9065f14e3..2cc88639f 100644 --- a/package.json +++ b/package.json @@ -55,7 +55,7 @@ "vite-plugin-svgr": "^4.2.0", "vite-tsconfig-paths": "^4.2.0", "xrpl-client": "^2.1.0", - "xrpl-tx-path-parser": "github:shortthefomo/xrpl-tx-path-parser#dev" + "xrpl-tx-path-parser": "^1.0.5" }, "devDependencies": { "@babel/eslint-parser": "^7.22.6", diff --git a/public/locales/ca-CA/translations.json b/public/locales/ca-CA/translations.json index 5c46543b4..f063221ed 100644 --- a/public/locales/ca-CA/translations.json +++ b/public/locales/ca-CA/translations.json @@ -533,5 +533,6 @@ "amm": "amm", "rippling": "rippling", "sold": "sold", - "bought": "bought" + "bought": "bought", + "no_cross": "The offer has not crossed anything yet" } diff --git a/public/locales/en-US/translations.json b/public/locales/en-US/translations.json index 7f9bf7403..d846e9368 100644 --- a/public/locales/en-US/translations.json +++ b/public/locales/en-US/translations.json @@ -533,5 +533,6 @@ "amm": "amm", "rippling": "rippling", "sold": "sold", - "bought": "bought" + "bought": "bought", + "no_cross": "The offer has not crossed anything yet" } diff --git a/src/containers/Transactions/BreakDownTab/index.tsx b/src/containers/Transactions/BreakDownTab/index.tsx index cadfd6791..3e0e92ce7 100644 --- a/src/containers/Transactions/BreakDownTab/index.tsx +++ b/src/containers/Transactions/BreakDownTab/index.tsx @@ -1,25 +1,17 @@ import { FC, useState } from 'react' import { useTranslation } from 'react-i18next' -import parsePayment from 'xrpl-tx-path-parser' +import pathParser from 'xrpl-tx-path-parser' import { Account } from '../../shared/components/Account' import { Amount } from '../../shared/components/Amount' import { formatAmount } from '../../../rippled/lib/txSummary/formatAmount' -import Currency from '../../shared/components/Currency' - import './breakDownTab.scss' -// import { -// createSourceAmount, -// createPaymentDefaultPaths, -// amountToBalance, -// } from 'xrpl-tx-path-parser' - export const BreakDownTab: FC<{ data: any }> = ({ data }) => { const { t } = useTranslation() const [selectedView, setView] = useState('source') const hexToString = (hex: string) => { - let string = '' + let string: string = '' for (let i = 0; i < hex.length; i += 2) { const part = hex.substring(i, i + 2) const code = parseInt(part, 16) @@ -35,24 +27,25 @@ export const BreakDownTab: FC<{ data: any }> = ({ data }) => { type: String }> = ({ data, label, type }) => { const balances = [] - data.forEach((change, index) => { - change.value *= -1 + data.forEach((change: any, index: any) => { + const amount = change + amount.value *= -1 - let balanceLabel = + let balanceLabel: string = type === 'direct' ? 'recieved' - : change.value < 0 + : amount.value < 0 ? t('sold') : t('bought') if (type === 'direct') { - change.value *= -1 + amount.value *= -1 } if (!label) { balanceLabel = '' } balances.push( - <li key={index}> - {balanceLabel} <Amount value={formatAmount(change)} /> + <li key={String(index)}> + {balanceLabel} <Amount value={formatAmount(amount)} /> </li>, ) }) @@ -60,39 +53,39 @@ export const BreakDownTab: FC<{ data: any }> = ({ data }) => { return <ul>{balances}</ul> } // eslint-disable-next-line react/no-unstable-nested-components - const Transaction: FC<{ parsed: any; account: Account }> = ({ + const Transaction: FC<{ parsed: any; account: any }> = ({ parsed, account, }) => { const changes = [] parsed.accountBalanceChanges.forEach((change, index) => { if (account !== change.account) { - let type: String = '' - let span_class: String = '' + let type: string = '' + let spanClass: string = '' if (change.isDirect) { type = 'direct' - span_class = 'badge direct' + spanClass = 'badge direct' } if (change.isAMM) { type = 'amm' - span_class = 'badge amm' + spanClass = 'badge amm' } if (change.isOffer) { type = 'dex' - span_class = 'badge dex' + spanClass = 'badge dex' } if (change.isRippling) { type = 'rippling' - span_class = 'badge rippling' + spanClass = 'badge rippling' } changes.push( - <p key={`${index}-p`}> - <span className={span_class}>{type}</span>{' '} + <p key={`${String(index)}-p`}> + <span className={spanClass}>{type}</span>{' '} <Account account={change.account} /> </p>, <BalanceChange - key={`${index}-b`} + key={`${String(index)}-b`} data={change.balances} label={!change.isRippling} type={type} @@ -105,7 +98,7 @@ export const BreakDownTab: FC<{ data: any }> = ({ data }) => { } // eslint-disable-next-line react/no-unstable-nested-components - const Cylindars: FC<{ parsed: any; account: Account }> = ({ + const Cylindars: FC<{ parsed: any; account: any }> = ({ parsed, account, }) => { @@ -119,7 +112,6 @@ export const BreakDownTab: FC<{ data: any }> = ({ data }) => { parsed.accountBalanceChanges.forEach((change) => { if (account !== change.account) { change.balances.forEach((balance) => { - // if (parsed.sourceAmount.currency === balance.currency) { if ( (selectedView === 'source' && parsed.destinationAmount.currency === balance.currency) || @@ -150,7 +142,6 @@ export const BreakDownTab: FC<{ data: any }> = ({ data }) => { }) const NON_STANDARD_CODE_LENGTH = 40 - const XRP = 'XRP' const LP_TOKEN_IDENTIFIER = '03' const destinationCurrencyCode = parsed.destinationAmount.currency?.length === NON_STANDARD_CODE_LENGTH && @@ -264,14 +255,13 @@ export const BreakDownTab: FC<{ data: any }> = ({ data }) => { const renderData = () => { data.tx.meta = data.meta - // delete mutate.meta try { - const parsed = parsePayment(data.tx) + const parsed = pathParser(data.tx) if ( parsed.sourceAmount.value === '0' && data.tx.TransactionType === 'OfferCreate' ) { - return <h3>{t('The offer has not crossed anything yet.')}</h3> + return <h3>{t('no_cross')}</h3> } return ( diff --git a/src/containers/Transactions/index.tsx b/src/containers/Transactions/index.tsx index 0342dfc75..3fb30d601 100644 --- a/src/containers/Transactions/index.tsx +++ b/src/containers/Transactions/index.tsx @@ -116,6 +116,7 @@ export const Transaction = () => { function renderTabs() { const tabs = + data === undefined || data.raw.tx.TransactionType === 'OfferCreate' || data.raw.tx.TransactionType === 'Payment' ? ['simple', 'breakdown', 'detailed', 'raw'] diff --git a/src/containers/Transactions/test/Transaction.test.tsx b/src/containers/Transactions/test/Transaction.test.tsx index 774d3da56..cf0a1b388 100644 --- a/src/containers/Transactions/test/Transaction.test.tsx +++ b/src/containers/Transactions/test/Transaction.test.tsx @@ -137,8 +137,9 @@ describe('Transaction container', () => { expect(wrapper.find('.tabs').length).toBe(1) expect(wrapper.find('a.tab').length).toBe(3) expect(wrapper.find('a.tab').at(0).props().title).toBe('simple') - expect(wrapper.find('a.tab').at(1).props().title).toBe('detailed') - expect(wrapper.find('a.tab').at(2).props().title).toBe('raw') + expect(wrapper.find('a.tab').at(1).props().title).toBe('breakdown') + expect(wrapper.find('a.tab').at(2).props().title).toBe('detailed') + expect(wrapper.find('a.tab').at(3).props().title).toBe('raw') expect(wrapper.find('a.tab.selected').text()).toEqual('simple') wrapper.unmount() }) From c8573fbbdc1429c1f74984e84e450c1fecd9c18b Mon Sep 17 00:00:00 2001 From: Lathan Britz <jucallme@gmail.com> Date: Fri, 24 May 2024 16:36:38 -0400 Subject: [PATCH 08/79] add testes --- package-lock.json | 33 +- package.json | 2 + .../Transactions/BreakDownTab/index.tsx | 36 +- .../Transactions/test/BreakDownTab.test.tsx | 76 +++ .../Transactions/test/Transaction.test.tsx | 2 +- .../test/mock_data/PaymentBreakdown.json | 476 ++++++++++++++++++ 6 files changed, 602 insertions(+), 23 deletions(-) create mode 100644 src/containers/Transactions/test/BreakDownTab.test.tsx create mode 100644 src/containers/Transactions/test/mock_data/PaymentBreakdown.json diff --git a/package-lock.json b/package-lock.json index bd7859205..f39c8ccbe 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,6 +16,7 @@ "@xrplf/isomorphic": "^1.0.0-beta.1", "@xrplf/prettier-config": "^1.9.1", "@xrplkit/txmeta": "^1.3.1", + "@xrplkit/xfl": "^2.1.0", "assert": "^2.1.0", "autoprefixer": "^10.4.17", "axios": "^1.6.5", @@ -6890,6 +6891,11 @@ "@xrplkit/xfl": "2.0.2" } }, + "node_modules/@xrplkit/amount/node_modules/@xrplkit/xfl": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@xrplkit/xfl/-/xfl-2.0.2.tgz", + "integrity": "sha512-OUZZzSoXSxYxuhBcz08Wb9Xme71PkFYejk3vq4jPzdXreVhF71ZrM6nSObHFgasC8/srWKoqiS37CnB2Ht3k/g==" + }, "node_modules/@xrplkit/txmeta": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/@xrplkit/txmeta/-/txmeta-1.3.1.tgz", @@ -6899,11 +6905,16 @@ "@xrplkit/xfl": "2.0.2" } }, - "node_modules/@xrplkit/xfl": { + "node_modules/@xrplkit/txmeta/node_modules/@xrplkit/xfl": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/@xrplkit/xfl/-/xfl-2.0.2.tgz", "integrity": "sha512-OUZZzSoXSxYxuhBcz08Wb9Xme71PkFYejk3vq4jPzdXreVhF71ZrM6nSObHFgasC8/srWKoqiS37CnB2Ht3k/g==" }, + "node_modules/@xrplkit/xfl": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@xrplkit/xfl/-/xfl-2.1.0.tgz", + "integrity": "sha512-CgRztE77c0hsZ57aPxwQg0vC6gSP/3Hz7cdzUQJSMBTy+b3VK/rGs+rMrmd9CY68jvVyTrhRpq6EgUPDBsywIg==" + }, "node_modules/abab": { "version": "2.0.5", "dev": true, @@ -32608,6 +32619,13 @@ "integrity": "sha512-poV7ym7EhjAlEGym9Kc3AHuy3uuhVW3qnl2KDr8D4zk7hANj7aG6l1XdtWIAGAgBpHnvPEaOG7+llPRRv1irZw==", "requires": { "@xrplkit/xfl": "2.0.2" + }, + "dependencies": { + "@xrplkit/xfl": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@xrplkit/xfl/-/xfl-2.0.2.tgz", + "integrity": "sha512-OUZZzSoXSxYxuhBcz08Wb9Xme71PkFYejk3vq4jPzdXreVhF71ZrM6nSObHFgasC8/srWKoqiS37CnB2Ht3k/g==" + } } }, "@xrplkit/txmeta": { @@ -32617,12 +32635,19 @@ "requires": { "@xrplkit/amount": "1.2.3", "@xrplkit/xfl": "2.0.2" + }, + "dependencies": { + "@xrplkit/xfl": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@xrplkit/xfl/-/xfl-2.0.2.tgz", + "integrity": "sha512-OUZZzSoXSxYxuhBcz08Wb9Xme71PkFYejk3vq4jPzdXreVhF71ZrM6nSObHFgasC8/srWKoqiS37CnB2Ht3k/g==" + } } }, "@xrplkit/xfl": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@xrplkit/xfl/-/xfl-2.0.2.tgz", - "integrity": "sha512-OUZZzSoXSxYxuhBcz08Wb9Xme71PkFYejk3vq4jPzdXreVhF71ZrM6nSObHFgasC8/srWKoqiS37CnB2Ht3k/g==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@xrplkit/xfl/-/xfl-2.1.0.tgz", + "integrity": "sha512-CgRztE77c0hsZ57aPxwQg0vC6gSP/3Hz7cdzUQJSMBTy+b3VK/rGs+rMrmd9CY68jvVyTrhRpq6EgUPDBsywIg==" }, "abab": { "version": "2.0.5", diff --git a/package.json b/package.json index 2cc88639f..de14e9896 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,8 @@ "@vitejs/plugin-react": "^4.2.1", "@xrplf/isomorphic": "^1.0.0-beta.1", "@xrplf/prettier-config": "^1.9.1", + "@xrplkit/txmeta": "^1.3.1", + "@xrplkit/xfl": "^2.1.0", "assert": "^2.1.0", "autoprefixer": "^10.4.17", "axios": "^1.6.5", diff --git a/src/containers/Transactions/BreakDownTab/index.tsx b/src/containers/Transactions/BreakDownTab/index.tsx index 3e0e92ce7..338c479ad 100644 --- a/src/containers/Transactions/BreakDownTab/index.tsx +++ b/src/containers/Transactions/BreakDownTab/index.tsx @@ -26,7 +26,7 @@ export const BreakDownTab: FC<{ data: any }> = ({ data }) => { label: Boolean type: String }> = ({ data, label, type }) => { - const balances = [] + const balances: string[] = [] data.forEach((change: any, index: any) => { const amount = change amount.value *= -1 @@ -43,11 +43,7 @@ export const BreakDownTab: FC<{ data: any }> = ({ data }) => { if (!label) { balanceLabel = '' } - balances.push( - <li key={String(index)}> - {balanceLabel} <Amount value={formatAmount(amount)} /> - </li>, - ) + balances.push(<li key={String(index)}>{balanceLabel}</li>) }) return <ul>{balances}</ul> @@ -57,7 +53,7 @@ export const BreakDownTab: FC<{ data: any }> = ({ data }) => { parsed, account, }) => { - const changes = [] + const changes: string[] = [] parsed.accountBalanceChanges.forEach((change, index) => { if (account !== change.account) { let type: string = '' @@ -254,32 +250,36 @@ export const BreakDownTab: FC<{ data: any }> = ({ data }) => { } const renderData = () => { - data.tx.meta = data.meta + if (data === undefined || data.tx === undefined) { + return null + } + + const mutated = data + mutated.tx.meta = data.meta try { - const parsed = pathParser(data.tx) + const parsed = pathParser(mutated.tx) if ( parsed.sourceAmount.value === '0' && - data.tx.TransactionType === 'OfferCreate' + mutated.tx.TransactionType === 'OfferCreate' ) { return <h3>{t('no_cross')}</h3> } - return ( <div className="row"> <div className="detail-section"> - <div className="title">{data.tx.TransactionType}</div> - <div> + <div className="title">{mutated.tx.TransactionType}</div> + <div className="source-account"> Source: <Account account={parsed.sourceAccount} /> </div> - <div> - <Amount value={formatAmount(parsed.sourceAmount)} /> + <div className="source-amount"> + <Amount value={formatAmount(parsed.sourceAmount as any)} /> </div> <br /> - <div> + <div className="destination-account"> Destination: <Account account={parsed.destinationAccount} /> </div> - <div> - <Amount value={formatAmount(parsed.destinationAmount)} /> + <div className="destination-amount"> + <Amount value={formatAmount(parsed.destinationAmount as any)} /> </div> </div> <div className="detail-section no-border"> diff --git a/src/containers/Transactions/test/BreakDownTab.test.tsx b/src/containers/Transactions/test/BreakDownTab.test.tsx new file mode 100644 index 000000000..0a0f829d4 --- /dev/null +++ b/src/containers/Transactions/test/BreakDownTab.test.tsx @@ -0,0 +1,76 @@ +import { mount } from 'enzyme' +import { I18nextProvider } from 'react-i18next' +import { BrowserRouter as Router } from 'react-router-dom' + +import EnableAmendment from './mock_data/EnableAmendment.json' +import Payment from './mock_data/PaymentBreakdown.json' +import { BreakDownTab } from '../BreakDownTab' +import i18n from '../../../i18n/testConfig' + +describe('BreakdownTab container', () => { + const createWrapper = (tx) => + mount( + <Router> + <I18nextProvider i18n={i18n}> + <BreakDownTab data={tx} /> + </I18nextProvider> + </Router>, + ) + + it('renders EnableAmendment without crashing', () => { + const wrapper = createWrapper(EnableAmendment) + wrapper.unmount() + }) + + it('renders breakdown tab information', () => { + const wrapper = createWrapper(Payment) + + console.log(Payment) + + expect(wrapper.find('.breakdown-body').length).toBe(1) + expect(wrapper.find('.detail-section').length).toBe(3) + + expect(wrapper.find('.source-account').length).toBe(1) + expect(wrapper.find('.source-amount').length).toBe(1) + expect(wrapper.find('.destination-account').length).toBe(1) + expect(wrapper.find('.destination-amount').length).toBe(1) + + expect( + wrapper.contains(<div className="title">liquidity_source</div>), + ).toBe(true) + + expect(wrapper.contains(<option value="source">USD source</option>)).toBe( + true, + ) + expect( + wrapper.contains(<option value="destination">XRP destination</option>), + ).toBe(true) + + expect(wrapper.contains(<p>graph_dependent_currency</p>)).toBe(true) + + expect( + wrapper.contains(<span className="margin-text">amm (98%)</span>), + ).toBe(true) + expect( + wrapper.contains(<span className="margin-text">rippling (0%)</span>), + ).toBe(true) + expect( + wrapper.contains(<span className="margin-text">dex (2%)</span>), + ).toBe(true) + expect( + wrapper.contains(<span className="margin-text">direct (0%)</span>), + ).toBe(true) + + expect(wrapper.contains(<div className="title">balance_changes</div>)).toBe( + true, + ) + expect(wrapper.contains(<span className="badge dex">dex</span>)).toBe(true) + expect( + wrapper.contains(<span className="badge rippling">rippling</span>), + ).toBe(true) + expect(wrapper.contains(<span className="badge amm">amm</span>)).toBe(true) + + console.log(wrapper.debug()) + wrapper.unmount() + }) +}) diff --git a/src/containers/Transactions/test/Transaction.test.tsx b/src/containers/Transactions/test/Transaction.test.tsx index cf0a1b388..6f65b23e5 100644 --- a/src/containers/Transactions/test/Transaction.test.tsx +++ b/src/containers/Transactions/test/Transaction.test.tsx @@ -135,7 +135,7 @@ describe('Transaction container', () => { ) expect(summary.contains(<TxStatus status="tesSUCCESS" />)).toBe(true) expect(wrapper.find('.tabs').length).toBe(1) - expect(wrapper.find('a.tab').length).toBe(3) + expect(wrapper.find('a.tab').length).toBe(4) expect(wrapper.find('a.tab').at(0).props().title).toBe('simple') expect(wrapper.find('a.tab').at(1).props().title).toBe('breakdown') expect(wrapper.find('a.tab').at(2).props().title).toBe('detailed') diff --git a/src/containers/Transactions/test/mock_data/PaymentBreakdown.json b/src/containers/Transactions/test/mock_data/PaymentBreakdown.json new file mode 100644 index 000000000..0c7223914 --- /dev/null +++ b/src/containers/Transactions/test/mock_data/PaymentBreakdown.json @@ -0,0 +1,476 @@ +{ + "hash": "9D6DC95E7B95F7302EBF711F9384B51666E3D98D5B177A6EF0C0250D7F3410D2", + "ledger_index": 88213902, + "date": 1716575361000, + "tx": { + "Account": "rBrnBoVq2ZBrq53ns1pNCCnsnhFizf59Lj", + "Amount": "149343627", + "DeliverMax": "149343627", + "DeliverMin": "146356755", + "Destination": "rBrnBoVq2ZBrq53ns1pNCCnsnhFizf59Lj", + "Fee": "12", + "Flags": 131072, + "LastLedgerSequence": 88213910, + "Memos": [ + { + "Memo": { + "MemoData": "5472616E73616374696F6E20696E6974696174656420627920786D61676E657469632E6F7267" + } + } + ], + "SendMax": { + "currency": "USD", + "issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B", + "value": "79.6770766125" + }, + "Sequence": 88196798, + "SigningPubKey": "021738EBB3F528A186919463A8B4C31BADDE35B579B1F2F86DF4383547AE7865C9", + "SourceTag": 10011010, + "TransactionType": "Payment", + "TxnSignature": "304402205B749EEE748F7EB49BBA734558ADB257FB83B60C7224A7B6CAD9C910619486F202206EE3C12787A085AEFADC6E053824562A48DB2072E5F19D57C6D41415A5DBE5FB", + "ctid": "C542098E000D0000", + "date": 1716575361000, + "hash": "undefined", + "inLedger": "undefined", + "ledger_index": "undefined", + "meta": { + "AffectedNodes": [ + { + "ModifiedNode": { + "FinalFields": { + "Account": "rsFaWztpAqZKoBSLTuhrhYfBV4nwYg7TFP", + "Balance": "56685726", + "Flags": 0, + "OwnerCount": 13, + "Sequence": 75621582 + }, + "LedgerEntryType": "AccountRoot", + "LedgerIndex": "13CD16752E004F76B468237B2F44DA9CFCA143A28C8EB6686D6A05695C8C3F7B", + "PreviousFields": { "Balance": "59581035", "OwnerCount": 14 }, + "PreviousTxnID": "BE19A57B91862555B86A59A6331E2B56D3156CF18C5E1F74340D3CAFEE909D2F", + "PreviousTxnLgrSeq": 88213895 + } + }, + { + "ModifiedNode": { + "FinalFields": { + "Account": "rBrnBoVq2ZBrq53ns1pNCCnsnhFizf59Lj", + "Balance": "6284089037", + "Flags": 0, + "OwnerCount": 4, + "Sequence": 88196799 + }, + "LedgerEntryType": "AccountRoot", + "LedgerIndex": "181A3BAD298B55A47F4F9A0247D638F33BFF7DEDC7A1ECD1392C2ADF9A3F46C9", + "PreviousFields": { "Balance": "6134969072", "Sequence": 88196798 }, + "PreviousTxnID": "3CFE806B69A8FA91F8965B905BDCDD614B89AF8DC4B8E941D994F00CC1E57BBC", + "PreviousTxnLgrSeq": 88213878 + } + }, + { + "DeletedNode": { + "FinalFields": { + "Account": "rsFaWztpAqZKoBSLTuhrhYfBV4nwYg7TFP", + "BookDirectory": "DFA3B6DDAB58C7E8E5D944E736DA4B7046C30E4F460FD9DE4E12F1B0AE6A0FB3", + "BookNode": "0", + "Flags": 0, + "OwnerNode": "0", + "PreviousTxnID": "BE19A57B91862555B86A59A6331E2B56D3156CF18C5E1F74340D3CAFEE909D2F", + "PreviousTxnLgrSeq": 88213895, + "Sequence": 75621581, + "TakerGets": "0", + "TakerPays": { + "currency": "USD", + "issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B", + "value": "0" + } + }, + "LedgerEntryType": "Offer", + "LedgerIndex": "6AB7F7F338C9FFF65323CCAEF7E38FE93D45D6F67E0ABF11822216D1A90DF89E", + "PreviousFields": { + "TakerGets": "2895309", + "TakerPays": { + "currency": "USD", + "issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B", + "value": "1.543863643330838" + } + } + } + }, + { + "ModifiedNode": { + "FinalFields": { + "Balance": { + "currency": "USD", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji", + "value": "-222732.5928364204" + }, + "Flags": 16908288, + "HighLimit": { + "currency": "USD", + "issuer": "rHUpaqUPbwzKZdzQ8ZQCme18FrgW9pB4am", + "value": "0" + }, + "HighNode": "0", + "LowLimit": { + "currency": "USD", + "issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B", + "value": "0" + }, + "LowNode": "bd7" + }, + "LedgerEntryType": "RippleState", + "LedgerIndex": "832F2523220A304ECEB7B2AE3E0D30829ACBCA0A31722FA8D952CC5BE7D9478B", + "PreviousFields": { + "Balance": { + "currency": "USD", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji", + "value": "-222654.5789600612" + } + }, + "PreviousTxnID": "3CFE806B69A8FA91F8965B905BDCDD614B89AF8DC4B8E941D994F00CC1E57BBC", + "PreviousTxnLgrSeq": 88213878 + } + }, + { + "ModifiedNode": { + "FinalFields": { + "AMMID": "EF95AD04AF97DF0DD76C5C624F93EF6F5479CDF8F30FAE612F1D434B5D6A914B", + "Account": "rHUpaqUPbwzKZdzQ8ZQCme18FrgW9pB4am", + "Balance": "417539550052", + "Flags": 26214400, + "OwnerCount": 1, + "Sequence": 86795414 + }, + "LedgerEntryType": "AccountRoot", + "LedgerIndex": "B21B05E69AFB3F98B8D6F8066A69C4B189F3D804D8BE896AE11E60189AAFAD51", + "PreviousFields": { "Balance": "417685774720" }, + "PreviousTxnID": "3CFE806B69A8FA91F8965B905BDCDD614B89AF8DC4B8E941D994F00CC1E57BBC", + "PreviousTxnLgrSeq": 88213878 + } + }, + { + "ModifiedNode": { + "FinalFields": { + "Balance": { + "currency": "USD", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji", + "value": "-15.22762820406059" + }, + "Flags": 2228224, + "HighLimit": { + "currency": "USD", + "issuer": "rsFaWztpAqZKoBSLTuhrhYfBV4nwYg7TFP", + "value": "1000000000" + }, + "HighNode": "0", + "LowLimit": { + "currency": "USD", + "issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B", + "value": "0" + }, + "LowNode": "b09" + }, + "LedgerEntryType": "RippleState", + "LedgerIndex": "CFCB7153408413FDB9A4B5AD3530680442200FA6F620711A80567DD1A965FD96", + "PreviousFields": { + "Balance": { + "currency": "USD", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji", + "value": "-13.68376456072975" + } + }, + "PreviousTxnID": "BE19A57B91862555B86A59A6331E2B56D3156CF18C5E1F74340D3CAFEE909D2F", + "PreviousTxnLgrSeq": 88213895 + } + }, + { + "ModifiedNode": { + "FinalFields": { + "Flags": 0, + "Owner": "rsFaWztpAqZKoBSLTuhrhYfBV4nwYg7TFP", + "RootIndex": "D838BBCEB616863B8BDCF5F5A638245459F3697855EB03F80BD09DA6F256D011" + }, + "LedgerEntryType": "DirectoryNode", + "LedgerIndex": "D838BBCEB616863B8BDCF5F5A638245459F3697855EB03F80BD09DA6F256D011" + } + }, + { + "ModifiedNode": { + "FinalFields": { + "Balance": { + "currency": "USD", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji", + "value": "-6450000000000000e-26" + }, + "Flags": 2228224, + "HighLimit": { + "currency": "USD", + "issuer": "rBrnBoVq2ZBrq53ns1pNCCnsnhFizf59Lj", + "value": "0" + }, + "HighNode": "0", + "LowLimit": { + "currency": "USD", + "issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B", + "value": "0" + }, + "LowNode": "bea" + }, + "LedgerEntryType": "RippleState", + "LedgerIndex": "DE51B19CCC570DB23F7A831943C8D874FB1928E513EC88090A543E32340AE813", + "PreviousFields": { + "Balance": { + "currency": "USD", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji", + "value": "-79.6770766125645" + } + }, + "PreviousTxnID": "3CFE806B69A8FA91F8965B905BDCDD614B89AF8DC4B8E941D994F00CC1E57BBC", + "PreviousTxnLgrSeq": 88213878 + } + }, + { + "DeletedNode": { + "FinalFields": { + "ExchangeRate": "4e12f1b0ae6a0fb3", + "Flags": 0, + "RootIndex": "DFA3B6DDAB58C7E8E5D944E736DA4B7046C30E4F460FD9DE4E12F1B0AE6A0FB3", + "TakerGetsCurrency": "0000000000000000000000000000000000000000", + "TakerGetsIssuer": "0000000000000000000000000000000000000000", + "TakerPaysCurrency": "0000000000000000000000005553440000000000", + "TakerPaysIssuer": "0A20B3C85F482532A9578DBB3950B85CA06594D1" + }, + "LedgerEntryType": "DirectoryNode", + "LedgerIndex": "DFA3B6DDAB58C7E8E5D944E736DA4B7046C30E4F460FD9DE4E12F1B0AE6A0FB3" + } + } + ], + "DeliveredAmount": "149119977", + "TransactionIndex": 13, + "TransactionResult": "tesSUCCESS", + "delivered_amount": "149119977" + }, + "validated": "undefined", + "metaData": "undefined", + "status": "undefined" + }, + "meta": { + "AffectedNodes": [ + { + "ModifiedNode": { + "FinalFields": { + "Account": "rsFaWztpAqZKoBSLTuhrhYfBV4nwYg7TFP", + "Balance": "56685726", + "Flags": 0, + "OwnerCount": 13, + "Sequence": 75621582 + }, + "LedgerEntryType": "AccountRoot", + "LedgerIndex": "13CD16752E004F76B468237B2F44DA9CFCA143A28C8EB6686D6A05695C8C3F7B", + "PreviousFields": { "Balance": "59581035", "OwnerCount": 14 }, + "PreviousTxnID": "BE19A57B91862555B86A59A6331E2B56D3156CF18C5E1F74340D3CAFEE909D2F", + "PreviousTxnLgrSeq": 88213895 + } + }, + { + "ModifiedNode": { + "FinalFields": { + "Account": "rBrnBoVq2ZBrq53ns1pNCCnsnhFizf59Lj", + "Balance": "6284089037", + "Flags": 0, + "OwnerCount": 4, + "Sequence": 88196799 + }, + "LedgerEntryType": "AccountRoot", + "LedgerIndex": "181A3BAD298B55A47F4F9A0247D638F33BFF7DEDC7A1ECD1392C2ADF9A3F46C9", + "PreviousFields": { "Balance": "6134969072", "Sequence": 88196798 }, + "PreviousTxnID": "3CFE806B69A8FA91F8965B905BDCDD614B89AF8DC4B8E941D994F00CC1E57BBC", + "PreviousTxnLgrSeq": 88213878 + } + }, + { + "DeletedNode": { + "FinalFields": { + "Account": "rsFaWztpAqZKoBSLTuhrhYfBV4nwYg7TFP", + "BookDirectory": "DFA3B6DDAB58C7E8E5D944E736DA4B7046C30E4F460FD9DE4E12F1B0AE6A0FB3", + "BookNode": "0", + "Flags": 0, + "OwnerNode": "0", + "PreviousTxnID": "BE19A57B91862555B86A59A6331E2B56D3156CF18C5E1F74340D3CAFEE909D2F", + "PreviousTxnLgrSeq": 88213895, + "Sequence": 75621581, + "TakerGets": "0", + "TakerPays": { + "currency": "USD", + "issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B", + "value": "0" + } + }, + "LedgerEntryType": "Offer", + "LedgerIndex": "6AB7F7F338C9FFF65323CCAEF7E38FE93D45D6F67E0ABF11822216D1A90DF89E", + "PreviousFields": { + "TakerGets": "2895309", + "TakerPays": { + "currency": "USD", + "issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B", + "value": "1.543863643330838" + } + } + } + }, + { + "ModifiedNode": { + "FinalFields": { + "Balance": { + "currency": "USD", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji", + "value": "-222732.5928364204" + }, + "Flags": 16908288, + "HighLimit": { + "currency": "USD", + "issuer": "rHUpaqUPbwzKZdzQ8ZQCme18FrgW9pB4am", + "value": "0" + }, + "HighNode": "0", + "LowLimit": { + "currency": "USD", + "issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B", + "value": "0" + }, + "LowNode": "bd7" + }, + "LedgerEntryType": "RippleState", + "LedgerIndex": "832F2523220A304ECEB7B2AE3E0D30829ACBCA0A31722FA8D952CC5BE7D9478B", + "PreviousFields": { + "Balance": { + "currency": "USD", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji", + "value": "-222654.5789600612" + } + }, + "PreviousTxnID": "3CFE806B69A8FA91F8965B905BDCDD614B89AF8DC4B8E941D994F00CC1E57BBC", + "PreviousTxnLgrSeq": 88213878 + } + }, + { + "ModifiedNode": { + "FinalFields": { + "AMMID": "EF95AD04AF97DF0DD76C5C624F93EF6F5479CDF8F30FAE612F1D434B5D6A914B", + "Account": "rHUpaqUPbwzKZdzQ8ZQCme18FrgW9pB4am", + "Balance": "417539550052", + "Flags": 26214400, + "OwnerCount": 1, + "Sequence": 86795414 + }, + "LedgerEntryType": "AccountRoot", + "LedgerIndex": "B21B05E69AFB3F98B8D6F8066A69C4B189F3D804D8BE896AE11E60189AAFAD51", + "PreviousFields": { "Balance": "417685774720" }, + "PreviousTxnID": "3CFE806B69A8FA91F8965B905BDCDD614B89AF8DC4B8E941D994F00CC1E57BBC", + "PreviousTxnLgrSeq": 88213878 + } + }, + { + "ModifiedNode": { + "FinalFields": { + "Balance": { + "currency": "USD", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji", + "value": "-15.22762820406059" + }, + "Flags": 2228224, + "HighLimit": { + "currency": "USD", + "issuer": "rsFaWztpAqZKoBSLTuhrhYfBV4nwYg7TFP", + "value": "1000000000" + }, + "HighNode": "0", + "LowLimit": { + "currency": "USD", + "issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B", + "value": "0" + }, + "LowNode": "b09" + }, + "LedgerEntryType": "RippleState", + "LedgerIndex": "CFCB7153408413FDB9A4B5AD3530680442200FA6F620711A80567DD1A965FD96", + "PreviousFields": { + "Balance": { + "currency": "USD", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji", + "value": "-13.68376456072975" + } + }, + "PreviousTxnID": "BE19A57B91862555B86A59A6331E2B56D3156CF18C5E1F74340D3CAFEE909D2F", + "PreviousTxnLgrSeq": 88213895 + } + }, + { + "ModifiedNode": { + "FinalFields": { + "Flags": 0, + "Owner": "rsFaWztpAqZKoBSLTuhrhYfBV4nwYg7TFP", + "RootIndex": "D838BBCEB616863B8BDCF5F5A638245459F3697855EB03F80BD09DA6F256D011" + }, + "LedgerEntryType": "DirectoryNode", + "LedgerIndex": "D838BBCEB616863B8BDCF5F5A638245459F3697855EB03F80BD09DA6F256D011" + } + }, + { + "ModifiedNode": { + "FinalFields": { + "Balance": { + "currency": "USD", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji", + "value": "-6450000000000000e-26" + }, + "Flags": 2228224, + "HighLimit": { + "currency": "USD", + "issuer": "rBrnBoVq2ZBrq53ns1pNCCnsnhFizf59Lj", + "value": "0" + }, + "HighNode": "0", + "LowLimit": { + "currency": "USD", + "issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B", + "value": "0" + }, + "LowNode": "bea" + }, + "LedgerEntryType": "RippleState", + "LedgerIndex": "DE51B19CCC570DB23F7A831943C8D874FB1928E513EC88090A543E32340AE813", + "PreviousFields": { + "Balance": { + "currency": "USD", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji", + "value": "-79.6770766125645" + } + }, + "PreviousTxnID": "3CFE806B69A8FA91F8965B905BDCDD614B89AF8DC4B8E941D994F00CC1E57BBC", + "PreviousTxnLgrSeq": 88213878 + } + }, + { + "DeletedNode": { + "FinalFields": { + "ExchangeRate": "4e12f1b0ae6a0fb3", + "Flags": 0, + "RootIndex": "DFA3B6DDAB58C7E8E5D944E736DA4B7046C30E4F460FD9DE4E12F1B0AE6A0FB3", + "TakerGetsCurrency": "0000000000000000000000000000000000000000", + "TakerGetsIssuer": "0000000000000000000000000000000000000000", + "TakerPaysCurrency": "0000000000000000000000005553440000000000", + "TakerPaysIssuer": "0A20B3C85F482532A9578DBB3950B85CA06594D1" + }, + "LedgerEntryType": "DirectoryNode", + "LedgerIndex": "DFA3B6DDAB58C7E8E5D944E736DA4B7046C30E4F460FD9DE4E12F1B0AE6A0FB3" + } + } + ], + "DeliveredAmount": "149119977", + "TransactionIndex": 13, + "TransactionResult": "tesSUCCESS", + "delivered_amount": "149119977" + } +} From 4468cfa79d66f92a5f2576d00b4be57364f166a6 Mon Sep 17 00:00:00 2001 From: Lathan Britz <jucallme@gmail.com> Date: Fri, 24 May 2024 16:45:42 -0400 Subject: [PATCH 09/79] remove debug --- src/containers/Transactions/test/BreakDownTab.test.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/containers/Transactions/test/BreakDownTab.test.tsx b/src/containers/Transactions/test/BreakDownTab.test.tsx index 0a0f829d4..4505cf561 100644 --- a/src/containers/Transactions/test/BreakDownTab.test.tsx +++ b/src/containers/Transactions/test/BreakDownTab.test.tsx @@ -25,7 +25,7 @@ describe('BreakdownTab container', () => { it('renders breakdown tab information', () => { const wrapper = createWrapper(Payment) - console.log(Payment) + // console.log(Payment) expect(wrapper.find('.breakdown-body').length).toBe(1) expect(wrapper.find('.detail-section').length).toBe(3) @@ -70,7 +70,7 @@ describe('BreakdownTab container', () => { ).toBe(true) expect(wrapper.contains(<span className="badge amm">amm</span>)).toBe(true) - console.log(wrapper.debug()) + // console.log(wrapper.debug()) wrapper.unmount() }) }) From 317314524fc1cdb5eab417095eacb8d23c3ee82b Mon Sep 17 00:00:00 2001 From: Lathan Britz <jucallme@gmail.com> Date: Fri, 24 May 2024 16:59:19 -0400 Subject: [PATCH 10/79] revert unwanted change --- src/containers/Transactions/BreakDownTab/index.tsx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/containers/Transactions/BreakDownTab/index.tsx b/src/containers/Transactions/BreakDownTab/index.tsx index 338c479ad..126b5e57c 100644 --- a/src/containers/Transactions/BreakDownTab/index.tsx +++ b/src/containers/Transactions/BreakDownTab/index.tsx @@ -43,7 +43,11 @@ export const BreakDownTab: FC<{ data: any }> = ({ data }) => { if (!label) { balanceLabel = '' } - balances.push(<li key={String(index)}>{balanceLabel}</li>) + balances.push( + <li key={String(index)}> + {balanceLabel} <Amount value={formatAmount(amount)} /> + </li>, + ) }) return <ul>{balances}</ul> From 0a7c68dd787311694465c847f1d96a2bb41d8934 Mon Sep 17 00:00:00 2001 From: Lathan Britz <jucallme@gmail.com> Date: Fri, 24 May 2024 18:37:27 -0400 Subject: [PATCH 11/79] more test --- .../Transactions/BreakDownTab/index.tsx | 6 +- .../Transactions/test/BreakDownTab.test.tsx | 37 +- .../test/mock_data/PaymentBreakdown.json | 466 ++++++------------ 3 files changed, 173 insertions(+), 336 deletions(-) diff --git a/src/containers/Transactions/BreakDownTab/index.tsx b/src/containers/Transactions/BreakDownTab/index.tsx index 126b5e57c..697caaa14 100644 --- a/src/containers/Transactions/BreakDownTab/index.tsx +++ b/src/containers/Transactions/BreakDownTab/index.tsx @@ -45,7 +45,8 @@ export const BreakDownTab: FC<{ data: any }> = ({ data }) => { } balances.push( <li key={String(index)}> - {balanceLabel} <Amount value={formatAmount(amount)} /> + {balanceLabel}{' '} + <Amount change_type={type} value={formatAmount(amount)} /> </li>, ) }) @@ -290,7 +291,7 @@ export const BreakDownTab: FC<{ data: any }> = ({ data }) => { <div className="title">{t('liquidity_source')}</div> <Cylindars parsed={parsed} account={parsed.sourceAccount} /> </div> - <div className="detail-section"> + <div className="detail-section balance-changes"> <div className="title">{t('balance_changes')}</div> <Transaction parsed={parsed} account={parsed.sourceAccount} /> </div> @@ -302,6 +303,7 @@ export const BreakDownTab: FC<{ data: any }> = ({ data }) => { </div> ) } catch (e) { + // console.log(e) return <h3>{t('incomplete_transaction')}</h3> } } diff --git a/src/containers/Transactions/test/BreakDownTab.test.tsx b/src/containers/Transactions/test/BreakDownTab.test.tsx index 4505cf561..928f7ddf7 100644 --- a/src/containers/Transactions/test/BreakDownTab.test.tsx +++ b/src/containers/Transactions/test/BreakDownTab.test.tsx @@ -39,23 +39,23 @@ describe('BreakdownTab container', () => { wrapper.contains(<div className="title">liquidity_source</div>), ).toBe(true) - expect(wrapper.contains(<option value="source">USD source</option>)).toBe( + expect(wrapper.contains(<option value="source">XRP source</option>)).toBe( true, ) expect( - wrapper.contains(<option value="destination">XRP destination</option>), + wrapper.contains(<option value="destination">USDC destination</option>), ).toBe(true) expect(wrapper.contains(<p>graph_dependent_currency</p>)).toBe(true) expect( - wrapper.contains(<span className="margin-text">amm (98%)</span>), + wrapper.contains(<span className="margin-text">amm (100%)</span>), ).toBe(true) expect( - wrapper.contains(<span className="margin-text">rippling (0%)</span>), + wrapper.contains(<span className="margin-text">rippling (100%)</span>), ).toBe(true) expect( - wrapper.contains(<span className="margin-text">dex (2%)</span>), + wrapper.contains(<span className="margin-text">dex (0%)</span>), ).toBe(true) expect( wrapper.contains(<span className="margin-text">direct (0%)</span>), @@ -64,13 +64,38 @@ describe('BreakdownTab container', () => { expect(wrapper.contains(<div className="title">balance_changes</div>)).toBe( true, ) - expect(wrapper.contains(<span className="badge dex">dex</span>)).toBe(true) + + expect(wrapper.contains(<span className="badge dex">dex</span>)).toBe(false) + expect(wrapper.contains(<span className="badge dex">direct</span>)).toBe( + false, + ) expect( wrapper.contains(<span className="badge rippling">rippling</span>), ).toBe(true) expect(wrapper.contains(<span className="badge amm">amm</span>)).toBe(true) + const balanceChanges = wrapper.find('.balance-changes') + expect(balanceChanges.find('BalanceChange')).toHaveLength(2) // console.log(wrapper.debug()) + + expect( + balanceChanges.contains( + <span className="amount-localized">26.79746261</span>, + ), + ).toBe(true) + expect( + balanceChanges.contains( + <span className="amount-localized">-26.877855</span>, + ), + ).toBe(true) + expect( + balanceChanges.contains( + <span className="amount-localized">-50.624692</span>, + ), + ).toBe(true) + wrapper.unmount() }) + + // console.log(balanceChanges.debug()) }) diff --git a/src/containers/Transactions/test/mock_data/PaymentBreakdown.json b/src/containers/Transactions/test/mock_data/PaymentBreakdown.json index 0c7223914..6336382c0 100644 --- a/src/containers/Transactions/test/mock_data/PaymentBreakdown.json +++ b/src/containers/Transactions/test/mock_data/PaymentBreakdown.json @@ -1,35 +1,40 @@ { - "hash": "9D6DC95E7B95F7302EBF711F9384B51666E3D98D5B177A6EF0C0250D7F3410D2", - "ledger_index": 88213902, - "date": 1716575361000, "tx": { - "Account": "rBrnBoVq2ZBrq53ns1pNCCnsnhFizf59Lj", - "Amount": "149343627", - "DeliverMax": "149343627", - "DeliverMin": "146356755", - "Destination": "rBrnBoVq2ZBrq53ns1pNCCnsnhFizf59Lj", + "Account": "r3GphWJaShhd1RNFnCaGMVyMawYcKHXCvo", + "Amount": { + "currency": "5553444300000000000000000000000000000000", + "issuer": "rcEGREd8NmkKRE8GE424sksyt1tJVFZwu", + "value": "1000000000000000e2" + }, + "DeliverMax": { + "currency": "5553444300000000000000000000000000000000", + "issuer": "rcEGREd8NmkKRE8GE424sksyt1tJVFZwu", + "value": "1000000000000000e2" + }, + "DeliverMin": { + "currency": "5553444300000000000000000000000000000000", + "issuer": "rcEGREd8NmkKRE8GE424sksyt1tJVFZwu", + "value": "25.639817695" + }, + "Destination": "r3GphWJaShhd1RNFnCaGMVyMawYcKHXCvo", "Fee": "12", "Flags": 131072, - "LastLedgerSequence": 88213910, + "LastLedgerSequence": 88214940, "Memos": [ { "Memo": { - "MemoData": "5472616E73616374696F6E20696E6974696174656420627920786D61676E657469632E6F7267" + "MemoData": "53574150205472616E73616374696F6E20696E69746961746564207669612058506D61726B65742E636F6D" } } ], - "SendMax": { - "currency": "USD", - "issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B", - "value": "79.6770766125" - }, - "Sequence": 88196798, - "SigningPubKey": "021738EBB3F528A186919463A8B4C31BADDE35B579B1F2F86DF4383547AE7865C9", - "SourceTag": 10011010, + "SendMax": "50624692", + "Sequence": 88214147, + "SigningPubKey": "02F00DADAD94C694359D9FB84163D390CDC418BDA6313A139945C09D2277B39B55", + "SourceTag": 20221212, "TransactionType": "Payment", - "TxnSignature": "304402205B749EEE748F7EB49BBA734558ADB257FB83B60C7224A7B6CAD9C910619486F202206EE3C12787A085AEFADC6E053824562A48DB2072E5F19D57C6D41415A5DBE5FB", - "ctid": "C542098E000D0000", - "date": 1716575361000, + "TxnSignature": "30450221009510B1D5C84A82D870C2827F6A82E6E8AE930778A75D2623D1E8D8280368D6D602207B74F93375275265AB59988748DD1D34F758960EE8FEE5C572A8E84A71205C0F", + "ctid": "C5420D9400120000", + "date": 1716579292000, "hash": "undefined", "inLedger": "undefined", "ledger_index": "undefined", @@ -38,218 +43,119 @@ { "ModifiedNode": { "FinalFields": { - "Account": "rsFaWztpAqZKoBSLTuhrhYfBV4nwYg7TFP", - "Balance": "56685726", + "Account": "r3GphWJaShhd1RNFnCaGMVyMawYcKHXCvo", + "Balance": "15877383", "Flags": 0, - "OwnerCount": 13, - "Sequence": 75621582 + "OwnerCount": 1, + "Sequence": 88214148 }, "LedgerEntryType": "AccountRoot", - "LedgerIndex": "13CD16752E004F76B468237B2F44DA9CFCA143A28C8EB6686D6A05695C8C3F7B", - "PreviousFields": { "Balance": "59581035", "OwnerCount": 14 }, - "PreviousTxnID": "BE19A57B91862555B86A59A6331E2B56D3156CF18C5E1F74340D3CAFEE909D2F", - "PreviousTxnLgrSeq": 88213895 - } - }, - { - "ModifiedNode": { - "FinalFields": { - "Account": "rBrnBoVq2ZBrq53ns1pNCCnsnhFizf59Lj", - "Balance": "6284089037", - "Flags": 0, - "OwnerCount": 4, - "Sequence": 88196799 - }, - "LedgerEntryType": "AccountRoot", - "LedgerIndex": "181A3BAD298B55A47F4F9A0247D638F33BFF7DEDC7A1ECD1392C2ADF9A3F46C9", - "PreviousFields": { "Balance": "6134969072", "Sequence": 88196798 }, - "PreviousTxnID": "3CFE806B69A8FA91F8965B905BDCDD614B89AF8DC4B8E941D994F00CC1E57BBC", - "PreviousTxnLgrSeq": 88213878 - } - }, - { - "DeletedNode": { - "FinalFields": { - "Account": "rsFaWztpAqZKoBSLTuhrhYfBV4nwYg7TFP", - "BookDirectory": "DFA3B6DDAB58C7E8E5D944E736DA4B7046C30E4F460FD9DE4E12F1B0AE6A0FB3", - "BookNode": "0", - "Flags": 0, - "OwnerNode": "0", - "PreviousTxnID": "BE19A57B91862555B86A59A6331E2B56D3156CF18C5E1F74340D3CAFEE909D2F", - "PreviousTxnLgrSeq": 88213895, - "Sequence": 75621581, - "TakerGets": "0", - "TakerPays": { - "currency": "USD", - "issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B", - "value": "0" - } - }, - "LedgerEntryType": "Offer", - "LedgerIndex": "6AB7F7F338C9FFF65323CCAEF7E38FE93D45D6F67E0ABF11822216D1A90DF89E", - "PreviousFields": { - "TakerGets": "2895309", - "TakerPays": { - "currency": "USD", - "issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B", - "value": "1.543863643330838" - } - } + "LedgerIndex": "4ACE281E26640B951CB4A23768CA6C7E1B0F602053B3C86A653847FE5A5AA1ED", + "PreviousFields": { "Balance": "66502087", "Sequence": 88214147 }, + "PreviousTxnID": "6947EB21D0A745A96F9B2F9B5BABFFE43CE66AF8488365DBC112BC38F8FAC0EA", + "PreviousTxnLgrSeq": 88214779 } }, { "ModifiedNode": { "FinalFields": { "Balance": { - "currency": "USD", + "currency": "5553444300000000000000000000000000000000", "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji", - "value": "-222732.5928364204" + "value": "-26.79746261485543" }, - "Flags": 16908288, + "Flags": 2228224, "HighLimit": { - "currency": "USD", - "issuer": "rHUpaqUPbwzKZdzQ8ZQCme18FrgW9pB4am", - "value": "0" + "currency": "5553444300000000000000000000000000000000", + "issuer": "r3GphWJaShhd1RNFnCaGMVyMawYcKHXCvo", + "value": "775905" }, "HighNode": "0", "LowLimit": { - "currency": "USD", - "issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B", + "currency": "5553444300000000000000000000000000000000", + "issuer": "rcEGREd8NmkKRE8GE424sksyt1tJVFZwu", "value": "0" }, - "LowNode": "bd7" + "LowNode": "14f" }, "LedgerEntryType": "RippleState", - "LedgerIndex": "832F2523220A304ECEB7B2AE3E0D30829ACBCA0A31722FA8D952CC5BE7D9478B", + "LedgerIndex": "5F1DFBA426DB53A57ECEFE3EAEB804107DA1B899D4A90C794E577E5082D7C125", "PreviousFields": { "Balance": { - "currency": "USD", + "currency": "5553444300000000000000000000000000000000", "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji", - "value": "-222654.5789600612" + "value": "0" } }, - "PreviousTxnID": "3CFE806B69A8FA91F8965B905BDCDD614B89AF8DC4B8E941D994F00CC1E57BBC", - "PreviousTxnLgrSeq": 88213878 + "PreviousTxnID": "6947EB21D0A745A96F9B2F9B5BABFFE43CE66AF8488365DBC112BC38F8FAC0EA", + "PreviousTxnLgrSeq": 88214779 } }, { "ModifiedNode": { "FinalFields": { - "AMMID": "EF95AD04AF97DF0DD76C5C624F93EF6F5479CDF8F30FAE612F1D434B5D6A914B", - "Account": "rHUpaqUPbwzKZdzQ8ZQCme18FrgW9pB4am", - "Balance": "417539550052", + "AMMID": "383669860F36CDD7BF543C0711DD523E35F60ACA22C8AAD8FDDBB2632C4C5821", + "Account": "rGHt6LT5v9DVaEAmFzj5ciuxuj41ZjLofs", + "Balance": "534441055888", "Flags": 26214400, "OwnerCount": 1, - "Sequence": 86795414 + "Sequence": 86795379 }, "LedgerEntryType": "AccountRoot", - "LedgerIndex": "B21B05E69AFB3F98B8D6F8066A69C4B189F3D804D8BE896AE11E60189AAFAD51", - "PreviousFields": { "Balance": "417685774720" }, - "PreviousTxnID": "3CFE806B69A8FA91F8965B905BDCDD614B89AF8DC4B8E941D994F00CC1E57BBC", - "PreviousTxnLgrSeq": 88213878 + "LedgerIndex": "AEAC617A4934A4E1029581A159AF8EB3356E4DE3C52324D9D5A73C00B8828BCF", + "PreviousFields": { "Balance": "534390431196" }, + "PreviousTxnID": "1FADA966F7F1E8465E17DE2F83216663BE8360B172AC3A0D13FC81757C64AC42", + "PreviousTxnLgrSeq": 88214747 } }, { "ModifiedNode": { "FinalFields": { "Balance": { - "currency": "USD", + "currency": "5553444300000000000000000000000000000000", "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji", - "value": "-15.22762820406059" - }, - "Flags": 2228224, - "HighLimit": { - "currency": "USD", - "issuer": "rsFaWztpAqZKoBSLTuhrhYfBV4nwYg7TFP", - "value": "1000000000" + "value": "-284983.085646821" }, - "HighNode": "0", - "LowLimit": { - "currency": "USD", - "issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B", - "value": "0" - }, - "LowNode": "b09" - }, - "LedgerEntryType": "RippleState", - "LedgerIndex": "CFCB7153408413FDB9A4B5AD3530680442200FA6F620711A80567DD1A965FD96", - "PreviousFields": { - "Balance": { - "currency": "USD", - "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji", - "value": "-13.68376456072975" - } - }, - "PreviousTxnID": "BE19A57B91862555B86A59A6331E2B56D3156CF18C5E1F74340D3CAFEE909D2F", - "PreviousTxnLgrSeq": 88213895 - } - }, - { - "ModifiedNode": { - "FinalFields": { - "Flags": 0, - "Owner": "rsFaWztpAqZKoBSLTuhrhYfBV4nwYg7TFP", - "RootIndex": "D838BBCEB616863B8BDCF5F5A638245459F3697855EB03F80BD09DA6F256D011" - }, - "LedgerEntryType": "DirectoryNode", - "LedgerIndex": "D838BBCEB616863B8BDCF5F5A638245459F3697855EB03F80BD09DA6F256D011" - } - }, - { - "ModifiedNode": { - "FinalFields": { - "Balance": { - "currency": "USD", - "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji", - "value": "-6450000000000000e-26" - }, - "Flags": 2228224, + "Flags": 16908288, "HighLimit": { - "currency": "USD", - "issuer": "rBrnBoVq2ZBrq53ns1pNCCnsnhFizf59Lj", + "currency": "5553444300000000000000000000000000000000", + "issuer": "rGHt6LT5v9DVaEAmFzj5ciuxuj41ZjLofs", "value": "0" }, "HighNode": "0", "LowLimit": { - "currency": "USD", - "issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B", + "currency": "5553444300000000000000000000000000000000", + "issuer": "rcEGREd8NmkKRE8GE424sksyt1tJVFZwu", "value": "0" }, - "LowNode": "bea" + "LowNode": "10a" }, "LedgerEntryType": "RippleState", - "LedgerIndex": "DE51B19CCC570DB23F7A831943C8D874FB1928E513EC88090A543E32340AE813", + "LedgerIndex": "CDE55A8290DF221A643F51798BE6294A69384066D1ECFB7C2B9BEE2004B38D63", "PreviousFields": { "Balance": { - "currency": "USD", + "currency": "5553444300000000000000000000000000000000", "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji", - "value": "-79.6770766125645" + "value": "-285009.9635018237" } }, - "PreviousTxnID": "3CFE806B69A8FA91F8965B905BDCDD614B89AF8DC4B8E941D994F00CC1E57BBC", - "PreviousTxnLgrSeq": 88213878 - } - }, - { - "DeletedNode": { - "FinalFields": { - "ExchangeRate": "4e12f1b0ae6a0fb3", - "Flags": 0, - "RootIndex": "DFA3B6DDAB58C7E8E5D944E736DA4B7046C30E4F460FD9DE4E12F1B0AE6A0FB3", - "TakerGetsCurrency": "0000000000000000000000000000000000000000", - "TakerGetsIssuer": "0000000000000000000000000000000000000000", - "TakerPaysCurrency": "0000000000000000000000005553440000000000", - "TakerPaysIssuer": "0A20B3C85F482532A9578DBB3950B85CA06594D1" - }, - "LedgerEntryType": "DirectoryNode", - "LedgerIndex": "DFA3B6DDAB58C7E8E5D944E736DA4B7046C30E4F460FD9DE4E12F1B0AE6A0FB3" + "PreviousTxnID": "1FADA966F7F1E8465E17DE2F83216663BE8360B172AC3A0D13FC81757C64AC42", + "PreviousTxnLgrSeq": 88214747 } } ], - "DeliveredAmount": "149119977", - "TransactionIndex": 13, + "DeliveredAmount": { + "currency": "5553444300000000000000000000000000000000", + "issuer": "rcEGREd8NmkKRE8GE424sksyt1tJVFZwu", + "value": "26.79746261485543" + }, + "TransactionIndex": 18, "TransactionResult": "tesSUCCESS", - "delivered_amount": "149119977" + "delivered_amount": { + "currency": "5553444300000000000000000000000000000000", + "issuer": "rcEGREd8NmkKRE8GE424sksyt1tJVFZwu", + "value": "26.79746261485543" + } }, "validated": "undefined", "metaData": "undefined", @@ -260,217 +166,121 @@ { "ModifiedNode": { "FinalFields": { - "Account": "rsFaWztpAqZKoBSLTuhrhYfBV4nwYg7TFP", - "Balance": "56685726", + "Account": "r3GphWJaShhd1RNFnCaGMVyMawYcKHXCvo", + "Balance": "15877383", "Flags": 0, - "OwnerCount": 13, - "Sequence": 75621582 + "OwnerCount": 1, + "Sequence": 88214148 }, "LedgerEntryType": "AccountRoot", - "LedgerIndex": "13CD16752E004F76B468237B2F44DA9CFCA143A28C8EB6686D6A05695C8C3F7B", - "PreviousFields": { "Balance": "59581035", "OwnerCount": 14 }, - "PreviousTxnID": "BE19A57B91862555B86A59A6331E2B56D3156CF18C5E1F74340D3CAFEE909D2F", - "PreviousTxnLgrSeq": 88213895 - } - }, - { - "ModifiedNode": { - "FinalFields": { - "Account": "rBrnBoVq2ZBrq53ns1pNCCnsnhFizf59Lj", - "Balance": "6284089037", - "Flags": 0, - "OwnerCount": 4, - "Sequence": 88196799 - }, - "LedgerEntryType": "AccountRoot", - "LedgerIndex": "181A3BAD298B55A47F4F9A0247D638F33BFF7DEDC7A1ECD1392C2ADF9A3F46C9", - "PreviousFields": { "Balance": "6134969072", "Sequence": 88196798 }, - "PreviousTxnID": "3CFE806B69A8FA91F8965B905BDCDD614B89AF8DC4B8E941D994F00CC1E57BBC", - "PreviousTxnLgrSeq": 88213878 - } - }, - { - "DeletedNode": { - "FinalFields": { - "Account": "rsFaWztpAqZKoBSLTuhrhYfBV4nwYg7TFP", - "BookDirectory": "DFA3B6DDAB58C7E8E5D944E736DA4B7046C30E4F460FD9DE4E12F1B0AE6A0FB3", - "BookNode": "0", - "Flags": 0, - "OwnerNode": "0", - "PreviousTxnID": "BE19A57B91862555B86A59A6331E2B56D3156CF18C5E1F74340D3CAFEE909D2F", - "PreviousTxnLgrSeq": 88213895, - "Sequence": 75621581, - "TakerGets": "0", - "TakerPays": { - "currency": "USD", - "issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B", - "value": "0" - } - }, - "LedgerEntryType": "Offer", - "LedgerIndex": "6AB7F7F338C9FFF65323CCAEF7E38FE93D45D6F67E0ABF11822216D1A90DF89E", - "PreviousFields": { - "TakerGets": "2895309", - "TakerPays": { - "currency": "USD", - "issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B", - "value": "1.543863643330838" - } - } + "LedgerIndex": "4ACE281E26640B951CB4A23768CA6C7E1B0F602053B3C86A653847FE5A5AA1ED", + "PreviousFields": { "Balance": "66502087", "Sequence": 88214147 }, + "PreviousTxnID": "6947EB21D0A745A96F9B2F9B5BABFFE43CE66AF8488365DBC112BC38F8FAC0EA", + "PreviousTxnLgrSeq": 88214779 } }, { "ModifiedNode": { "FinalFields": { "Balance": { - "currency": "USD", + "currency": "5553444300000000000000000000000000000000", "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji", - "value": "-222732.5928364204" + "value": "-26.79746261485543" }, - "Flags": 16908288, + "Flags": 2228224, "HighLimit": { - "currency": "USD", - "issuer": "rHUpaqUPbwzKZdzQ8ZQCme18FrgW9pB4am", - "value": "0" + "currency": "5553444300000000000000000000000000000000", + "issuer": "r3GphWJaShhd1RNFnCaGMVyMawYcKHXCvo", + "value": "775905" }, "HighNode": "0", "LowLimit": { - "currency": "USD", - "issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B", + "currency": "5553444300000000000000000000000000000000", + "issuer": "rcEGREd8NmkKRE8GE424sksyt1tJVFZwu", "value": "0" }, - "LowNode": "bd7" + "LowNode": "14f" }, "LedgerEntryType": "RippleState", - "LedgerIndex": "832F2523220A304ECEB7B2AE3E0D30829ACBCA0A31722FA8D952CC5BE7D9478B", + "LedgerIndex": "5F1DFBA426DB53A57ECEFE3EAEB804107DA1B899D4A90C794E577E5082D7C125", "PreviousFields": { "Balance": { - "currency": "USD", + "currency": "5553444300000000000000000000000000000000", "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji", - "value": "-222654.5789600612" + "value": "0" } }, - "PreviousTxnID": "3CFE806B69A8FA91F8965B905BDCDD614B89AF8DC4B8E941D994F00CC1E57BBC", - "PreviousTxnLgrSeq": 88213878 + "PreviousTxnID": "6947EB21D0A745A96F9B2F9B5BABFFE43CE66AF8488365DBC112BC38F8FAC0EA", + "PreviousTxnLgrSeq": 88214779 } }, { "ModifiedNode": { "FinalFields": { - "AMMID": "EF95AD04AF97DF0DD76C5C624F93EF6F5479CDF8F30FAE612F1D434B5D6A914B", - "Account": "rHUpaqUPbwzKZdzQ8ZQCme18FrgW9pB4am", - "Balance": "417539550052", + "AMMID": "383669860F36CDD7BF543C0711DD523E35F60ACA22C8AAD8FDDBB2632C4C5821", + "Account": "rGHt6LT5v9DVaEAmFzj5ciuxuj41ZjLofs", + "Balance": "534441055888", "Flags": 26214400, "OwnerCount": 1, - "Sequence": 86795414 + "Sequence": 86795379 }, "LedgerEntryType": "AccountRoot", - "LedgerIndex": "B21B05E69AFB3F98B8D6F8066A69C4B189F3D804D8BE896AE11E60189AAFAD51", - "PreviousFields": { "Balance": "417685774720" }, - "PreviousTxnID": "3CFE806B69A8FA91F8965B905BDCDD614B89AF8DC4B8E941D994F00CC1E57BBC", - "PreviousTxnLgrSeq": 88213878 + "LedgerIndex": "AEAC617A4934A4E1029581A159AF8EB3356E4DE3C52324D9D5A73C00B8828BCF", + "PreviousFields": { "Balance": "534390431196" }, + "PreviousTxnID": "1FADA966F7F1E8465E17DE2F83216663BE8360B172AC3A0D13FC81757C64AC42", + "PreviousTxnLgrSeq": 88214747 } }, { "ModifiedNode": { "FinalFields": { "Balance": { - "currency": "USD", + "currency": "5553444300000000000000000000000000000000", "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji", - "value": "-15.22762820406059" - }, - "Flags": 2228224, - "HighLimit": { - "currency": "USD", - "issuer": "rsFaWztpAqZKoBSLTuhrhYfBV4nwYg7TFP", - "value": "1000000000" - }, - "HighNode": "0", - "LowLimit": { - "currency": "USD", - "issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B", - "value": "0" + "value": "-284983.085646821" }, - "LowNode": "b09" - }, - "LedgerEntryType": "RippleState", - "LedgerIndex": "CFCB7153408413FDB9A4B5AD3530680442200FA6F620711A80567DD1A965FD96", - "PreviousFields": { - "Balance": { - "currency": "USD", - "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji", - "value": "-13.68376456072975" - } - }, - "PreviousTxnID": "BE19A57B91862555B86A59A6331E2B56D3156CF18C5E1F74340D3CAFEE909D2F", - "PreviousTxnLgrSeq": 88213895 - } - }, - { - "ModifiedNode": { - "FinalFields": { - "Flags": 0, - "Owner": "rsFaWztpAqZKoBSLTuhrhYfBV4nwYg7TFP", - "RootIndex": "D838BBCEB616863B8BDCF5F5A638245459F3697855EB03F80BD09DA6F256D011" - }, - "LedgerEntryType": "DirectoryNode", - "LedgerIndex": "D838BBCEB616863B8BDCF5F5A638245459F3697855EB03F80BD09DA6F256D011" - } - }, - { - "ModifiedNode": { - "FinalFields": { - "Balance": { - "currency": "USD", - "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji", - "value": "-6450000000000000e-26" - }, - "Flags": 2228224, + "Flags": 16908288, "HighLimit": { - "currency": "USD", - "issuer": "rBrnBoVq2ZBrq53ns1pNCCnsnhFizf59Lj", + "currency": "5553444300000000000000000000000000000000", + "issuer": "rGHt6LT5v9DVaEAmFzj5ciuxuj41ZjLofs", "value": "0" }, "HighNode": "0", "LowLimit": { - "currency": "USD", - "issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B", + "currency": "5553444300000000000000000000000000000000", + "issuer": "rcEGREd8NmkKRE8GE424sksyt1tJVFZwu", "value": "0" }, - "LowNode": "bea" + "LowNode": "10a" }, "LedgerEntryType": "RippleState", - "LedgerIndex": "DE51B19CCC570DB23F7A831943C8D874FB1928E513EC88090A543E32340AE813", + "LedgerIndex": "CDE55A8290DF221A643F51798BE6294A69384066D1ECFB7C2B9BEE2004B38D63", "PreviousFields": { "Balance": { - "currency": "USD", + "currency": "5553444300000000000000000000000000000000", "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji", - "value": "-79.6770766125645" + "value": "-285009.9635018237" } }, - "PreviousTxnID": "3CFE806B69A8FA91F8965B905BDCDD614B89AF8DC4B8E941D994F00CC1E57BBC", - "PreviousTxnLgrSeq": 88213878 - } - }, - { - "DeletedNode": { - "FinalFields": { - "ExchangeRate": "4e12f1b0ae6a0fb3", - "Flags": 0, - "RootIndex": "DFA3B6DDAB58C7E8E5D944E736DA4B7046C30E4F460FD9DE4E12F1B0AE6A0FB3", - "TakerGetsCurrency": "0000000000000000000000000000000000000000", - "TakerGetsIssuer": "0000000000000000000000000000000000000000", - "TakerPaysCurrency": "0000000000000000000000005553440000000000", - "TakerPaysIssuer": "0A20B3C85F482532A9578DBB3950B85CA06594D1" - }, - "LedgerEntryType": "DirectoryNode", - "LedgerIndex": "DFA3B6DDAB58C7E8E5D944E736DA4B7046C30E4F460FD9DE4E12F1B0AE6A0FB3" + "PreviousTxnID": "1FADA966F7F1E8465E17DE2F83216663BE8360B172AC3A0D13FC81757C64AC42", + "PreviousTxnLgrSeq": 88214747 } } ], - "DeliveredAmount": "149119977", - "TransactionIndex": 13, + "DeliveredAmount": { + "currency": "5553444300000000000000000000000000000000", + "issuer": "rcEGREd8NmkKRE8GE424sksyt1tJVFZwu", + "value": "26.79746261485543" + }, + "TransactionIndex": 18, "TransactionResult": "tesSUCCESS", - "delivered_amount": "149119977" - } + "delivered_amount": { + "currency": "5553444300000000000000000000000000000000", + "issuer": "rcEGREd8NmkKRE8GE424sksyt1tJVFZwu", + "value": "26.79746261485543" + } + }, + "hash": "2C9C11811DFC51263267F7D5AA81C807876B905A99AE52321C582D8E186B7E12", + "ledger_index": 88214932, + "date": 1716579292000 } From 792ecbc19d6cf165e17d3b299d48b027f7f84935 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Jun 2024 19:17:00 +0000 Subject: [PATCH 12/79] chore(deps-dev): bump lint-staged from 15.1.0 to 15.2.5 (#991) --- package-lock.json | 519 +++++++++++++++++++++++----------------------- package.json | 2 +- 2 files changed, 265 insertions(+), 256 deletions(-) diff --git a/package-lock.json b/package-lock.json index dedb0fffb..181744e1a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -91,7 +91,7 @@ "eslint-plugin-react-hooks": "^4.6.0", "jest-enzyme": "^7.1.0", "jest-websocket-mock": "^2.5.0", - "lint-staged": "^15.1.0", + "lint-staged": "^15.2.5", "mock-socket": "^9.1.5", "moxios": "^0.4.0", "nodemon": "^3.0.1", @@ -8891,16 +8891,16 @@ } }, "node_modules/cli-truncate": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", - "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", + "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", "dev": true, "dependencies": { "slice-ansi": "^5.0.0", - "string-width": "^5.0.0" + "string-width": "^7.0.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -8931,9 +8931,9 @@ } }, "node_modules/cli-truncate/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", + "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==", "dev": true }, "node_modules/cli-truncate/node_modules/is-fullwidth-code-point": { @@ -8965,17 +8965,17 @@ } }, "node_modules/cli-truncate/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", + "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", "dev": true, "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" }, "engines": { - "node": ">=12" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -10217,12 +10217,6 @@ "stream-shift": "^1.0.0" } }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true - }, "node_modules/ecc-jsbn": { "version": "0.1.2", "dev": true, @@ -12888,6 +12882,18 @@ "node": "6.* || 8.* || >= 10.*" } }, + "node_modules/get-east-asian-width": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.2.0.tgz", + "integrity": "sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/get-intrinsic": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", @@ -20573,12 +20579,15 @@ } }, "node_modules/lilconfig": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", - "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.1.tgz", + "integrity": "sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==", "dev": true, "engines": { - "node": ">=10" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" } }, "node_modules/lines-and-columns": { @@ -20586,21 +20595,21 @@ "license": "MIT" }, "node_modules/lint-staged": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.1.0.tgz", - "integrity": "sha512-ZPKXWHVlL7uwVpy8OZ7YQjYDAuO5X4kMh0XgZvPNxLcCCngd0PO5jKQyy3+s4TL2EnHoIXIzP1422f/l3nZKMw==", - "dev": true, - "dependencies": { - "chalk": "5.3.0", - "commander": "11.1.0", - "debug": "4.3.4", - "execa": "8.0.1", - "lilconfig": "2.1.0", - "listr2": "7.0.2", - "micromatch": "4.0.5", - "pidtree": "0.6.0", - "string-argv": "0.3.2", - "yaml": "2.3.4" + "version": "15.2.5", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.5.tgz", + "integrity": "sha512-j+DfX7W9YUvdzEZl3Rk47FhDF6xwDBV5wwsCPw6BwWZVPYJemusQmvb9bRsW23Sqsaa+vRloAWogbK4BUuU2zA==", + "dev": true, + "dependencies": { + "chalk": "~5.3.0", + "commander": "~12.1.0", + "debug": "~4.3.4", + "execa": "~8.0.1", + "lilconfig": "~3.1.1", + "listr2": "~8.2.1", + "micromatch": "~4.0.7", + "pidtree": "~0.6.0", + "string-argv": "~0.3.2", + "yaml": "~2.4.2" }, "bin": { "lint-staged": "bin/lint-staged.js" @@ -20613,11 +20622,12 @@ } }, "node_modules/lint-staged/node_modules/braces": { - "version": "3.0.2", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, - "license": "MIT", "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" @@ -20636,12 +20646,12 @@ } }, "node_modules/lint-staged/node_modules/commander": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", - "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", "dev": true, "engines": { - "node": ">=16" + "node": ">=18" } }, "node_modules/lint-staged/node_modules/cross-spawn": { @@ -20682,9 +20692,10 @@ } }, "node_modules/lint-staged/node_modules/fill-range": { - "version": "7.0.1", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, - "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -20715,8 +20726,9 @@ }, "node_modules/lint-staged/node_modules/is-number": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.12.0" } @@ -20734,11 +20746,12 @@ } }, "node_modules/lint-staged/node_modules/micromatch": { - "version": "4.0.5", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", "dev": true, - "license": "MIT", "dependencies": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" }, "engines": { @@ -20866,8 +20879,9 @@ }, "node_modules/lint-staged/node_modules/to-regex-range": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, - "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -20891,29 +20905,32 @@ } }, "node_modules/lint-staged/node_modules/yaml": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", - "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.2.tgz", + "integrity": "sha512-B3VqDZ+JAg1nZpaEmWtTXUlBneoGx6CPM9b0TENK6aoSu5t73dItudwdgmi6tHlIZZId4dZ9skcAQ2UbcyAeVA==", "dev": true, + "bin": { + "yaml": "bin.mjs" + }, "engines": { "node": ">= 14" } }, "node_modules/listr2": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-7.0.2.tgz", - "integrity": "sha512-rJysbR9GKIalhTbVL2tYbF2hVyDnrf7pFUZBwjPaMIdadYHmeT+EVi/Bu3qd7ETQPahTotg2WRCatXwRBW554g==", + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.2.1.tgz", + "integrity": "sha512-irTfvpib/rNiD637xeevjO2l3Z5loZmuaRi0L0YE5LfijwVY96oyVn0DFD3o/teAok7nfobMG1THvvcHh/BP6g==", "dev": true, "dependencies": { - "cli-truncate": "^3.1.0", + "cli-truncate": "^4.0.0", "colorette": "^2.0.20", "eventemitter3": "^5.0.1", - "log-update": "^5.0.1", - "rfdc": "^1.3.0", - "wrap-ansi": "^8.1.0" + "log-update": "^6.0.0", + "rfdc": "^1.3.1", + "wrap-ansi": "^9.0.0" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" } }, "node_modules/listr2/node_modules/ansi-regex": { @@ -20941,9 +20958,9 @@ } }, "node_modules/listr2/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", + "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==", "dev": true }, "node_modules/listr2/node_modules/eventemitter3": { @@ -20953,17 +20970,17 @@ "dev": true }, "node_modules/listr2/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", + "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", "dev": true, "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" }, "engines": { - "node": ">=12" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -20985,17 +21002,17 @@ } }, "node_modules/listr2/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", + "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", "dev": true, "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" }, "engines": { - "node": ">=12" + "node": ">=18" }, "funding": { "url": "https://github.com/chalk/wrap-ansi?sponsor=1" @@ -21118,34 +21135,31 @@ "license": "MIT" }, "node_modules/log-update": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-5.0.1.tgz", - "integrity": "sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.0.0.tgz", + "integrity": "sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==", "dev": true, "dependencies": { - "ansi-escapes": "^5.0.0", + "ansi-escapes": "^6.2.0", "cli-cursor": "^4.0.0", - "slice-ansi": "^5.0.0", - "strip-ansi": "^7.0.1", - "wrap-ansi": "^8.0.1" + "slice-ansi": "^7.0.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/log-update/node_modules/ansi-escapes": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-5.0.0.tgz", - "integrity": "sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.1.tgz", + "integrity": "sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==", "dev": true, - "dependencies": { - "type-fest": "^1.0.2" - }, "engines": { - "node": ">=12" + "node": ">=14.16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -21176,51 +21190,54 @@ } }, "node_modules/log-update/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", + "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==", "dev": true }, "node_modules/log-update/node_modules/is-fullwidth-code-point": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", - "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz", + "integrity": "sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==", "dev": true, + "dependencies": { + "get-east-asian-width": "^1.0.0" + }, "engines": { - "node": ">=12" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/log-update/node_modules/slice-ansi": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", - "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.0.tgz", + "integrity": "sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==", "dev": true, "dependencies": { - "ansi-styles": "^6.0.0", - "is-fullwidth-code-point": "^4.0.0" + "ansi-styles": "^6.2.1", + "is-fullwidth-code-point": "^5.0.0" }, "engines": { - "node": ">=12" + "node": ">=18" }, "funding": { "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, "node_modules/log-update/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", + "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", "dev": true, "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" }, "engines": { - "node": ">=12" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -21241,30 +21258,18 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/log-update/node_modules/type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/log-update/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", + "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", "dev": true, "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" }, "engines": { - "node": ">=12" + "node": ">=18" }, "funding": { "url": "https://github.com/chalk/wrap-ansi?sponsor=1" @@ -23861,9 +23866,9 @@ } }, "node_modules/rfdc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.1.tgz", + "integrity": "sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==", "dev": true }, "node_modules/rimraf": { @@ -33992,13 +33997,13 @@ } }, "cli-truncate": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", - "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", + "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", "dev": true, "requires": { "slice-ansi": "^5.0.0", - "string-width": "^5.0.0" + "string-width": "^7.0.0" }, "dependencies": { "ansi-regex": { @@ -34014,9 +34019,9 @@ "dev": true }, "emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", + "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==", "dev": true }, "is-fullwidth-code-point": { @@ -34036,14 +34041,14 @@ } }, "string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", + "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", "dev": true, "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" } }, "strip-ansi": { @@ -34927,12 +34932,6 @@ "stream-shift": "^1.0.0" } }, - "eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true - }, "ecc-jsbn": { "version": "0.1.2", "dev": true, @@ -36777,6 +36776,12 @@ "version": "2.0.5", "dev": true }, + "get-east-asian-width": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.2.0.tgz", + "integrity": "sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==", + "dev": true + }, "get-intrinsic": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", @@ -42094,37 +42099,39 @@ } }, "lilconfig": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", - "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.1.tgz", + "integrity": "sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==", "dev": true }, "lines-and-columns": { "version": "1.1.6" }, "lint-staged": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.1.0.tgz", - "integrity": "sha512-ZPKXWHVlL7uwVpy8OZ7YQjYDAuO5X4kMh0XgZvPNxLcCCngd0PO5jKQyy3+s4TL2EnHoIXIzP1422f/l3nZKMw==", + "version": "15.2.5", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.5.tgz", + "integrity": "sha512-j+DfX7W9YUvdzEZl3Rk47FhDF6xwDBV5wwsCPw6BwWZVPYJemusQmvb9bRsW23Sqsaa+vRloAWogbK4BUuU2zA==", "dev": true, "requires": { - "chalk": "5.3.0", - "commander": "11.1.0", - "debug": "4.3.4", - "execa": "8.0.1", - "lilconfig": "2.1.0", - "listr2": "7.0.2", - "micromatch": "4.0.5", - "pidtree": "0.6.0", - "string-argv": "0.3.2", - "yaml": "2.3.4" + "chalk": "~5.3.0", + "commander": "~12.1.0", + "debug": "~4.3.4", + "execa": "~8.0.1", + "lilconfig": "~3.1.1", + "listr2": "~8.2.1", + "micromatch": "~4.0.7", + "pidtree": "~0.6.0", + "string-argv": "~0.3.2", + "yaml": "~2.4.2" }, "dependencies": { "braces": { - "version": "3.0.2", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "requires": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" } }, "chalk": { @@ -42134,9 +42141,9 @@ "dev": true }, "commander": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", - "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", "dev": true }, "cross-spawn": { @@ -42168,7 +42175,9 @@ } }, "fill-range": { - "version": "7.0.1", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "requires": { "to-regex-range": "^5.0.1" @@ -42188,6 +42197,8 @@ }, "is-number": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, "is-stream": { @@ -42197,10 +42208,12 @@ "dev": true }, "micromatch": { - "version": "4.0.5", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", "dev": true, "requires": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" } }, @@ -42275,6 +42288,8 @@ }, "to-regex-range": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "requires": { "is-number": "^7.0.0" @@ -42290,25 +42305,25 @@ } }, "yaml": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", - "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.2.tgz", + "integrity": "sha512-B3VqDZ+JAg1nZpaEmWtTXUlBneoGx6CPM9b0TENK6aoSu5t73dItudwdgmi6tHlIZZId4dZ9skcAQ2UbcyAeVA==", "dev": true } } }, "listr2": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-7.0.2.tgz", - "integrity": "sha512-rJysbR9GKIalhTbVL2tYbF2hVyDnrf7pFUZBwjPaMIdadYHmeT+EVi/Bu3qd7ETQPahTotg2WRCatXwRBW554g==", + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.2.1.tgz", + "integrity": "sha512-irTfvpib/rNiD637xeevjO2l3Z5loZmuaRi0L0YE5LfijwVY96oyVn0DFD3o/teAok7nfobMG1THvvcHh/BP6g==", "dev": true, "requires": { - "cli-truncate": "^3.1.0", + "cli-truncate": "^4.0.0", "colorette": "^2.0.20", "eventemitter3": "^5.0.1", - "log-update": "^5.0.1", - "rfdc": "^1.3.0", - "wrap-ansi": "^8.1.0" + "log-update": "^6.0.0", + "rfdc": "^1.3.1", + "wrap-ansi": "^9.0.0" }, "dependencies": { "ansi-regex": { @@ -42324,9 +42339,9 @@ "dev": true }, "emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", + "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==", "dev": true }, "eventemitter3": { @@ -42336,14 +42351,14 @@ "dev": true }, "string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", + "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", "dev": true, "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" } }, "strip-ansi": { @@ -42356,14 +42371,14 @@ } }, "wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", + "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", "dev": true, "requires": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" } } } @@ -42462,26 +42477,23 @@ "dev": true }, "log-update": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-5.0.1.tgz", - "integrity": "sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.0.0.tgz", + "integrity": "sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==", "dev": true, "requires": { - "ansi-escapes": "^5.0.0", + "ansi-escapes": "^6.2.0", "cli-cursor": "^4.0.0", - "slice-ansi": "^5.0.0", - "strip-ansi": "^7.0.1", - "wrap-ansi": "^8.0.1" + "slice-ansi": "^7.0.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" }, "dependencies": { "ansi-escapes": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-5.0.0.tgz", - "integrity": "sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==", - "dev": true, - "requires": { - "type-fest": "^1.0.2" - } + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.1.tgz", + "integrity": "sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==", + "dev": true }, "ansi-regex": { "version": "6.0.1", @@ -42496,36 +42508,39 @@ "dev": true }, "emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", + "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==", "dev": true }, "is-fullwidth-code-point": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", - "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", - "dev": true + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz", + "integrity": "sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==", + "dev": true, + "requires": { + "get-east-asian-width": "^1.0.0" + } }, "slice-ansi": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", - "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.0.tgz", + "integrity": "sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==", "dev": true, "requires": { - "ansi-styles": "^6.0.0", - "is-fullwidth-code-point": "^4.0.0" + "ansi-styles": "^6.2.1", + "is-fullwidth-code-point": "^5.0.0" } }, "string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", + "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", "dev": true, "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" } }, "strip-ansi": { @@ -42537,21 +42552,15 @@ "ansi-regex": "^6.0.1" } }, - "type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "dev": true - }, "wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", + "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", "dev": true, "requires": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" } } } @@ -44241,9 +44250,9 @@ "version": "1.0.4" }, "rfdc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.1.tgz", + "integrity": "sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==", "dev": true }, "rimraf": { diff --git a/package.json b/package.json index 83aec7b08..4fe98693b 100644 --- a/package.json +++ b/package.json @@ -86,7 +86,7 @@ "eslint-plugin-react-hooks": "^4.6.0", "jest-enzyme": "^7.1.0", "jest-websocket-mock": "^2.5.0", - "lint-staged": "^15.1.0", + "lint-staged": "^15.2.5", "mock-socket": "^9.1.5", "moxios": "^0.4.0", "nodemon": "^3.0.1", From a48b8ca426c79205f5e076c5d2b2445b3b9f3365 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Jun 2024 19:21:56 +0000 Subject: [PATCH 13/79] chore(deps-dev): bump eslint-plugin-react from 7.33.2 to 7.34.2 (#992) --- package-lock.json | 1522 ++++++++++++++++++++++++++++----------------- package.json | 2 +- 2 files changed, 959 insertions(+), 565 deletions(-) diff --git a/package-lock.json b/package-lock.json index 181744e1a..b039594c6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -87,7 +87,7 @@ "eslint-plugin-import": "^2.29.1", "eslint-plugin-jsx-a11y": "^6.7.1", "eslint-plugin-prettier": "^5.1.3", - "eslint-plugin-react": "^7.33.2", + "eslint-plugin-react": "^7.34.2", "eslint-plugin-react-hooks": "^4.6.0", "jest-enzyme": "^7.1.0", "jest-websocket-mock": "^2.5.0", @@ -7121,13 +7121,16 @@ } }, "node_modules/array-buffer-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -7143,15 +7146,16 @@ "license": "MIT" }, "node_modules/array-includes": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", - "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", "is-string": "^1.0.7" }, "engines": { @@ -7201,6 +7205,26 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/array.prototype.findlastindex": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", @@ -7256,30 +7280,47 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array.prototype.tosorted": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz", - "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==", + "node_modules/array.prototype.toreversed": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz", + "integrity": "sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.1.3" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz", - "integrity": "sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", "dev": true, "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "get-intrinsic": "^1.2.1", - "is-array-buffer": "^3.0.2", + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", "is-shared-array-buffer": "^1.0.2" }, "engines": { @@ -7363,15 +7404,6 @@ "dev": true, "license": "MIT" }, - "node_modules/asynciterator.prototype": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz", - "integrity": "sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.3" - } - }, "node_modules/asynckit": { "version": "0.4.0", "license": "MIT" @@ -7424,8 +7456,12 @@ } }, "node_modules/available-typed-arrays": { - "version": "1.0.5", - "license": "MIT", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -8556,11 +8592,18 @@ } }, "node_modules/call-bind": { - "version": "1.0.2", - "license": "MIT", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -9776,6 +9819,57 @@ "webidl-conversions": "^4.0.2" } }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/debug": { "version": "4.3.4", "license": "MIT", @@ -9925,16 +10019,19 @@ } }, "node_modules/define-data-property": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", - "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dependencies": { - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/define-properties": { @@ -10463,50 +10560,57 @@ } }, "node_modules/es-abstract": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz", - "integrity": "sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==", - "dev": true, - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "arraybuffer.prototype.slice": "^1.0.1", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-set-tostringtag": "^2.0.1", + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.2.1", - "get-symbol-description": "^1.0.0", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", "globalthis": "^1.0.3", "gopd": "^1.0.1", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", + "is-shared-array-buffer": "^1.0.3", "is-string": "^1.0.7", - "is-typed-array": "^1.1.10", + "is-typed-array": "^1.1.13", "is-weakref": "^1.0.2", - "object-inspect": "^1.12.3", + "object-inspect": "^1.13.1", "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.0", - "safe-array-concat": "^1.0.0", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.7", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", - "typed-array-buffer": "^1.0.0", - "typed-array-byte-length": "^1.0.0", - "typed-array-byte-offset": "^1.0.0", - "typed-array-length": "^1.0.4", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.10" + "which-typed-array": "^1.1.15" }, "engines": { "node": ">= 0.4" @@ -10520,6 +10624,25 @@ "dev": true, "license": "MIT" }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-get-iterator": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", @@ -10547,47 +10670,63 @@ "dev": true }, "node_modules/es-iterator-helpers": { - "version": "1.0.15", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.15.tgz", - "integrity": "sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==", + "version": "1.0.19", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz", + "integrity": "sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==", "dev": true, "dependencies": { - "asynciterator.prototype": "^1.0.0", - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "define-properties": "^1.2.1", - "es-abstract": "^1.22.1", - "es-set-tostringtag": "^2.0.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", "globalthis": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", + "internal-slot": "^1.0.7", "iterator.prototype": "^1.1.2", - "safe-array-concat": "^1.0.1" + "safe-array-concat": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/es-set-tostringtag": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", "dev": true, "dependencies": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" }, "engines": { "node": ">= 0.4" } }, "node_modules/es-shim-unscopables": { - "version": "1.0.0", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", "dev": true, - "license": "MIT", "dependencies": { - "has": "^1.0.3" + "hasown": "^2.0.0" } }, "node_modules/es-to-primitive": { @@ -11250,27 +11389,29 @@ } }, "node_modules/eslint-plugin-react": { - "version": "7.33.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz", - "integrity": "sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==", + "version": "7.34.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.2.tgz", + "integrity": "sha512-2HCmrU+/JNigDN6tg55cRDKCQWicYAPB38JGSFDQt95jDm8rrvSUo7YPkOIm5l6ts1j1zCvysNcasvfTMQzUOw==", "dev": true, "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "array.prototype.tosorted": "^1.1.1", + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.2", + "array.prototype.toreversed": "^1.1.2", + "array.prototype.tosorted": "^1.1.3", "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.0.12", + "es-iterator-helpers": "^1.0.19", "estraverse": "^5.3.0", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "object.hasown": "^1.1.2", - "object.values": "^1.1.6", + "object.entries": "^1.1.8", + "object.fromentries": "^2.0.8", + "object.hasown": "^1.1.4", + "object.values": "^1.2.0", "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.4", + "resolve": "^2.0.0-next.5", "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.8" + "string.prototype.matchall": "^4.0.11" }, "engines": { "node": ">=4" @@ -11312,12 +11453,12 @@ } }, "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", - "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", "dev": true, "dependencies": { - "is-core-module": "^2.9.0", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -12778,14 +12919,15 @@ } }, "node_modules/function.prototype.name": { - "version": "1.1.5", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" }, "engines": { "node": ">= 0.4" @@ -12895,14 +13037,18 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -12928,12 +13074,14 @@ } }, "node_modules/get-symbol-description": { - "version": "1.0.0", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" }, "engines": { "node": ">= 0.4" @@ -13138,6 +13286,7 @@ }, "node_modules/has": { "version": "1.0.3", + "dev": true, "license": "MIT", "dependencies": { "function-bind": "^1.1.1" @@ -13162,19 +13311,20 @@ } }, "node_modules/has-property-descriptors": { - "version": "1.0.0", - "license": "MIT", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dependencies": { - "get-intrinsic": "^1.1.1" + "es-define-property": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", "engines": { "node": ">= 0.4" }, @@ -13193,10 +13343,11 @@ } }, "node_modules/has-tostringtag": { - "version": "1.0.0", - "license": "MIT", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dependencies": { - "has-symbols": "^1.0.2" + "has-symbols": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -13247,9 +13398,9 @@ } }, "node_modules/hasown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", - "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dependencies": { "function-bind": "^1.1.2" }, @@ -13609,13 +13760,13 @@ "license": "ISC" }, "node_modules/internal-slot": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", - "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", "dev": true, "dependencies": { - "get-intrinsic": "^1.2.0", - "has": "^1.0.3", + "es-errors": "^1.3.0", + "hasown": "^2.0.0", "side-channel": "^1.0.4" }, "engines": { @@ -13688,14 +13839,16 @@ } }, "node_modules/is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -13815,6 +13968,21 @@ "node": ">=0.10.0" } }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dev": true, + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-date-object": { "version": "1.0.5", "dev": true, @@ -13960,9 +14128,10 @@ } }, "node_modules/is-negative-zero": { - "version": "2.0.2", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -14063,11 +14232,15 @@ } }, "node_modules/is-shared-array-buffer": { - "version": "1.0.2", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2" + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -14114,14 +14287,11 @@ } }, "node_modules/is-typed-array": { - "version": "1.1.10", - "license": "MIT", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "which-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" @@ -22273,9 +22443,9 @@ } }, "node_modules/object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -22313,11 +22483,12 @@ } }, "node_modules/object.assign": { - "version": "4.1.4", - "license": "MIT", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", "has-symbols": "^1.0.3", "object-keys": "^1.1.1" }, @@ -22329,28 +22500,29 @@ } }, "node_modules/object.entries": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", - "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", + "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" } }, "node_modules/object.fromentries": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", - "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -22388,13 +22560,17 @@ } }, "node_modules/object.hasown": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", - "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.4.tgz", + "integrity": "sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==", "dev": true, "dependencies": { - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -22412,14 +22588,14 @@ } }, "node_modules/object.values": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", - "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -22727,6 +22903,14 @@ "node": ">=0.10.0" } }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/postcss": { "version": "8.4.35", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", @@ -23519,15 +23703,16 @@ "license": "MIT" }, "node_modules/reflect.getprototypeof": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz", - "integrity": "sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", + "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.1", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", "globalthis": "^1.0.3", "which-builtin-type": "^1.1.3" }, @@ -23588,14 +23773,15 @@ } }, "node_modules/regexp.prototype.flags": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", - "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "functions-have-names": "^1.2.3" + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" }, "engines": { "node": ">= 0.4" @@ -23999,13 +24185,13 @@ "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==" }, "node_modules/safe-array-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", - "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", "has-symbols": "^1.0.3", "isarray": "^2.0.5" }, @@ -24054,14 +24240,18 @@ } }, "node_modules/safe-regex-test": { - "version": "1.0.0", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", "is-regex": "^1.1.4" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -24211,15 +24401,32 @@ "dev": true, "license": "ISC" }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/set-function-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", - "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dev": true, "dependencies": { - "define-data-property": "^1.0.1", + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.0" + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -24290,12 +24497,17 @@ "peer": true }, "node_modules/side-channel": { - "version": "1.0.4", - "license": "MIT", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -25042,19 +25254,26 @@ } }, "node_modules/string.prototype.matchall": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", - "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", + "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.4.3", - "side-channel": "^1.0.4" + "internal-slot": "^1.0.7", + "regexp.prototype.flags": "^1.5.2", + "set-function-name": "^2.0.2", + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -25077,14 +25296,15 @@ } }, "node_modules/string.prototype.trim": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", - "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -25094,26 +25314,31 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.6", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.6", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -26615,29 +26840,30 @@ } }, "node_modules/typed-array-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", - "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "is-typed-array": "^1.1.10" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" } }, "node_modules/typed-array-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", - "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -26647,16 +26873,17 @@ } }, "node_modules/typed-array-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", - "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", "dev": true, "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -26666,14 +26893,20 @@ } }, "node_modules/typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -27792,15 +28025,15 @@ "peer": true }, "node_modules/which-typed-array": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", - "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -32754,13 +32987,13 @@ "dev": true }, "array-buffer-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" } }, "array-equal": { @@ -32771,15 +33004,16 @@ "version": "1.1.1" }, "array-includes": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", - "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", "is-string": "^1.0.7" } }, @@ -32808,6 +33042,20 @@ "es-shim-unscopables": "^1.0.0" } }, + "array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + } + }, "array.prototype.findlastindex": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", @@ -32845,30 +33093,44 @@ "es-shim-unscopables": "^1.0.0" } }, - "array.prototype.tosorted": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz", - "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==", + "array.prototype.toreversed": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz", + "integrity": "sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==", "dev": true, "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.1.3" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + } + }, + "array.prototype.tosorted": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" } }, "arraybuffer.prototype.slice": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz", - "integrity": "sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", "dev": true, "requires": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "get-intrinsic": "^1.2.1", - "is-array-buffer": "^3.0.2", + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", "is-shared-array-buffer": "^1.0.2" } }, @@ -32930,15 +33192,6 @@ "version": "1.0.1", "dev": true }, - "asynciterator.prototype": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz", - "integrity": "sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.3" - } - }, "asynckit": { "version": "0.4.0" }, @@ -32960,7 +33213,12 @@ } }, "available-typed-arrays": { - "version": "1.0.5" + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "requires": { + "possible-typed-array-names": "^1.0.0" + } }, "aws-sign2": { "version": "0.7.0", @@ -33783,10 +34041,15 @@ } }, "call-bind": { - "version": "1.0.2", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" } }, "callsites": { @@ -34624,6 +34887,39 @@ } } }, + "data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dev": true, + "requires": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + } + }, + "data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + } + }, + "data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dev": true, + "requires": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + } + }, "debug": { "version": "4.3.4", "requires": { @@ -34737,13 +35033,13 @@ "peer": true }, "define-data-property": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", - "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "requires": { - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" } }, "define-properties": { @@ -35110,56 +35406,76 @@ } }, "es-abstract": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz", - "integrity": "sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==", - "dev": true, - "requires": { - "array-buffer-byte-length": "^1.0.0", - "arraybuffer.prototype.slice": "^1.0.1", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-set-tostringtag": "^2.0.1", + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "dev": true, + "requires": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.2.1", - "get-symbol-description": "^1.0.0", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", "globalthis": "^1.0.3", "gopd": "^1.0.1", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", + "is-shared-array-buffer": "^1.0.3", "is-string": "^1.0.7", - "is-typed-array": "^1.1.10", + "is-typed-array": "^1.1.13", "is-weakref": "^1.0.2", - "object-inspect": "^1.12.3", + "object-inspect": "^1.13.1", "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.0", - "safe-array-concat": "^1.0.0", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.7", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", - "typed-array-buffer": "^1.0.0", - "typed-array-byte-length": "^1.0.0", - "typed-array-byte-offset": "^1.0.0", - "typed-array-length": "^1.0.4", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.10" + "which-typed-array": "^1.1.15" } }, "es-array-method-boxes-properly": { "version": "1.0.0", "dev": true }, + "es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "requires": { + "get-intrinsic": "^1.2.4" + } + }, + "es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==" + }, "es-get-iterator": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", @@ -35186,43 +35502,54 @@ } }, "es-iterator-helpers": { - "version": "1.0.15", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.15.tgz", - "integrity": "sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==", + "version": "1.0.19", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz", + "integrity": "sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==", "dev": true, "requires": { - "asynciterator.prototype": "^1.0.0", - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "define-properties": "^1.2.1", - "es-abstract": "^1.22.1", - "es-set-tostringtag": "^2.0.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", "globalthis": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", + "internal-slot": "^1.0.7", "iterator.prototype": "^1.1.2", - "safe-array-concat": "^1.0.1" + "safe-array-concat": "^1.1.2" + } + }, + "es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dev": true, + "requires": { + "es-errors": "^1.3.0" } }, "es-set-tostringtag": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", "dev": true, "requires": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" } }, "es-shim-unscopables": { - "version": "1.0.0", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", "dev": true, "requires": { - "has": "^1.0.3" + "hasown": "^2.0.0" } }, "es-to-primitive": { @@ -35881,27 +36208,29 @@ } }, "eslint-plugin-react": { - "version": "7.33.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz", - "integrity": "sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==", + "version": "7.34.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.2.tgz", + "integrity": "sha512-2HCmrU+/JNigDN6tg55cRDKCQWicYAPB38JGSFDQt95jDm8rrvSUo7YPkOIm5l6ts1j1zCvysNcasvfTMQzUOw==", "dev": true, "requires": { - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "array.prototype.tosorted": "^1.1.1", + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.2", + "array.prototype.toreversed": "^1.1.2", + "array.prototype.tosorted": "^1.1.3", "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.0.12", + "es-iterator-helpers": "^1.0.19", "estraverse": "^5.3.0", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "object.hasown": "^1.1.2", - "object.values": "^1.1.6", + "object.entries": "^1.1.8", + "object.fromentries": "^2.0.8", + "object.hasown": "^1.1.4", + "object.values": "^1.2.0", "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.4", + "resolve": "^2.0.0-next.5", "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.8" + "string.prototype.matchall": "^4.0.11" }, "dependencies": { "doctrine": { @@ -35918,12 +36247,12 @@ "dev": true }, "resolve": { - "version": "2.0.0-next.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", - "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", "dev": true, "requires": { - "is-core-module": "^2.9.0", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" } @@ -36701,13 +37030,15 @@ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" }, "function.prototype.name": { - "version": "1.1.5", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", "dev": true, "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" } }, "functions-have-names": { @@ -36783,14 +37114,15 @@ "dev": true }, "get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" } }, "get-package-type": { @@ -36805,11 +37137,14 @@ } }, "get-symbol-description": { - "version": "1.0.0", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" } }, "get-value": { @@ -36949,6 +37284,7 @@ }, "has": { "version": "1.0.3", + "dev": true, "requires": { "function-bind": "^1.1.1" } @@ -36961,23 +37297,27 @@ "version": "3.0.0" }, "has-property-descriptors": { - "version": "1.0.0", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "requires": { - "get-intrinsic": "^1.1.1" + "es-define-property": "^1.0.0" } }, "has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==" }, "has-symbols": { "version": "1.0.3" }, "has-tostringtag": { - "version": "1.0.0", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "requires": { - "has-symbols": "^1.0.2" + "has-symbols": "^1.0.3" } }, "has-unicode": { @@ -37011,9 +37351,9 @@ } }, "hasown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", - "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "requires": { "function-bind": "^1.1.2" } @@ -37250,13 +37590,13 @@ "dev": true }, "internal-slot": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", - "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", "dev": true, "requires": { - "get-intrinsic": "^1.2.0", - "has": "^1.0.3", + "es-errors": "^1.3.0", + "hasown": "^2.0.0", "side-channel": "^1.0.4" } }, @@ -37301,14 +37641,13 @@ } }, "is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", "dev": true, "requires": { "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" + "get-intrinsic": "^1.2.1" } }, "is-arrayish": { @@ -37382,6 +37721,15 @@ } } }, + "is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dev": true, + "requires": { + "is-typed-array": "^1.1.13" + } + }, "is-date-object": { "version": "1.0.5", "dev": true, @@ -37466,7 +37814,9 @@ } }, "is-negative-zero": { - "version": "2.0.2", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true }, "is-number": { @@ -37528,10 +37878,12 @@ "dev": true }, "is-shared-array-buffer": { - "version": "1.0.2", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", "dev": true, "requires": { - "call-bind": "^1.0.2" + "call-bind": "^1.0.7" } }, "is-stream": { @@ -37556,13 +37908,11 @@ } }, "is-typed-array": { - "version": "1.1.10", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "which-typed-array": "^1.1.14" } }, "is-typedarray": { @@ -43231,9 +43581,9 @@ } }, "object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==" + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==" }, "object-is": { "version": "1.1.5", @@ -43253,34 +43603,37 @@ } }, "object.assign": { - "version": "4.1.4", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", "has-symbols": "^1.0.3", "object-keys": "^1.1.1" } }, "object.entries": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", - "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", + "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" } }, "object.fromentries": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", - "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" } }, "object.getownpropertydescriptors": { @@ -43305,13 +43658,14 @@ } }, "object.hasown": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", - "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.4.tgz", + "integrity": "sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==", "dev": true, "requires": { - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" } }, "object.pick": { @@ -43322,14 +43676,14 @@ } }, "object.values": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", - "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" } }, "oblivious-set": { @@ -43511,6 +43865,11 @@ "version": "0.1.1", "dev": true }, + "possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==" + }, "postcss": { "version": "8.4.35", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", @@ -44011,15 +44370,16 @@ "version": "2.3.0" }, "reflect.getprototypeof": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz", - "integrity": "sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", + "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.1", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", "globalthis": "^1.0.3", "which-builtin-type": "^1.1.3" } @@ -44066,14 +44426,15 @@ } }, "regexp.prototype.flags": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", - "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "functions-have-names": "^1.2.3" + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" } }, "regexpu-core": { @@ -44338,13 +44699,13 @@ "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==" }, "safe-array-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", - "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", "has-symbols": "^1.0.3", "isarray": "^2.0.5" }, @@ -44372,11 +44733,13 @@ } }, "safe-regex-test": { - "version": "1.0.0", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", "is-regex": "^1.1.4" } }, @@ -44485,15 +44848,29 @@ "version": "2.0.0", "dev": true }, + "set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "requires": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + } + }, "set-function-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", - "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dev": true, "requires": { - "define-data-property": "^1.0.1", + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.0" + "has-property-descriptors": "^1.0.2" } }, "set-value": { @@ -44543,11 +44920,14 @@ "peer": true }, "side-channel": { - "version": "1.0.4", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" } }, "signal-exit": { @@ -45062,19 +45442,23 @@ } }, "string.prototype.matchall": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", - "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", + "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.4.3", - "side-channel": "^1.0.4" + "internal-slot": "^1.0.7", + "regexp.prototype.flags": "^1.5.2", + "set-function-name": "^2.0.2", + "side-channel": "^1.0.6" } }, "string.prototype.padend": { @@ -45087,32 +45471,37 @@ } }, "string.prototype.trim": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", - "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" } }, "string.prototype.trimend": { - "version": "1.0.6", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" } }, "string.prototype.trimstart": { - "version": "1.0.6", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" } }, "strip-ansi": { @@ -46118,50 +46507,55 @@ } }, "typed-array-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", - "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "is-typed-array": "^1.1.10" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" } }, "typed-array-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", - "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", "dev": true, "requires": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" } }, "typed-array-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", - "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", "dev": true, "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" } }, "typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", "dev": true, "requires": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" } }, "typedarray-to-buffer": { @@ -46840,15 +47234,15 @@ "peer": true }, "which-typed-array": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", - "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "has-tostringtag": "^1.0.2" } }, "wide-align": { diff --git a/package.json b/package.json index 4fe98693b..06f672fcd 100644 --- a/package.json +++ b/package.json @@ -82,7 +82,7 @@ "eslint-plugin-import": "^2.29.1", "eslint-plugin-jsx-a11y": "^6.7.1", "eslint-plugin-prettier": "^5.1.3", - "eslint-plugin-react": "^7.33.2", + "eslint-plugin-react": "^7.34.2", "eslint-plugin-react-hooks": "^4.6.0", "jest-enzyme": "^7.1.0", "jest-websocket-mock": "^2.5.0", From 6f3e824c72cb71026028ca988211ccd329d7b441 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Jun 2024 19:28:06 +0000 Subject: [PATCH 14/79] chore(deps): bump usehooks-ts from 2.9.1 to 3.1.0 (#993) --- package-lock.json | 33 +++++++++++++++++---------------- package.json | 2 +- 2 files changed, 18 insertions(+), 17 deletions(-) diff --git a/package-lock.json b/package-lock.json index b039594c6..540f5f8f4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -53,7 +53,7 @@ "redux-thunk": "^2.2.0", "ripple-address-codec": "^5.0.0", "topojson-client": "^3.0.0", - "usehooks-ts": "^2.9.1", + "usehooks-ts": "^3.1.0", "vite": "^4.2.3", "vite-plugin-environment": "^1.1.3", "vite-plugin-html": "^3.2.0", @@ -21241,8 +21241,7 @@ "node_modules/lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" }, "node_modules/lodash.escape": { "version": "4.0.1", @@ -27138,16 +27137,17 @@ } }, "node_modules/usehooks-ts": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/usehooks-ts/-/usehooks-ts-2.9.1.tgz", - "integrity": "sha512-2FAuSIGHlY+apM9FVlj8/oNhd+1y+Uwv5QNkMQz1oSfdHk4PXo1qoCw9I5M7j0vpH8CSWFJwXbVPeYDjLCx9PA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/usehooks-ts/-/usehooks-ts-3.1.0.tgz", + "integrity": "sha512-bBIa7yUyPhE1BCc0GmR96VU/15l/9gP1Ch5mYdLcFBaFGQsdmXkvjV0TtOqW1yUd6VjIwDunm+flSciCQXujiw==", + "dependencies": { + "lodash.debounce": "^4.0.8" + }, "engines": { - "node": ">=16.15.0", - "npm": ">=8" + "node": ">=16.15.0" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "react": "^16.8.0 || ^17 || ^18" } }, "node_modules/utf-8-validate": { @@ -42774,8 +42774,7 @@ "lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" }, "lodash.escape": { "version": "4.0.1", @@ -46706,10 +46705,12 @@ "requires": {} }, "usehooks-ts": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/usehooks-ts/-/usehooks-ts-2.9.1.tgz", - "integrity": "sha512-2FAuSIGHlY+apM9FVlj8/oNhd+1y+Uwv5QNkMQz1oSfdHk4PXo1qoCw9I5M7j0vpH8CSWFJwXbVPeYDjLCx9PA==", - "requires": {} + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/usehooks-ts/-/usehooks-ts-3.1.0.tgz", + "integrity": "sha512-bBIa7yUyPhE1BCc0GmR96VU/15l/9gP1Ch5mYdLcFBaFGQsdmXkvjV0TtOqW1yUd6VjIwDunm+flSciCQXujiw==", + "requires": { + "lodash.debounce": "^4.0.8" + } }, "utf-8-validate": { "version": "5.0.8", diff --git a/package.json b/package.json index 06f672fcd..c7a22f153 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,7 @@ "redux-thunk": "^2.2.0", "ripple-address-codec": "^5.0.0", "topojson-client": "^3.0.0", - "usehooks-ts": "^2.9.1", + "usehooks-ts": "^3.1.0", "vite": "^4.2.3", "vite-plugin-environment": "^1.1.3", "vite-plugin-html": "^3.2.0", From c1cd631edcf2bc8c4913d61183a664e651dbee1e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Jun 2024 19:33:31 +0000 Subject: [PATCH 15/79] chore(deps-dev): bump @types/node from 18.19.31 to 18.19.33 (#994) --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 540f5f8f4..898b4ee53 100644 --- a/package-lock.json +++ b/package-lock.json @@ -69,7 +69,7 @@ "@types/enzyme": "^3.10.12", "@types/jest": "^26.0.24", "@types/lodash": "^4.14.194", - "@types/node": "^18.19.31", + "@types/node": "^18.19.33", "@types/react": "^17.0.39", "@types/react-dom": "^17.0.9", "@types/react-redux": "^7.1.22", @@ -6086,9 +6086,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "18.19.31", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.31.tgz", - "integrity": "sha512-ArgCD39YpyyrtFKIqMDvjz79jto5fcI/SVUs2HwB+f0dAzq68yqOdyaSivLiLugSziTpNXLQrVb7RZFmdZzbhA==", + "version": "18.19.33", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.33.tgz", + "integrity": "sha512-NR9+KrpSajr2qBVp/Yt5TU/rp+b5Mayi3+OlMlcg2cVCfRmcG5PWZ7S4+MG9PZ5gWBoc9Pd0BKSRViuBCRPu0A==", "devOptional": true, "dependencies": { "undici-types": "~5.26.4" @@ -32306,9 +32306,9 @@ "dev": true }, "@types/node": { - "version": "18.19.31", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.31.tgz", - "integrity": "sha512-ArgCD39YpyyrtFKIqMDvjz79jto5fcI/SVUs2HwB+f0dAzq68yqOdyaSivLiLugSziTpNXLQrVb7RZFmdZzbhA==", + "version": "18.19.33", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.33.tgz", + "integrity": "sha512-NR9+KrpSajr2qBVp/Yt5TU/rp+b5Mayi3+OlMlcg2cVCfRmcG5PWZ7S4+MG9PZ5gWBoc9Pd0BKSRViuBCRPu0A==", "devOptional": true, "requires": { "undici-types": "~5.26.4" diff --git a/package.json b/package.json index c7a22f153..687c9718f 100644 --- a/package.json +++ b/package.json @@ -64,7 +64,7 @@ "@types/enzyme": "^3.10.12", "@types/jest": "^26.0.24", "@types/lodash": "^4.14.194", - "@types/node": "^18.19.31", + "@types/node": "^18.19.33", "@types/react": "^17.0.39", "@types/react-dom": "^17.0.9", "@types/react-redux": "^7.1.22", From a551eb563293ad5ed9ecbc74f34af9dcdf52fa3d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Jun 2024 20:51:19 +0000 Subject: [PATCH 16/79] chore(deps): bump xrpl-client from 2.1.0 to 2.4.0 (#995) --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 898b4ee53..11751ec71 100644 --- a/package-lock.json +++ b/package-lock.json @@ -59,7 +59,7 @@ "vite-plugin-html": "^3.2.0", "vite-plugin-svgr": "^4.2.0", "vite-tsconfig-paths": "^4.2.0", - "xrpl-client": "^2.1.0" + "xrpl-client": "^2.4.0" }, "devDependencies": { "@babel/eslint-parser": "^7.22.6", @@ -28220,9 +28220,9 @@ } }, "node_modules/xrpl-client": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/xrpl-client/-/xrpl-client-2.1.0.tgz", - "integrity": "sha512-WuMQHTPFgEPq4yXA01vgoVI01iNNFmdHK0OTJoVf/PT6fAJWfTwJwV3AKh1Z7wmQqsAnlKVnMh8g7XzJqS0mFg==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/xrpl-client/-/xrpl-client-2.4.0.tgz", + "integrity": "sha512-UQiCHVtdqqXt5uzOEZzQZ+idXvVJDnXrTjaQ5wwYDAolI6YXSBZCXWaljdY8b10LEZqq6Xr8dMaSHivr8P4LIQ==", "dependencies": { "debug": "^4.1.1", "websocket": "^1.0.34" @@ -47389,9 +47389,9 @@ } }, "xrpl-client": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/xrpl-client/-/xrpl-client-2.1.0.tgz", - "integrity": "sha512-WuMQHTPFgEPq4yXA01vgoVI01iNNFmdHK0OTJoVf/PT6fAJWfTwJwV3AKh1Z7wmQqsAnlKVnMh8g7XzJqS0mFg==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/xrpl-client/-/xrpl-client-2.4.0.tgz", + "integrity": "sha512-UQiCHVtdqqXt5uzOEZzQZ+idXvVJDnXrTjaQ5wwYDAolI6YXSBZCXWaljdY8b10LEZqq6Xr8dMaSHivr8P4LIQ==", "requires": { "debug": "^4.1.1", "websocket": "^1.0.34" diff --git a/package.json b/package.json index 687c9718f..1bd418589 100644 --- a/package.json +++ b/package.json @@ -54,7 +54,7 @@ "vite-plugin-html": "^3.2.0", "vite-plugin-svgr": "^4.2.0", "vite-tsconfig-paths": "^4.2.0", - "xrpl-client": "^2.1.0" + "xrpl-client": "^2.4.0" }, "devDependencies": { "@babel/eslint-parser": "^7.22.6", From 9e98d376e573e9450dc8e47b605abe8985c46018 Mon Sep 17 00:00:00 2001 From: pdp2121 <71317875+pdp2121@users.noreply.github.com> Date: Tue, 2 Jul 2024 13:24:45 -0400 Subject: [PATCH 17/79] fix: amendmentUtils rippled link (#1002) ## High Level Overview of Change <!-- Please include a summary/list of the changes. If too broad, please consider splitting into multiple PRs. --> The link to populate amendment names by id has been changed to: https://raw.githubusercontent.com/XRPLF/rippled/develop/src/libxrpl/protocol/Feature.cpp ### Type of Change <!-- Please check relevant options, delete irrelevant ones. --> - [x] Bug fix (non-breaking change which fixes an issue) - [ ] New feature (non-breaking change which adds functionality) - [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected) - [ ] Refactor (non-breaking change that only restructures code) - [ ] Tests (You added tests for code that already exists, or your new feature included in this PR) - [ ] Documentation Updates - [ ] Translation Updates - [ ] Release --- src/containers/shared/amendmentUtils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/containers/shared/amendmentUtils.ts b/src/containers/shared/amendmentUtils.ts index d1961bd22..96e189e33 100644 --- a/src/containers/shared/amendmentUtils.ts +++ b/src/containers/shared/amendmentUtils.ts @@ -33,7 +33,7 @@ export function getExpectedDate(date: string, language: string) { async function fetchAmendmentNames() { const response = await axios.get( - 'https://raw.githubusercontent.com/ripple/rippled/develop/src/ripple/protocol/impl/Feature.cpp', + 'https://raw.githubusercontent.com/XRPLF/rippled/develop/src/libxrpl/protocol/Feature.cpp', ) const text = response.data From 30a622355c9d4204f268a1733b417d3ac78a9e46 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 3 Jul 2024 11:02:38 -0500 Subject: [PATCH 18/79] chore(deps): bump react-router-dom from 6.18.0 to 6.24.0 (#1004) Bumps [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) from 6.18.0 to 6.24.0. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/remix-run/react-router/releases">react-router-dom's releases</a>.</em></p> <blockquote> <h2>react-router-dom-v5-compat@6.4.0-pre.15</h2> <h3>Patch Changes</h3> <ul> <li>Updated dependencies <ul> <li>react-router@6.4.0-pre.15</li> <li>react-router-dom@6.4.0-pre.15</li> </ul> </li> </ul> <h2>react-router-dom-v5-compat@6.4.0-pre.11</h2> <h3>Patch Changes</h3> <ul> <li>Updated dependencies <ul> <li>react-router@6.4.0-pre.11</li> <li>react-router-dom@6.4.0-pre.11</li> </ul> </li> </ul> <h2>react-router-dom-v5-compat@6.4.0-pre.10</h2> <h3>Patch Changes</h3> <ul> <li>Updated dependencies <ul> <li>react-router@6.4.0-pre.10</li> <li>react-router-dom@6.4.0-pre.10</li> </ul> </li> </ul> <h2>react-router-dom-v5-compat@6.4.0-pre.9</h2> <h3>Patch Changes</h3> <ul> <li>Updated dependencies <ul> <li>react-router@6.4.0-pre.9</li> <li>react-router-dom@6.4.0-pre.9</li> </ul> </li> </ul> <h2>react-router-dom-v5-compat@6.4.0-pre.8</h2> <h3>Patch Changes</h3> <ul> <li>Updated dependencies <ul> <li>react-router@6.4.0-pre.8</li> <li>react-router-dom@6.4.0-pre.8</li> </ul> </li> </ul> <h2>react-router-dom-v5-compat@6.4.0-pre.7</h2> <h3>Patch Changes</h3> <ul> <li>Updated dependencies <ul> <li><code>react-router@6.4.0-pre.7</code></li> <li><code>react-router-dom@6.4.0-pre.7</code></li> </ul> </li> </ul> <h2>react-router-dom-v5-compat@6.4.0-pre.6</h2> <h3>Patch Changes</h3> <ul> <li>44bce3c6: Fix <code>react-router-dom</code> peer dependency version <ul> <li>react-router@6.4.0-pre.6</li> <li>react-router-dom@6.4.0-pre.6</li> </ul> </li> </ul> <h2>react-router-dom-v5-compat@6.4.0-pre.5</h2> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md">react-router-dom's changelog</a>.</em></p> <blockquote> <h2>6.24.0</h2> <h3>Minor Changes</h3> <ul> <li> <p>Add support for Lazy Route Discovery (a.k.a. Fog of War) (<a href="https://redirect.github.com/remix-run/react-router/pull/11626">#11626</a>)</p> <ul> <li>RFC: <a href="https://github.com/remix-run/react-router/discussions/11113">https://github.com/remix-run/react-router/discussions/11113</a></li> <li><code>unstable_patchRoutesOnMiss</code> docs: <a href="https://reactrouter.com/en/main/routers/create-browser-router">https://reactrouter.com/en/main/routers/create-browser-router</a></li> </ul> </li> </ul> <h3>Patch Changes</h3> <ul> <li>Fix <code>fetcher.submit</code> types - remove incorrect <code>navigate</code>/<code>fetcherKey</code>/<code>unstable_viewTransition</code> options because they are only relevant for <code>useSubmit</code> (<a href="https://redirect.github.com/remix-run/react-router/pull/11631">#11631</a>)</li> <li>Allow falsy <code>location.state</code> values passed to <code><StaticRouter></code> (<a href="https://redirect.github.com/remix-run/react-router/pull/11495">#11495</a>)</li> <li>Updated dependencies: <ul> <li><code>react-router@6.24.0</code></li> <li><code>@remix-run/router@1.17.0</code></li> </ul> </li> </ul> <h2>6.23.1</h2> <h3>Patch Changes</h3> <ul> <li>Check for <code>document</code> existence when checking <code>startViewTransition</code> (<a href="https://redirect.github.com/remix-run/react-router/pull/11544">#11544</a>)</li> <li>Change the <code>react-router-dom/server</code> import back to <code>react-router-dom</code> instead of <code>index.ts</code> (<a href="https://redirect.github.com/remix-run/react-router/pull/11514">#11514</a>)</li> <li>Updated dependencies: <ul> <li><code>@remix-run/router@1.16.1</code></li> <li><code>react-router@6.23.1</code></li> </ul> </li> </ul> <h2>6.23.0</h2> <h3>Minor Changes</h3> <ul> <li>Add a new <code>unstable_dataStrategy</code> configuration option (<a href="https://redirect.github.com/remix-run/react-router/pull/11098">#11098</a>) <ul> <li>This option allows Data Router applications to take control over the approach for executing route loaders and actions</li> <li>The default implementation is today's behavior, to fetch all loaders in parallel, but this option allows users to implement more advanced data flows including Remix single-fetch, middleware/context APIs, automatic loader caching, and more</li> </ul> </li> </ul> <h3>Patch Changes</h3> <ul> <li>Updated dependencies: <ul> <li><code>@remix-run/router@1.16.0</code></li> <li><code>react-router@6.23.0</code></li> </ul> </li> </ul> <h2>6.22.3</h2> <h3>Patch Changes</h3> <ul> <li>Updated dependencies: <ul> <li><code>@remix-run/router@1.15.3</code></li> <li><code>react-router@6.22.3</code></li> </ul> </li> </ul> <h2>6.22.2</h2> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/remix-run/react-router/commit/a569d7699fbd6760fd2d5a339aab9bc0caf750ab"><code>a569d76</code></a> chore: Update version for release (<a href="https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom/issues/11717">#11717</a>)</li> <li><a href="https://github.com/remix-run/react-router/commit/a2f718bb037d9ec82d82339bade7e82af0bc8b1a"><code>a2f718b</code></a> chore: Update version for release (pre) (<a href="https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom/issues/11661">#11661</a>)</li> <li><a href="https://github.com/remix-run/react-router/commit/4e85e9884c2c0c7125edc91941b3e023a9d3180c"><code>4e85e98</code></a> Support lazy route discovery (fog of war) (<a href="https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom/issues/11626">#11626</a>)</li> <li><a href="https://github.com/remix-run/react-router/commit/be8a2590eb3ebd91294835031ff788d4fd59070c"><code>be8a259</code></a> Fix fetcher.submit types (<a href="https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom/issues/11631">#11631</a>)</li> <li><a href="https://github.com/remix-run/react-router/commit/58dcfbb97db73a6d29f12a9ab8567540b8e9a24b"><code>58dcfbb</code></a> Merge branch 'release-next' into dev</li> <li><a href="https://github.com/remix-run/react-router/commit/aef5c4a617756e6fcc493de17b4be9997a5a19c8"><code>aef5c4a</code></a> chore: Update version for release (<a href="https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom/issues/11551">#11551</a>)</li> <li><a href="https://github.com/remix-run/react-router/commit/26bc8e295398b571104ef529149c22a0724eeb7e"><code>26bc8e2</code></a> chore: Update version for release (pre) (<a href="https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom/issues/11545">#11545</a>)</li> <li><a href="https://github.com/remix-run/react-router/commit/031478d4acc46cc631673ef14e3215fac97dee8b"><code>031478d</code></a> Add defensive window.document check when checking for startViewTransition (<a href="https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom/issues/1">#1</a>...</li> <li><a href="https://github.com/remix-run/react-router/commit/127e69343f8eeb2233a8bec37d97fca5541f90a1"><code>127e693</code></a> Fix useLocation to receive 0 instead of null when state is set to 0 (<a href="https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom/issues/11495">#11495</a>)</li> <li><a href="https://github.com/remix-run/react-router/commit/9651465485fc6c96c1dd793a96d8af8f1ebf42d0"><code>9651465</code></a> chore: Update version for release (pre) (<a href="https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom/issues/11516">#11516</a>)</li> <li>Additional commits viewable in <a href="https://github.com/remix-run/react-router/commits/react-router-dom@6.24.0/packages/react-router-dom">compare view</a></li> </ul> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 50 +++++++++++++++++++++++------------------------ package.json | 2 +- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/package-lock.json b/package-lock.json index 11751ec71..95406dc95 100644 --- a/package-lock.json +++ b/package-lock.json @@ -45,7 +45,7 @@ "react-query": "^3.39.3", "react-redux": "^8.1.3", "react-router": "^6.12.1", - "react-router-dom": "^6.18.0", + "react-router-dom": "^6.24.0", "react18-json-view": "^0.2.7", "recharts": "^2.12.6", "redux": "^5.0.1", @@ -5438,9 +5438,9 @@ } }, "node_modules/@remix-run/router": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.11.0.tgz", - "integrity": "sha512-BHdhcWgeiudl91HvVa2wxqZjSHbheSgIiDvxrF1VjFzBzpTtuDPkOdOi3Iqvc08kXtFkLjhbS+ML9aM8mJS+wQ==", + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.17.0.tgz", + "integrity": "sha512-2D6XaHEVvkCn682XBnipbJjgZUU7xjLtA4dGJRBVUKpEaDYOZMENZoZjAOSb7qirxt5RupjzZxz4fK2FO+EFPw==", "engines": { "node": ">=14.0.0" } @@ -23476,11 +23476,11 @@ "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" }, "node_modules/react-router": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.18.0.tgz", - "integrity": "sha512-vk2y7Dsy8wI02eRRaRmOs9g2o+aE72YCx5q9VasT1N9v+lrdB79tIqrjMfByHiY5+6aYkH2rUa5X839nwWGPDg==", + "version": "6.24.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.24.0.tgz", + "integrity": "sha512-sQrgJ5bXk7vbcC4BxQxeNa5UmboFm35we1AFK0VvQaz9g0LzxEIuLOhHIoZ8rnu9BO21ishGeL9no1WB76W/eg==", "dependencies": { - "@remix-run/router": "1.11.0" + "@remix-run/router": "1.17.0" }, "engines": { "node": ">=14.0.0" @@ -23490,12 +23490,12 @@ } }, "node_modules/react-router-dom": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.18.0.tgz", - "integrity": "sha512-Ubrue4+Ercc/BoDkFQfc6og5zRQ4A8YxSO3Knsne+eRbZ+IepAsK249XBH/XaFuOYOYr3L3r13CXTLvYt5JDjw==", + "version": "6.24.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.24.0.tgz", + "integrity": "sha512-960sKuau6/yEwS8e+NVEidYQb1hNjAYM327gjEyXlc6r3Skf2vtwuJ2l7lssdegD2YjoKG5l8MsVyeTDlVeY8g==", "dependencies": { - "@remix-run/router": "1.11.0", - "react-router": "6.18.0" + "@remix-run/router": "1.17.0", + "react-router": "6.24.0" }, "engines": { "node": ">=14.0.0" @@ -31849,9 +31849,9 @@ } }, "@remix-run/router": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.11.0.tgz", - "integrity": "sha512-BHdhcWgeiudl91HvVa2wxqZjSHbheSgIiDvxrF1VjFzBzpTtuDPkOdOi3Iqvc08kXtFkLjhbS+ML9aM8mJS+wQ==" + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.17.0.tgz", + "integrity": "sha512-2D6XaHEVvkCn682XBnipbJjgZUU7xjLtA4dGJRBVUKpEaDYOZMENZoZjAOSb7qirxt5RupjzZxz4fK2FO+EFPw==" }, "@rollup/plugin-inject": { "version": "5.0.5", @@ -44210,20 +44210,20 @@ } }, "react-router": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.18.0.tgz", - "integrity": "sha512-vk2y7Dsy8wI02eRRaRmOs9g2o+aE72YCx5q9VasT1N9v+lrdB79tIqrjMfByHiY5+6aYkH2rUa5X839nwWGPDg==", + "version": "6.24.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.24.0.tgz", + "integrity": "sha512-sQrgJ5bXk7vbcC4BxQxeNa5UmboFm35we1AFK0VvQaz9g0LzxEIuLOhHIoZ8rnu9BO21ishGeL9no1WB76W/eg==", "requires": { - "@remix-run/router": "1.11.0" + "@remix-run/router": "1.17.0" } }, "react-router-dom": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.18.0.tgz", - "integrity": "sha512-Ubrue4+Ercc/BoDkFQfc6og5zRQ4A8YxSO3Knsne+eRbZ+IepAsK249XBH/XaFuOYOYr3L3r13CXTLvYt5JDjw==", + "version": "6.24.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.24.0.tgz", + "integrity": "sha512-960sKuau6/yEwS8e+NVEidYQb1hNjAYM327gjEyXlc6r3Skf2vtwuJ2l7lssdegD2YjoKG5l8MsVyeTDlVeY8g==", "requires": { - "@remix-run/router": "1.11.0", - "react-router": "6.18.0" + "@remix-run/router": "1.17.0", + "react-router": "6.24.0" } }, "react-shallow-renderer": { diff --git a/package.json b/package.json index 1bd418589..a436575b0 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "react-query": "^3.39.3", "react-redux": "^8.1.3", "react-router": "^6.12.1", - "react-router-dom": "^6.18.0", + "react-router-dom": "^6.24.0", "react18-json-view": "^0.2.7", "recharts": "^2.12.6", "redux": "^5.0.1", From bc2d613ae22e696555c51b0ea4bb89649fcafbac Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 3 Jul 2024 17:25:40 +0000 Subject: [PATCH 19/79] chore(deps-dev): bump @types/lodash from 4.14.194 to 4.17.6 (#1006) --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 95406dc95..642797b3e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -68,7 +68,7 @@ "@types/create-hash": "^1.2.2", "@types/enzyme": "^3.10.12", "@types/jest": "^26.0.24", - "@types/lodash": "^4.14.194", + "@types/lodash": "^4.17.6", "@types/node": "^18.19.33", "@types/react": "^17.0.39", "@types/react-dom": "^17.0.9", @@ -6074,9 +6074,9 @@ "dev": true }, "node_modules/@types/lodash": { - "version": "4.14.194", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.194.tgz", - "integrity": "sha512-r22s9tAS7imvBt2lyHC9B8AGwWnXaYb1tY09oyLkXDs4vArpYJzw09nj8MLx5VfciBPGIb+ZwG0ssYnEPJxn/g==", + "version": "4.17.6", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.6.tgz", + "integrity": "sha512-OpXEVoCKSS3lQqjx9GGGOapBeuW5eUboYHRlHP9urXPX25IKZ6AnP5ZRxtVf63iieUbsHxLn8NQ5Nlftc6yzAA==", "dev": true }, "node_modules/@types/minimist": { @@ -32294,9 +32294,9 @@ "dev": true }, "@types/lodash": { - "version": "4.14.194", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.194.tgz", - "integrity": "sha512-r22s9tAS7imvBt2lyHC9B8AGwWnXaYb1tY09oyLkXDs4vArpYJzw09nj8MLx5VfciBPGIb+ZwG0ssYnEPJxn/g==", + "version": "4.17.6", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.6.tgz", + "integrity": "sha512-OpXEVoCKSS3lQqjx9GGGOapBeuW5eUboYHRlHP9urXPX25IKZ6AnP5ZRxtVf63iieUbsHxLn8NQ5Nlftc6yzAA==", "dev": true }, "@types/minimist": { diff --git a/package.json b/package.json index a436575b0..63b2241fe 100644 --- a/package.json +++ b/package.json @@ -63,7 +63,7 @@ "@types/create-hash": "^1.2.2", "@types/enzyme": "^3.10.12", "@types/jest": "^26.0.24", - "@types/lodash": "^4.14.194", + "@types/lodash": "^4.17.6", "@types/node": "^18.19.33", "@types/react": "^17.0.39", "@types/react-dom": "^17.0.9", From 81be2d02fd06760966bd11c9cb2ebc858fdbf3c3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 3 Jul 2024 17:31:16 +0000 Subject: [PATCH 20/79] chore(deps-dev): bump @babel/preset-react from 7.22.15 to 7.24.7 (#1007) --- package-lock.json | 504 +++++++++++++++++++++++----------------------- package.json | 2 +- 2 files changed, 258 insertions(+), 248 deletions(-) diff --git a/package-lock.json b/package-lock.json index 642797b3e..d20793619 100644 --- a/package-lock.json +++ b/package-lock.json @@ -64,7 +64,7 @@ "devDependencies": { "@babel/eslint-parser": "^7.22.6", "@babel/preset-env": "^7.24.5", - "@babel/preset-react": "^7.22.15", + "@babel/preset-react": "^7.24.7", "@types/create-hash": "^1.2.2", "@types/enzyme": "^3.10.12", "@types/jest": "^26.0.24", @@ -152,12 +152,12 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", - "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", "dependencies": { - "@babel/highlight": "^7.23.4", - "chalk": "^2.4.2" + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" @@ -240,13 +240,13 @@ } }, "node_modules/@babel/generator": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", - "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.7.tgz", + "integrity": "sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==", "dependencies": { - "@babel/types": "^7.23.6", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", + "@babel/types": "^7.24.7", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" }, "engines": { @@ -254,12 +254,12 @@ } }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz", + "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==", "dev": true, "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -388,31 +388,34 @@ } }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz", + "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==", + "dependencies": { + "@babel/types": "^7.24.7" + }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-function-name": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", - "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz", + "integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==", "dependencies": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" + "@babel/template": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz", + "integrity": "sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -431,11 +434,12 @@ } }, "node_modules/@babel/helper-module-imports": { - "version": "7.24.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz", - "integrity": "sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", "dependencies": { - "@babel/types": "^7.24.0" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -472,9 +476,9 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.5.tgz", - "integrity": "sha512-xjNLDopRzW2o6ba0gKbkZq5YWEBaK3PCyTOY1K2P/O07LGMhMqlMXPxwN4S5/RhWuCobT8z0jrlKGlYmeR1OhQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.7.tgz", + "integrity": "sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==", "engines": { "node": ">=6.9.0" } @@ -537,36 +541,36 @@ } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.5.tgz", - "integrity": "sha512-5CHncttXohrHk8GWOFCcCl4oRD9fKosWlIRgWm4ql9VYioKm52Mk2xsmoohvm7f3JoiLSM5ZgJuRaf5QZZYd3Q==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", + "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", "dependencies": { - "@babel/types": "^7.24.5" + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", - "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz", + "integrity": "sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.5.tgz", - "integrity": "sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", - "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.7.tgz", + "integrity": "sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==", "engines": { "node": ">=6.9.0" } @@ -599,22 +603,23 @@ } }, "node_modules/@babel/highlight": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", - "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", "dependencies": { - "@babel/helper-validator-identifier": "^7.22.20", + "@babel/helper-validator-identifier": "^7.24.7", "chalk": "^2.4.2", - "js-tokens": "^4.0.0" + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.5.tgz", - "integrity": "sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.7.tgz", + "integrity": "sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==", "bin": { "parser": "bin/babel-parser.js" }, @@ -955,12 +960,12 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", - "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz", + "integrity": "sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1713,12 +1718,12 @@ } }, "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.22.5.tgz", - "integrity": "sha512-PVk3WPYudRF5z4GKMEYUrLjPl38fJSKNaEOkFuoprioowGuWN6w2RKznuFNSlJx7pzzXXStPUnNSOEO0jL5EVw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.7.tgz", + "integrity": "sha512-H/Snz9PFxKsS1JLI4dJLtnJgCJRoo0AUm3chP6NYr+9En1JMKloheEiLIhlp5MDVznWo+H3AAC1Mc8lmUEpsgg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1728,16 +1733,16 @@ } }, "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.15.tgz", - "integrity": "sha512-oKckg2eZFa8771O/5vi7XeTvmM6+O9cxZu+kanTU7tD4sin5nO/G8jGJhq8Hvt2Z0kUoEDRayuZLaUlYl8QuGA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.24.7.tgz", + "integrity": "sha512-+Dj06GDZEFRYvclU6k4bme55GKBEWUmByM/eoKuqg4zTNQHiApWRhQph5fxQB2wAEFvRzL1tOEj1RJ19wJrhoA==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-jsx": "^7.22.5", - "@babel/types": "^7.22.15" + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-jsx": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1747,12 +1752,12 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz", - "integrity": "sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.24.7.tgz", + "integrity": "sha512-QG9EnzoGn+Qar7rxuW+ZOsbWOt56FvvI93xInqsZDC5fsekx1AlIO4KIJ5M+D0p0SqSH156EpmZyXq630B8OlQ==", "dev": true, "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.22.5" + "@babel/plugin-transform-react-jsx": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1790,13 +1795,13 @@ } }, "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.22.5.tgz", - "integrity": "sha512-gP4k85wx09q+brArVinTXhWiyzLl9UpmGva0+mWyKxk6JZequ05x3eUcIUE+FyttPKJFRRVtAvQaJ6YF9h1ZpA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.24.7.tgz", + "integrity": "sha512-PLgBVk3fzbmEjBJ/u8kFzOqS9tUeDjiaWud/rRym/yjCo/M9cASPlnrd2ZmmZpQT40fOOrvR8jh+n8jikrOhNA==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -2182,17 +2187,17 @@ } }, "node_modules/@babel/preset-react": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.22.15.tgz", - "integrity": "sha512-Csy1IJ2uEh/PecCBXXoZGAZBeCATTuePzCSB7dLYWS0vOEj6CNpjxIhW4duWwZodBNueH7QO14WbGn8YyeuN9w==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.24.7.tgz", + "integrity": "sha512-AAH4lEkpmzFWrGVlHaxJB7RLH21uPQ9+He+eFLWHmF9IuFQVugz8eAsamaW0DXRrTfco5zj1wWtpdcXJUOfsag==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.15", - "@babel/plugin-transform-react-display-name": "^7.22.5", - "@babel/plugin-transform-react-jsx": "^7.22.15", - "@babel/plugin-transform-react-jsx-development": "^7.22.5", - "@babel/plugin-transform-react-pure-annotations": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-validator-option": "^7.24.7", + "@babel/plugin-transform-react-display-name": "^7.24.7", + "@babel/plugin-transform-react-jsx": "^7.24.7", + "@babel/plugin-transform-react-jsx-development": "^7.24.7", + "@babel/plugin-transform-react-pure-annotations": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -2238,31 +2243,31 @@ } }, "node_modules/@babel/template": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", - "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.7.tgz", + "integrity": "sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==", "dependencies": { - "@babel/code-frame": "^7.23.5", - "@babel/parser": "^7.24.0", - "@babel/types": "^7.24.0" + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.23.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.7.tgz", - "integrity": "sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==", - "dependencies": { - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.6", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.6", - "@babel/types": "^7.23.6", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.7.tgz", + "integrity": "sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==", + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.24.7", + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-function-name": "^7.24.7", + "@babel/helper-hoist-variables": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/types": "^7.24.7", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -2271,12 +2276,12 @@ } }, "node_modules/@babel/types": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.5.tgz", - "integrity": "sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.7.tgz", + "integrity": "sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==", "dependencies": { - "@babel/helper-string-parser": "^7.24.1", - "@babel/helper-validator-identifier": "^7.24.5", + "@babel/helper-string-parser": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7", "to-fast-properties": "^2.0.0" }, "engines": { @@ -5177,13 +5182,13 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "dependencies": { - "@jridgewell/set-array": "^1.0.1", + "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" @@ -5198,9 +5203,9 @@ } }, "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "engines": { "node": ">=6.0.0" } @@ -5220,9 +5225,9 @@ "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz", - "integrity": "sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==", + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -28327,12 +28332,12 @@ } }, "@babel/code-frame": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", - "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", "requires": { - "@babel/highlight": "^7.23.4", - "chalk": "^2.4.2" + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" } }, "@babel/compat-data": { @@ -28392,23 +28397,23 @@ } }, "@babel/generator": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", - "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.7.tgz", + "integrity": "sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==", "requires": { - "@babel/types": "^7.23.6", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", + "@babel/types": "^7.24.7", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" } }, "@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz", + "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==", "dev": true, "requires": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.7" } }, "@babel/helper-builder-binary-assignment-operator-visitor": { @@ -28510,25 +28515,28 @@ } }, "@babel/helper-environment-visitor": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==" + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz", + "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==", + "requires": { + "@babel/types": "^7.24.7" + } }, "@babel/helper-function-name": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", - "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz", + "integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==", "requires": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" + "@babel/template": "^7.24.7", + "@babel/types": "^7.24.7" } }, "@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz", + "integrity": "sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==", "requires": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.7" } }, "@babel/helper-member-expression-to-functions": { @@ -28541,11 +28549,12 @@ } }, "@babel/helper-module-imports": { - "version": "7.24.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz", - "integrity": "sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", "requires": { - "@babel/types": "^7.24.0" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" } }, "@babel/helper-module-transforms": { @@ -28570,9 +28579,9 @@ } }, "@babel/helper-plugin-utils": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.5.tgz", - "integrity": "sha512-xjNLDopRzW2o6ba0gKbkZq5YWEBaK3PCyTOY1K2P/O07LGMhMqlMXPxwN4S5/RhWuCobT8z0jrlKGlYmeR1OhQ==" + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.7.tgz", + "integrity": "sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==" }, "@babel/helper-remap-async-to-generator": { "version": "7.22.20", @@ -28614,27 +28623,27 @@ } }, "@babel/helper-split-export-declaration": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.5.tgz", - "integrity": "sha512-5CHncttXohrHk8GWOFCcCl4oRD9fKosWlIRgWm4ql9VYioKm52Mk2xsmoohvm7f3JoiLSM5ZgJuRaf5QZZYd3Q==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", + "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", "requires": { - "@babel/types": "^7.24.5" + "@babel/types": "^7.24.7" } }, "@babel/helper-string-parser": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", - "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==" + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz", + "integrity": "sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==" }, "@babel/helper-validator-identifier": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.5.tgz", - "integrity": "sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==" + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==" }, "@babel/helper-validator-option": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", - "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==" + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.7.tgz", + "integrity": "sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==" }, "@babel/helper-wrap-function": { "version": "7.24.5", @@ -28658,19 +28667,20 @@ } }, "@babel/highlight": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", - "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", "requires": { - "@babel/helper-validator-identifier": "^7.22.20", + "@babel/helper-validator-identifier": "^7.24.7", "chalk": "^2.4.2", - "js-tokens": "^4.0.0" + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" } }, "@babel/parser": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.5.tgz", - "integrity": "sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==" + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.7.tgz", + "integrity": "sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==" }, "@babel/plugin-bugfix-firefox-class-in-computed-class-key": { "version": "7.24.5", @@ -28886,12 +28896,12 @@ } }, "@babel/plugin-syntax-jsx": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", - "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz", + "integrity": "sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" } }, "@babel/plugin-syntax-logical-assignment-operators": { @@ -29361,34 +29371,34 @@ } }, "@babel/plugin-transform-react-display-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.22.5.tgz", - "integrity": "sha512-PVk3WPYudRF5z4GKMEYUrLjPl38fJSKNaEOkFuoprioowGuWN6w2RKznuFNSlJx7pzzXXStPUnNSOEO0jL5EVw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.7.tgz", + "integrity": "sha512-H/Snz9PFxKsS1JLI4dJLtnJgCJRoo0AUm3chP6NYr+9En1JMKloheEiLIhlp5MDVznWo+H3AAC1Mc8lmUEpsgg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" } }, "@babel/plugin-transform-react-jsx": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.15.tgz", - "integrity": "sha512-oKckg2eZFa8771O/5vi7XeTvmM6+O9cxZu+kanTU7tD4sin5nO/G8jGJhq8Hvt2Z0kUoEDRayuZLaUlYl8QuGA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.24.7.tgz", + "integrity": "sha512-+Dj06GDZEFRYvclU6k4bme55GKBEWUmByM/eoKuqg4zTNQHiApWRhQph5fxQB2wAEFvRzL1tOEj1RJ19wJrhoA==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-jsx": "^7.22.5", - "@babel/types": "^7.22.15" + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-jsx": "^7.24.7", + "@babel/types": "^7.24.7" } }, "@babel/plugin-transform-react-jsx-development": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz", - "integrity": "sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.24.7.tgz", + "integrity": "sha512-QG9EnzoGn+Qar7rxuW+ZOsbWOt56FvvI93xInqsZDC5fsekx1AlIO4KIJ5M+D0p0SqSH156EpmZyXq630B8OlQ==", "dev": true, "requires": { - "@babel/plugin-transform-react-jsx": "^7.22.5" + "@babel/plugin-transform-react-jsx": "^7.24.7" } }, "@babel/plugin-transform-react-jsx-self": { @@ -29408,13 +29418,13 @@ } }, "@babel/plugin-transform-react-pure-annotations": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.22.5.tgz", - "integrity": "sha512-gP4k85wx09q+brArVinTXhWiyzLl9UpmGva0+mWyKxk6JZequ05x3eUcIUE+FyttPKJFRRVtAvQaJ6YF9h1ZpA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.24.7.tgz", + "integrity": "sha512-PLgBVk3fzbmEjBJ/u8kFzOqS9tUeDjiaWud/rRym/yjCo/M9cASPlnrd2ZmmZpQT40fOOrvR8jh+n8jikrOhNA==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" } }, "@babel/plugin-transform-regenerator": { @@ -29696,17 +29706,17 @@ } }, "@babel/preset-react": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.22.15.tgz", - "integrity": "sha512-Csy1IJ2uEh/PecCBXXoZGAZBeCATTuePzCSB7dLYWS0vOEj6CNpjxIhW4duWwZodBNueH7QO14WbGn8YyeuN9w==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.24.7.tgz", + "integrity": "sha512-AAH4lEkpmzFWrGVlHaxJB7RLH21uPQ9+He+eFLWHmF9IuFQVugz8eAsamaW0DXRrTfco5zj1wWtpdcXJUOfsag==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.15", - "@babel/plugin-transform-react-display-name": "^7.22.5", - "@babel/plugin-transform-react-jsx": "^7.22.15", - "@babel/plugin-transform-react-jsx-development": "^7.22.5", - "@babel/plugin-transform-react-pure-annotations": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-validator-option": "^7.24.7", + "@babel/plugin-transform-react-display-name": "^7.24.7", + "@babel/plugin-transform-react-jsx": "^7.24.7", + "@babel/plugin-transform-react-jsx-development": "^7.24.7", + "@babel/plugin-transform-react-pure-annotations": "^7.24.7" } }, "@babel/preset-typescript": { @@ -29737,39 +29747,39 @@ } }, "@babel/template": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", - "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.7.tgz", + "integrity": "sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==", "requires": { - "@babel/code-frame": "^7.23.5", - "@babel/parser": "^7.24.0", - "@babel/types": "^7.24.0" + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/types": "^7.24.7" } }, "@babel/traverse": { - "version": "7.23.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.7.tgz", - "integrity": "sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==", - "requires": { - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.6", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.6", - "@babel/types": "^7.23.6", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.7.tgz", + "integrity": "sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==", + "requires": { + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.24.7", + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-function-name": "^7.24.7", + "@babel/helper-hoist-variables": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/types": "^7.24.7", "debug": "^4.3.1", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.5.tgz", - "integrity": "sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.7.tgz", + "integrity": "sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==", "requires": { - "@babel/helper-string-parser": "^7.24.1", - "@babel/helper-validator-identifier": "^7.24.5", + "@babel/helper-string-parser": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7", "to-fast-properties": "^2.0.0" } }, @@ -31674,13 +31684,13 @@ } }, "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "requires": { - "@jridgewell/set-array": "^1.0.1", + "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/trace-mapping": "^0.3.24" } }, "@jridgewell/resolve-uri": { @@ -31689,9 +31699,9 @@ "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" }, "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==" }, "@jridgewell/source-map": { "version": "0.3.2", @@ -31708,9 +31718,9 @@ "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" }, "@jridgewell/trace-mapping": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz", - "integrity": "sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==", + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "requires": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" diff --git a/package.json b/package.json index 63b2241fe..ce67b1da0 100644 --- a/package.json +++ b/package.json @@ -59,7 +59,7 @@ "devDependencies": { "@babel/eslint-parser": "^7.22.6", "@babel/preset-env": "^7.24.5", - "@babel/preset-react": "^7.22.15", + "@babel/preset-react": "^7.24.7", "@types/create-hash": "^1.2.2", "@types/enzyme": "^3.10.12", "@types/jest": "^26.0.24", From cd21a6cbf3ffa1f9036f2c0e508850e187dc0513 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari <mvadari@ripple.com> Date: Fri, 5 Jul 2024 11:45:00 -0400 Subject: [PATCH 21/79] fix: remove xchain from legend (#1013) ## High Level Overview of Change This PR removes `XChain` from the homepage legend. ### Context of Change XLS-38 has been put on hiatus for now. If it starts moving back towards being activated, we can revert this commit. ### Type of Change - [x] Bug fix (non-breaking change which fixes an issue) --- src/containers/Ledgers/Legend.tsx | 1 - src/containers/Ledgers/test/Legend.test.tsx | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/containers/Ledgers/Legend.tsx b/src/containers/Ledgers/Legend.tsx index d0b7e764f..d4a408fbc 100644 --- a/src/containers/Ledgers/Legend.tsx +++ b/src/containers/Ledgers/Legend.tsx @@ -39,7 +39,6 @@ export const Legend = () => { TransactionCategory.DEX, TransactionCategory.NFT, TransactionCategory.ACCOUNT, - TransactionCategory.XCHAIN, TransactionCategory.PSEUDO, TransactionCategory.UNKNOWN, ] diff --git a/src/containers/Ledgers/test/Legend.test.tsx b/src/containers/Ledgers/test/Legend.test.tsx index 8f9336301..4624cb95e 100644 --- a/src/containers/Ledgers/test/Legend.test.tsx +++ b/src/containers/Ledgers/test/Legend.test.tsx @@ -27,7 +27,7 @@ describe(`Legend`, () => { expect(wrapper.find('.legend-heading')).toHaveLength(2) expect(wrapper.find('.legend-section')).toHaveLength(2) expect(wrapper.find(TransactionActionIcon)).toHaveLength(5) - expect(wrapper.find('.legend-category')).toHaveLength(7) + expect(wrapper.find('.legend-category')).toHaveLength(6) wrapper.unmount() }) it(`renders open when localStorage entry 'explorer-legend-previous-interaction' is set to false`, () => { From 9660793c3b887ba86e0efac5dc838ea6b994f6c1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Jul 2024 16:10:29 +0000 Subject: [PATCH 22/79] chore(deps-dev): bump xrpl from 3.0.0 to 3.1.0 (#1005) --- package-lock.json | 50 +++++++++++++++++++++++------------------------ package.json | 2 +- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/package-lock.json b/package-lock.json index d20793619..383903997 100644 --- a/package-lock.json +++ b/package-lock.json @@ -111,7 +111,7 @@ "ts-jest": "^26.5.6", "ts-node": "^10.9.2", "typescript": "^4.9.4", - "xrpl": "^3.0.0" + "xrpl": "^3.1.0" }, "engines": { "node": ">=18.0.0 <19", @@ -6838,9 +6838,9 @@ } }, "node_modules/@xrplf/isomorphic": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@xrplf/isomorphic/-/isomorphic-1.0.0.tgz", - "integrity": "sha512-IyMsxyjkJK8YWq566KyuFuh/PUiLzQ02RbUO5qa+vEQb6zIAR9MzFwN7wBmBy7wmKkjligcdNDMG5EaBRH8FxQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@xrplf/isomorphic/-/isomorphic-1.0.1.tgz", + "integrity": "sha512-0bIpgx8PDjYdrLFeC3csF305QQ1L7sxaWnL5y71mCvhenZzJgku9QsA+9QCXBC1eNYtxWO/xR91zrXJy2T/ixg==", "dependencies": { "@noble/hashes": "^1.0.0", "eventemitter3": "5.0.1", @@ -24085,12 +24085,12 @@ } }, "node_modules/ripple-binary-codec": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ripple-binary-codec/-/ripple-binary-codec-2.0.0.tgz", - "integrity": "sha512-zakENc9A5dlW85uzrmQHrJehymhL59ftggboRNrjxFDJdlNJ6DSE210P3ys/9kL0oVtOzFnTrOPFfxHZeOsA/Q==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ripple-binary-codec/-/ripple-binary-codec-2.1.0.tgz", + "integrity": "sha512-q0GAx+hj3UVcDbhXVjk7qeNfgUMehlElYJwiCuIBwqs/51GVTOwLr39Ht3eNsX5ow2xPRaC5mqHwcFDvLRm6cA==", "dev": true, "dependencies": { - "@xrplf/isomorphic": "^1.0.0", + "@xrplf/isomorphic": "^1.0.1", "bignumber.js": "^9.0.0", "ripple-address-codec": "^5.0.0" }, @@ -28204,20 +28204,20 @@ "peer": true }, "node_modules/xrpl": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xrpl/-/xrpl-3.0.0.tgz", - "integrity": "sha512-QC+dNx3tvMEn9IrxcXFFa0rWwvBwACkGFNKl+W2miMGYnlgSiIsnjdqwtG2WRs0Pyxs5dd9nBTQHyQ1BPxZ78A==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/xrpl/-/xrpl-3.1.0.tgz", + "integrity": "sha512-+97WiaF/AQTT6fXgD9Z5xyYbtlML0USCWrZFYjrC57yqtlWluacwwbMZa/I6ByVIKqCqVXJwRuRl20IQGlVGlg==", "dev": true, "dependencies": { "@scure/bip32": "^1.3.1", "@scure/bip39": "^1.2.1", - "@xrplf/isomorphic": "^1.0.0", + "@xrplf/isomorphic": "^1.0.1", "@xrplf/secret-numbers": "^1.0.0", "bignumber.js": "^9.0.0", "cross-fetch": "^4.0.0", "eventemitter3": "^5.0.1", "ripple-address-codec": "^5.0.0", - "ripple-binary-codec": "^2.0.0", + "ripple-binary-codec": "^2.1.0", "ripple-keypairs": "^2.0.0" }, "engines": { @@ -32795,9 +32795,9 @@ } }, "@xrplf/isomorphic": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@xrplf/isomorphic/-/isomorphic-1.0.0.tgz", - "integrity": "sha512-IyMsxyjkJK8YWq566KyuFuh/PUiLzQ02RbUO5qa+vEQb6zIAR9MzFwN7wBmBy7wmKkjligcdNDMG5EaBRH8FxQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@xrplf/isomorphic/-/isomorphic-1.0.1.tgz", + "integrity": "sha512-0bIpgx8PDjYdrLFeC3csF305QQ1L7sxaWnL5y71mCvhenZzJgku9QsA+9QCXBC1eNYtxWO/xR91zrXJy2T/ixg==", "requires": { "@noble/hashes": "^1.0.0", "eventemitter3": "5.0.1", @@ -44642,12 +44642,12 @@ } }, "ripple-binary-codec": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ripple-binary-codec/-/ripple-binary-codec-2.0.0.tgz", - "integrity": "sha512-zakENc9A5dlW85uzrmQHrJehymhL59ftggboRNrjxFDJdlNJ6DSE210P3ys/9kL0oVtOzFnTrOPFfxHZeOsA/Q==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ripple-binary-codec/-/ripple-binary-codec-2.1.0.tgz", + "integrity": "sha512-q0GAx+hj3UVcDbhXVjk7qeNfgUMehlElYJwiCuIBwqs/51GVTOwLr39Ht3eNsX5ow2xPRaC5mqHwcFDvLRm6cA==", "dev": true, "requires": { - "@xrplf/isomorphic": "^1.0.0", + "@xrplf/isomorphic": "^1.0.1", "bignumber.js": "^9.0.0", "ripple-address-codec": "^5.0.0" } @@ -47364,20 +47364,20 @@ "peer": true }, "xrpl": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xrpl/-/xrpl-3.0.0.tgz", - "integrity": "sha512-QC+dNx3tvMEn9IrxcXFFa0rWwvBwACkGFNKl+W2miMGYnlgSiIsnjdqwtG2WRs0Pyxs5dd9nBTQHyQ1BPxZ78A==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/xrpl/-/xrpl-3.1.0.tgz", + "integrity": "sha512-+97WiaF/AQTT6fXgD9Z5xyYbtlML0USCWrZFYjrC57yqtlWluacwwbMZa/I6ByVIKqCqVXJwRuRl20IQGlVGlg==", "dev": true, "requires": { "@scure/bip32": "^1.3.1", "@scure/bip39": "^1.2.1", - "@xrplf/isomorphic": "^1.0.0", + "@xrplf/isomorphic": "^1.0.1", "@xrplf/secret-numbers": "^1.0.0", "bignumber.js": "^9.0.0", "cross-fetch": "^4.0.0", "eventemitter3": "^5.0.1", "ripple-address-codec": "^5.0.0", - "ripple-binary-codec": "^2.0.0", + "ripple-binary-codec": "^2.1.0", "ripple-keypairs": "^2.0.0" }, "dependencies": { diff --git a/package.json b/package.json index ce67b1da0..8cee95c15 100644 --- a/package.json +++ b/package.json @@ -106,7 +106,7 @@ "ts-jest": "^26.5.6", "ts-node": "^10.9.2", "typescript": "^4.9.4", - "xrpl": "^3.0.0" + "xrpl": "^3.1.0" }, "resolutions": { "jest-environment-jsdom": "29.3.1" From da383d0a408d37122535e22584843dc4575ccb38 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 9 Jul 2024 18:38:12 +0000 Subject: [PATCH 23/79] chore(deps-dev): bump prettier from 3.0.3 to 3.3.2 (#1010) --- package-lock.json | 14 +++++++------- package.json | 2 +- src/containers/Amendment/Votes.tsx | 9 ++++----- .../Transaction/NFTokenMint/parser.ts | 18 ++++++++---------- .../components/Transaction/SetHook/parser.ts | 9 ++++----- 5 files changed, 24 insertions(+), 28 deletions(-) diff --git a/package-lock.json b/package-lock.json index 383903997..f183415a8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -96,7 +96,7 @@ "moxios": "^0.4.0", "nodemon": "^3.0.1", "npm-run-all": "^4.1.5", - "prettier": "^3.0.3", + "prettier": "^3.3.2", "react-error-overlay": "6.0.11", "react-test-renderer": "^17.0.2", "redux-mock-store": "^1.5.1", @@ -23012,9 +23012,9 @@ } }, "node_modules/prettier": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", - "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.2.tgz", + "integrity": "sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==", "dev": true, "bin": { "prettier": "bin/prettier.cjs" @@ -43929,9 +43929,9 @@ "dev": true }, "prettier": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", - "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.2.tgz", + "integrity": "sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==", "dev": true }, "prettier-linter-helpers": { diff --git a/package.json b/package.json index 8cee95c15..a9f0147c2 100644 --- a/package.json +++ b/package.json @@ -91,7 +91,7 @@ "moxios": "^0.4.0", "nodemon": "^3.0.1", "npm-run-all": "^4.1.5", - "prettier": "^3.0.3", + "prettier": "^3.3.2", "react-error-overlay": "6.0.11", "react-test-renderer": "^17.0.2", "redux-mock-store": "^1.5.1", diff --git a/src/containers/Amendment/Votes.tsx b/src/containers/Amendment/Votes.tsx index 571844858..ca887b0c3 100644 --- a/src/containers/Amendment/Votes.tsx +++ b/src/containers/Amendment/Votes.tsx @@ -85,11 +85,10 @@ export const Votes = ({ data, validators }: VotesProps) => { const getYeas = () => validators - .filter( - (validator) => - data.voted?.validators.some( - (voted) => voted.signing_key === validator.signing_key, - ), + .filter((validator) => + data.voted?.validators.some( + (voted) => voted.signing_key === validator.signing_key, + ), ) .sort(compareValidators) diff --git a/src/containers/shared/components/Transaction/NFTokenMint/parser.ts b/src/containers/shared/components/Transaction/NFTokenMint/parser.ts index 81dbc527c..998ab089f 100644 --- a/src/containers/shared/components/Transaction/NFTokenMint/parser.ts +++ b/src/containers/shared/components/Transaction/NFTokenMint/parser.ts @@ -27,21 +27,19 @@ export const parser: TransactionParser<NFTokenMint, NFTokenMintInstructions> = ( const previousTokenIDSet = new Set( affectedNodes - .flatMap( - (node: any) => - node.ModifiedNode?.PreviousFields?.NFTokens?.map( - (token: any) => token.NFToken.NFTokenID, - ), + .flatMap((node: any) => + node.ModifiedNode?.PreviousFields?.NFTokens?.map( + (token: any) => token.NFToken.NFTokenID, + ), ) .filter((id: any) => id), ) const finalTokenIDs = affectedNodes - .flatMap( - (node: any) => - ( - node.ModifiedNode?.FinalFields ?? node.CreatedNode?.NewFields - )?.NFTokens?.map((token: any) => token.NFToken.NFTokenID), + .flatMap((node: any) => + ( + node.ModifiedNode?.FinalFields ?? node.CreatedNode?.NewFields + )?.NFTokens?.map((token: any) => token.NFToken.NFTokenID), ) .filter((id: any) => id) diff --git a/src/containers/shared/components/Transaction/SetHook/parser.ts b/src/containers/shared/components/Transaction/SetHook/parser.ts index 8e0e10ca0..9761f7c78 100644 --- a/src/containers/shared/components/Transaction/SetHook/parser.ts +++ b/src/containers/shared/components/Transaction/SetHook/parser.ts @@ -8,11 +8,10 @@ export const parser = (tx: SetHook, meta: any): SetHookInstructions => { (node.ModifiedNode?.LedgerEntryType === 'Hook' && !!node.ModifiedNode?.PreviousFields?.Hooks), ) - const hashes = affectedNodes.flatMap( - (node: any) => - ( - node.ModifiedNode?.FinalFields ?? node.CreatedNode?.NewFields - )?.Hooks?.map((hook: any) => hook.Hook.HookHash), + const hashes = affectedNodes.flatMap((node: any) => + (node.ModifiedNode?.FinalFields ?? node.CreatedNode?.NewFields)?.Hooks?.map( + (hook: any) => hook.Hook.HookHash, + ), ) // TODO: there may be bugs here when a `HookHash` is already specified in a hook // It's difficult to understand what situation that would be in, so this is left here for now From 5498fa43788d9d2f32b23e00db998e59d36685bf Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 11 Jul 2024 18:52:34 +0000 Subject: [PATCH 24/79] chore(deps): bump esbuild from 0.19.8 to 0.23.0 (#1011) --- package-lock.json | 460 +++++++++++++++++++++++++--------------------- package.json | 2 +- 2 files changed, 254 insertions(+), 208 deletions(-) diff --git a/package-lock.json b/package-lock.json index f183415a8..774723f74 100644 --- a/package-lock.json +++ b/package-lock.json @@ -30,7 +30,7 @@ "dotenv": "^16.4.5", "enzyme": "3.11.0", "enzyme-adapter-react-17-updated": "^1.0.2", - "esbuild": "^0.19.8", + "esbuild": "^0.23.0", "events": "^3.3.0", "express": "^4.18.2", "i18next": "^23.9.0", @@ -2417,10 +2417,25 @@ "postcss-selector-parser": "^6.0.13" } }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.0.tgz", + "integrity": "sha512-3sG8Zwa5fMcA9bgqB8AfWPQ+HFke6uD3h1s3RIwUNK8EG7a4buxvuFTs3j1IMs2NXAk9F30C/FF4vxRgQCcmoQ==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, "node_modules/@esbuild/android-arm": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.8.tgz", - "integrity": "sha512-31E2lxlGM1KEfivQl8Yf5aYU/mflz9g06H6S15ITUFQueMFtFjESRMoDSkvMo8thYvLBax+VKTPlpnx+sPicOA==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.0.tgz", + "integrity": "sha512-+KuOHTKKyIKgEEqKbGTK8W7mPp+hKinbMBeEnNzjJGyFcWsfrXjSTNluJHCY1RqhxFurdD8uNXQDei7qDlR6+g==", "cpu": [ "arm" ], @@ -2429,13 +2444,13 @@ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-arm64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.8.tgz", - "integrity": "sha512-B8JbS61bEunhfx8kasogFENgQfr/dIp+ggYXwTqdbMAgGDhRa3AaPpQMuQU0rNxDLECj6FhDzk1cF9WHMVwrtA==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.0.tgz", + "integrity": "sha512-EuHFUYkAVfU4qBdyivULuu03FhJO4IJN9PGuABGrFy4vUuzk91P2d+npxHcFdpUnfYKy0PuV+n6bKIpHOB3prQ==", "cpu": [ "arm64" ], @@ -2444,13 +2459,13 @@ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-x64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.8.tgz", - "integrity": "sha512-rdqqYfRIn4jWOp+lzQttYMa2Xar3OK9Yt2fhOhzFXqg0rVWEfSclJvZq5fZslnz6ypHvVf3CT7qyf0A5pM682A==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.0.tgz", + "integrity": "sha512-WRrmKidLoKDl56LsbBMhzTTBxrsVwTKdNbKDalbEZr0tcsBgCLbEtoNthOW6PX942YiYq8HzEnb4yWQMLQuipQ==", "cpu": [ "x64" ], @@ -2459,13 +2474,13 @@ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.8.tgz", - "integrity": "sha512-RQw9DemMbIq35Bprbboyf8SmOr4UXsRVxJ97LgB55VKKeJOOdvsIPy0nFyF2l8U+h4PtBx/1kRf0BelOYCiQcw==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.0.tgz", + "integrity": "sha512-YLntie/IdS31H54Ogdn+v50NuoWF5BDkEUFpiOChVa9UnKpftgwzZRrI4J132ETIi+D8n6xh9IviFV3eXdxfow==", "cpu": [ "arm64" ], @@ -2474,13 +2489,13 @@ "darwin" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.8.tgz", - "integrity": "sha512-3sur80OT9YdeZwIVgERAysAbwncom7b4bCI2XKLjMfPymTud7e/oY4y+ci1XVp5TfQp/bppn7xLw1n/oSQY3/Q==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.0.tgz", + "integrity": "sha512-IMQ6eme4AfznElesHUPDZ+teuGwoRmVuuixu7sv92ZkdQcPbsNHzutd+rAfaBKo8YK3IrBEi9SLLKWJdEvJniQ==", "cpu": [ "x64" ], @@ -2489,13 +2504,13 @@ "darwin" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.8.tgz", - "integrity": "sha512-WAnPJSDattvS/XtPCTj1tPoTxERjcTpH6HsMr6ujTT+X6rylVe8ggxk8pVxzf5U1wh5sPODpawNicF5ta/9Tmw==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.0.tgz", + "integrity": "sha512-0muYWCng5vqaxobq6LB3YNtevDFSAZGlgtLoAc81PjUfiFz36n4KMpwhtAd4he8ToSI3TGyuhyx5xmiWNYZFyw==", "cpu": [ "arm64" ], @@ -2504,13 +2519,13 @@ "freebsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.8.tgz", - "integrity": "sha512-ICvZyOplIjmmhjd6mxi+zxSdpPTKFfyPPQMQTK/w+8eNK6WV01AjIztJALDtwNNfFhfZLux0tZLC+U9nSyA5Zg==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.0.tgz", + "integrity": "sha512-XKDVu8IsD0/q3foBzsXGt/KjD/yTKBCIwOHE1XwiXmrRwrX6Hbnd5Eqn/WvDekddK21tfszBSrE/WMaZh+1buQ==", "cpu": [ "x64" ], @@ -2519,13 +2534,13 @@ "freebsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-arm": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.8.tgz", - "integrity": "sha512-H4vmI5PYqSvosPaTJuEppU9oz1dq2A7Mr2vyg5TF9Ga+3+MGgBdGzcyBP7qK9MrwFQZlvNyJrvz6GuCaj3OukQ==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.0.tgz", + "integrity": "sha512-SEELSTEtOFu5LPykzA395Mc+54RMg1EUgXP+iw2SJ72+ooMwVsgfuwXo5Fn0wXNgWZsTVHwY2cg4Vi/bOD88qw==", "cpu": [ "arm" ], @@ -2534,13 +2549,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.8.tgz", - "integrity": "sha512-z1zMZivxDLHWnyGOctT9JP70h0beY54xDDDJt4VpTX+iwA77IFsE1vCXWmprajJGa+ZYSqkSbRQ4eyLCpCmiCQ==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.0.tgz", + "integrity": "sha512-j1t5iG8jE7BhonbsEg5d9qOYcVZv/Rv6tghaXM/Ug9xahM0nX/H2gfu6X6z11QRTMT6+aywOMA8TDkhPo8aCGw==", "cpu": [ "arm64" ], @@ -2549,13 +2564,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.8.tgz", - "integrity": "sha512-1a8suQiFJmZz1khm/rDglOc8lavtzEMRo0v6WhPgxkrjcU0LkHj+TwBrALwoz/OtMExvsqbbMI0ChyelKabSvQ==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.0.tgz", + "integrity": "sha512-P7O5Tkh2NbgIm2R6x1zGJJsnacDzTFcRWZyTTMgFdVit6E98LTxO+v8LCCLWRvPrjdzXHx9FEOA8oAZPyApWUA==", "cpu": [ "ia32" ], @@ -2564,13 +2579,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.8.tgz", - "integrity": "sha512-fHZWS2JJxnXt1uYJsDv9+b60WCc2RlvVAy1F76qOLtXRO+H4mjt3Tr6MJ5l7Q78X8KgCFudnTuiQRBhULUyBKQ==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.0.tgz", + "integrity": "sha512-InQwepswq6urikQiIC/kkx412fqUZudBO4SYKu0N+tGhXRWUqAx+Q+341tFV6QdBifpjYgUndV1hhMq3WeJi7A==", "cpu": [ "loong64" ], @@ -2579,13 +2594,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.8.tgz", - "integrity": "sha512-Wy/z0EL5qZYLX66dVnEg9riiwls5IYnziwuju2oUiuxVc+/edvqXa04qNtbrs0Ukatg5HEzqT94Zs7J207dN5Q==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.0.tgz", + "integrity": "sha512-J9rflLtqdYrxHv2FqXE2i1ELgNjT+JFURt/uDMoPQLcjWQA5wDKgQA4t/dTqGa88ZVECKaD0TctwsUfHbVoi4w==", "cpu": [ "mips64el" ], @@ -2594,13 +2609,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.8.tgz", - "integrity": "sha512-ETaW6245wK23YIEufhMQ3HSeHO7NgsLx8gygBVldRHKhOlD1oNeNy/P67mIh1zPn2Hr2HLieQrt6tWrVwuqrxg==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.0.tgz", + "integrity": "sha512-cShCXtEOVc5GxU0fM+dsFD10qZ5UpcQ8AM22bYj0u/yaAykWnqXJDpd77ublcX6vdDsWLuweeuSNZk4yUxZwtw==", "cpu": [ "ppc64" ], @@ -2609,13 +2624,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.8.tgz", - "integrity": "sha512-T2DRQk55SgoleTP+DtPlMrxi/5r9AeFgkhkZ/B0ap99zmxtxdOixOMI570VjdRCs9pE4Wdkz7JYrsPvsl7eESg==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.0.tgz", + "integrity": "sha512-HEtaN7Y5UB4tZPeQmgz/UhzoEyYftbMXrBCUjINGjh3uil+rB/QzzpMshz3cNUxqXN7Vr93zzVtpIDL99t9aRw==", "cpu": [ "riscv64" ], @@ -2624,13 +2639,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.8.tgz", - "integrity": "sha512-NPxbdmmo3Bk7mbNeHmcCd7R7fptJaczPYBaELk6NcXxy7HLNyWwCyDJ/Xx+/YcNH7Im5dHdx9gZ5xIwyliQCbg==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.0.tgz", + "integrity": "sha512-WDi3+NVAuyjg/Wxi+o5KPqRbZY0QhI9TjrEEm+8dmpY9Xir8+HE/HNx2JoLckhKbFopW0RdO2D72w8trZOV+Wg==", "cpu": [ "s390x" ], @@ -2639,13 +2654,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-x64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.8.tgz", - "integrity": "sha512-lytMAVOM3b1gPypL2TRmZ5rnXl7+6IIk8uB3eLsV1JwcizuolblXRrc5ShPrO9ls/b+RTp+E6gbsuLWHWi2zGg==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.0.tgz", + "integrity": "sha512-a3pMQhUEJkITgAw6e0bWA+F+vFtCciMjW/LPtoj99MhVt+Mfb6bbL9hu2wmTZgNd994qTAEw+U/r6k3qHWWaOQ==", "cpu": [ "x64" ], @@ -2654,13 +2669,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.8.tgz", - "integrity": "sha512-hvWVo2VsXz/8NVt1UhLzxwAfo5sioj92uo0bCfLibB0xlOmimU/DeAEsQILlBQvkhrGjamP0/el5HU76HAitGw==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.0.tgz", + "integrity": "sha512-cRK+YDem7lFTs2Q5nEv/HHc4LnrfBCbH5+JHu6wm2eP+d8OZNoSMYgPZJq78vqQ9g+9+nMuIsAO7skzphRXHyw==", "cpu": [ "x64" ], @@ -2669,13 +2684,28 @@ "netbsd" ], "engines": { - "node": ">=12" + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.0.tgz", + "integrity": "sha512-suXjq53gERueVWu0OKxzWqk7NxiUWSUlrxoZK7usiF50C6ipColGR5qie2496iKGYNLhDZkPxBI3erbnYkU0rQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.8.tgz", - "integrity": "sha512-/7Y7u77rdvmGTxR83PgaSvSBJCC2L3Kb1M/+dmSIvRvQPXXCuC97QAwMugBNG0yGcbEGfFBH7ojPzAOxfGNkwQ==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.0.tgz", + "integrity": "sha512-6p3nHpby0DM/v15IFKMjAaayFhqnXV52aEmv1whZHX56pdkK+MEaLoQWj+H42ssFarP1PcomVhbsR4pkz09qBg==", "cpu": [ "x64" ], @@ -2684,13 +2714,13 @@ "openbsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.8.tgz", - "integrity": "sha512-9Lc4s7Oi98GqFA4HzA/W2JHIYfnXbUYgekUP/Sm4BG9sfLjyv6GKKHKKVs83SMicBF2JwAX6A1PuOLMqpD001w==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.0.tgz", + "integrity": "sha512-BFelBGfrBwk6LVrmFzCq1u1dZbG4zy/Kp93w2+y83Q5UGYF1d8sCzeLI9NXjKyujjBBniQa8R8PzLFAUrSM9OA==", "cpu": [ "x64" ], @@ -2699,13 +2729,13 @@ "sunos" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.8.tgz", - "integrity": "sha512-rq6WzBGjSzihI9deW3fC2Gqiak68+b7qo5/3kmB6Gvbh/NYPA0sJhrnp7wgV4bNwjqM+R2AApXGxMO7ZoGhIJg==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.0.tgz", + "integrity": "sha512-lY6AC8p4Cnb7xYHuIxQ6iYPe6MfO2CC43XXKo9nBXDb35krYt7KGhQnOkRGar5psxYkircpCqfbNDB4uJbS2jQ==", "cpu": [ "arm64" ], @@ -2714,13 +2744,13 @@ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.8.tgz", - "integrity": "sha512-AIAbverbg5jMvJznYiGhrd3sumfwWs8572mIJL5NQjJa06P8KfCPWZQ0NwZbPQnbQi9OWSZhFVSUWjjIrn4hSw==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.0.tgz", + "integrity": "sha512-7L1bHlOTcO4ByvI7OXVI5pNN6HSu6pUQq9yodga8izeuB1KcT2UkHaH6118QJwopExPn0rMHIseCTx1CRo/uNA==", "cpu": [ "ia32" ], @@ -2729,13 +2759,13 @@ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-x64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.8.tgz", - "integrity": "sha512-bfZ0cQ1uZs2PqpulNL5j/3w+GDhP36k1K5c38QdQg+Swy51jFZWWeIkteNsufkQxp986wnqRRsb/bHbY1WQ7TA==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.0.tgz", + "integrity": "sha512-Arm+WgUFLUATuoxCJcahGuk6Yj9Pzxd6l11Zb/2aAuv5kWWvvfhLFo2fni4uSK5vzlUdCGZ/BdV5tH8klj8p8g==", "cpu": [ "x64" ], @@ -2744,7 +2774,7 @@ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@eslint-community/eslint-utils": { @@ -10777,39 +10807,41 @@ } }, "node_modules/esbuild": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.8.tgz", - "integrity": "sha512-l7iffQpT2OrZfH2rXIp7/FkmaeZM0vxbxN9KfiCwGYuZqzMg/JdvX26R31Zxn/Pxvsrg3Y9N6XTcnknqDyyv4w==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.0.tgz", + "integrity": "sha512-1lvV17H2bMYda/WaFb2jLPeHU3zml2k4/yagNMG8Q/YtfMjCwEUZa2eXXMgZTVSL5q1n4H7sQ0X6CdJDqqeCFA==", "hasInstallScript": true, "bin": { "esbuild": "bin/esbuild" }, "engines": { - "node": ">=12" + "node": ">=18" }, "optionalDependencies": { - "@esbuild/android-arm": "0.19.8", - "@esbuild/android-arm64": "0.19.8", - "@esbuild/android-x64": "0.19.8", - "@esbuild/darwin-arm64": "0.19.8", - "@esbuild/darwin-x64": "0.19.8", - "@esbuild/freebsd-arm64": "0.19.8", - "@esbuild/freebsd-x64": "0.19.8", - "@esbuild/linux-arm": "0.19.8", - "@esbuild/linux-arm64": "0.19.8", - "@esbuild/linux-ia32": "0.19.8", - "@esbuild/linux-loong64": "0.19.8", - "@esbuild/linux-mips64el": "0.19.8", - "@esbuild/linux-ppc64": "0.19.8", - "@esbuild/linux-riscv64": "0.19.8", - "@esbuild/linux-s390x": "0.19.8", - "@esbuild/linux-x64": "0.19.8", - "@esbuild/netbsd-x64": "0.19.8", - "@esbuild/openbsd-x64": "0.19.8", - "@esbuild/sunos-x64": "0.19.8", - "@esbuild/win32-arm64": "0.19.8", - "@esbuild/win32-ia32": "0.19.8", - "@esbuild/win32-x64": "0.19.8" + "@esbuild/aix-ppc64": "0.23.0", + "@esbuild/android-arm": "0.23.0", + "@esbuild/android-arm64": "0.23.0", + "@esbuild/android-x64": "0.23.0", + "@esbuild/darwin-arm64": "0.23.0", + "@esbuild/darwin-x64": "0.23.0", + "@esbuild/freebsd-arm64": "0.23.0", + "@esbuild/freebsd-x64": "0.23.0", + "@esbuild/linux-arm": "0.23.0", + "@esbuild/linux-arm64": "0.23.0", + "@esbuild/linux-ia32": "0.23.0", + "@esbuild/linux-loong64": "0.23.0", + "@esbuild/linux-mips64el": "0.23.0", + "@esbuild/linux-ppc64": "0.23.0", + "@esbuild/linux-riscv64": "0.23.0", + "@esbuild/linux-s390x": "0.23.0", + "@esbuild/linux-x64": "0.23.0", + "@esbuild/netbsd-x64": "0.23.0", + "@esbuild/openbsd-arm64": "0.23.0", + "@esbuild/openbsd-x64": "0.23.0", + "@esbuild/sunos-x64": "0.23.0", + "@esbuild/win32-arm64": "0.23.0", + "@esbuild/win32-ia32": "0.23.0", + "@esbuild/win32-x64": "0.23.0" } }, "node_modules/escalade": { @@ -29844,136 +29876,148 @@ "dev": true, "requires": {} }, + "@esbuild/aix-ppc64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.0.tgz", + "integrity": "sha512-3sG8Zwa5fMcA9bgqB8AfWPQ+HFke6uD3h1s3RIwUNK8EG7a4buxvuFTs3j1IMs2NXAk9F30C/FF4vxRgQCcmoQ==", + "optional": true + }, "@esbuild/android-arm": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.8.tgz", - "integrity": "sha512-31E2lxlGM1KEfivQl8Yf5aYU/mflz9g06H6S15ITUFQueMFtFjESRMoDSkvMo8thYvLBax+VKTPlpnx+sPicOA==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.0.tgz", + "integrity": "sha512-+KuOHTKKyIKgEEqKbGTK8W7mPp+hKinbMBeEnNzjJGyFcWsfrXjSTNluJHCY1RqhxFurdD8uNXQDei7qDlR6+g==", "optional": true }, "@esbuild/android-arm64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.8.tgz", - "integrity": "sha512-B8JbS61bEunhfx8kasogFENgQfr/dIp+ggYXwTqdbMAgGDhRa3AaPpQMuQU0rNxDLECj6FhDzk1cF9WHMVwrtA==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.0.tgz", + "integrity": "sha512-EuHFUYkAVfU4qBdyivULuu03FhJO4IJN9PGuABGrFy4vUuzk91P2d+npxHcFdpUnfYKy0PuV+n6bKIpHOB3prQ==", "optional": true }, "@esbuild/android-x64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.8.tgz", - "integrity": "sha512-rdqqYfRIn4jWOp+lzQttYMa2Xar3OK9Yt2fhOhzFXqg0rVWEfSclJvZq5fZslnz6ypHvVf3CT7qyf0A5pM682A==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.0.tgz", + "integrity": "sha512-WRrmKidLoKDl56LsbBMhzTTBxrsVwTKdNbKDalbEZr0tcsBgCLbEtoNthOW6PX942YiYq8HzEnb4yWQMLQuipQ==", "optional": true }, "@esbuild/darwin-arm64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.8.tgz", - "integrity": "sha512-RQw9DemMbIq35Bprbboyf8SmOr4UXsRVxJ97LgB55VKKeJOOdvsIPy0nFyF2l8U+h4PtBx/1kRf0BelOYCiQcw==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.0.tgz", + "integrity": "sha512-YLntie/IdS31H54Ogdn+v50NuoWF5BDkEUFpiOChVa9UnKpftgwzZRrI4J132ETIi+D8n6xh9IviFV3eXdxfow==", "optional": true }, "@esbuild/darwin-x64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.8.tgz", - "integrity": "sha512-3sur80OT9YdeZwIVgERAysAbwncom7b4bCI2XKLjMfPymTud7e/oY4y+ci1XVp5TfQp/bppn7xLw1n/oSQY3/Q==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.0.tgz", + "integrity": "sha512-IMQ6eme4AfznElesHUPDZ+teuGwoRmVuuixu7sv92ZkdQcPbsNHzutd+rAfaBKo8YK3IrBEi9SLLKWJdEvJniQ==", "optional": true }, "@esbuild/freebsd-arm64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.8.tgz", - "integrity": "sha512-WAnPJSDattvS/XtPCTj1tPoTxERjcTpH6HsMr6ujTT+X6rylVe8ggxk8pVxzf5U1wh5sPODpawNicF5ta/9Tmw==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.0.tgz", + "integrity": "sha512-0muYWCng5vqaxobq6LB3YNtevDFSAZGlgtLoAc81PjUfiFz36n4KMpwhtAd4he8ToSI3TGyuhyx5xmiWNYZFyw==", "optional": true }, "@esbuild/freebsd-x64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.8.tgz", - "integrity": "sha512-ICvZyOplIjmmhjd6mxi+zxSdpPTKFfyPPQMQTK/w+8eNK6WV01AjIztJALDtwNNfFhfZLux0tZLC+U9nSyA5Zg==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.0.tgz", + "integrity": "sha512-XKDVu8IsD0/q3foBzsXGt/KjD/yTKBCIwOHE1XwiXmrRwrX6Hbnd5Eqn/WvDekddK21tfszBSrE/WMaZh+1buQ==", "optional": true }, "@esbuild/linux-arm": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.8.tgz", - "integrity": "sha512-H4vmI5PYqSvosPaTJuEppU9oz1dq2A7Mr2vyg5TF9Ga+3+MGgBdGzcyBP7qK9MrwFQZlvNyJrvz6GuCaj3OukQ==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.0.tgz", + "integrity": "sha512-SEELSTEtOFu5LPykzA395Mc+54RMg1EUgXP+iw2SJ72+ooMwVsgfuwXo5Fn0wXNgWZsTVHwY2cg4Vi/bOD88qw==", "optional": true }, "@esbuild/linux-arm64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.8.tgz", - "integrity": "sha512-z1zMZivxDLHWnyGOctT9JP70h0beY54xDDDJt4VpTX+iwA77IFsE1vCXWmprajJGa+ZYSqkSbRQ4eyLCpCmiCQ==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.0.tgz", + "integrity": "sha512-j1t5iG8jE7BhonbsEg5d9qOYcVZv/Rv6tghaXM/Ug9xahM0nX/H2gfu6X6z11QRTMT6+aywOMA8TDkhPo8aCGw==", "optional": true }, "@esbuild/linux-ia32": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.8.tgz", - "integrity": "sha512-1a8suQiFJmZz1khm/rDglOc8lavtzEMRo0v6WhPgxkrjcU0LkHj+TwBrALwoz/OtMExvsqbbMI0ChyelKabSvQ==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.0.tgz", + "integrity": "sha512-P7O5Tkh2NbgIm2R6x1zGJJsnacDzTFcRWZyTTMgFdVit6E98LTxO+v8LCCLWRvPrjdzXHx9FEOA8oAZPyApWUA==", "optional": true }, "@esbuild/linux-loong64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.8.tgz", - "integrity": "sha512-fHZWS2JJxnXt1uYJsDv9+b60WCc2RlvVAy1F76qOLtXRO+H4mjt3Tr6MJ5l7Q78X8KgCFudnTuiQRBhULUyBKQ==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.0.tgz", + "integrity": "sha512-InQwepswq6urikQiIC/kkx412fqUZudBO4SYKu0N+tGhXRWUqAx+Q+341tFV6QdBifpjYgUndV1hhMq3WeJi7A==", "optional": true }, "@esbuild/linux-mips64el": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.8.tgz", - "integrity": "sha512-Wy/z0EL5qZYLX66dVnEg9riiwls5IYnziwuju2oUiuxVc+/edvqXa04qNtbrs0Ukatg5HEzqT94Zs7J207dN5Q==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.0.tgz", + "integrity": "sha512-J9rflLtqdYrxHv2FqXE2i1ELgNjT+JFURt/uDMoPQLcjWQA5wDKgQA4t/dTqGa88ZVECKaD0TctwsUfHbVoi4w==", "optional": true }, "@esbuild/linux-ppc64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.8.tgz", - "integrity": "sha512-ETaW6245wK23YIEufhMQ3HSeHO7NgsLx8gygBVldRHKhOlD1oNeNy/P67mIh1zPn2Hr2HLieQrt6tWrVwuqrxg==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.0.tgz", + "integrity": "sha512-cShCXtEOVc5GxU0fM+dsFD10qZ5UpcQ8AM22bYj0u/yaAykWnqXJDpd77ublcX6vdDsWLuweeuSNZk4yUxZwtw==", "optional": true }, "@esbuild/linux-riscv64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.8.tgz", - "integrity": "sha512-T2DRQk55SgoleTP+DtPlMrxi/5r9AeFgkhkZ/B0ap99zmxtxdOixOMI570VjdRCs9pE4Wdkz7JYrsPvsl7eESg==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.0.tgz", + "integrity": "sha512-HEtaN7Y5UB4tZPeQmgz/UhzoEyYftbMXrBCUjINGjh3uil+rB/QzzpMshz3cNUxqXN7Vr93zzVtpIDL99t9aRw==", "optional": true }, "@esbuild/linux-s390x": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.8.tgz", - "integrity": "sha512-NPxbdmmo3Bk7mbNeHmcCd7R7fptJaczPYBaELk6NcXxy7HLNyWwCyDJ/Xx+/YcNH7Im5dHdx9gZ5xIwyliQCbg==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.0.tgz", + "integrity": "sha512-WDi3+NVAuyjg/Wxi+o5KPqRbZY0QhI9TjrEEm+8dmpY9Xir8+HE/HNx2JoLckhKbFopW0RdO2D72w8trZOV+Wg==", "optional": true }, "@esbuild/linux-x64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.8.tgz", - "integrity": "sha512-lytMAVOM3b1gPypL2TRmZ5rnXl7+6IIk8uB3eLsV1JwcizuolblXRrc5ShPrO9ls/b+RTp+E6gbsuLWHWi2zGg==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.0.tgz", + "integrity": "sha512-a3pMQhUEJkITgAw6e0bWA+F+vFtCciMjW/LPtoj99MhVt+Mfb6bbL9hu2wmTZgNd994qTAEw+U/r6k3qHWWaOQ==", "optional": true }, "@esbuild/netbsd-x64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.8.tgz", - "integrity": "sha512-hvWVo2VsXz/8NVt1UhLzxwAfo5sioj92uo0bCfLibB0xlOmimU/DeAEsQILlBQvkhrGjamP0/el5HU76HAitGw==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.0.tgz", + "integrity": "sha512-cRK+YDem7lFTs2Q5nEv/HHc4LnrfBCbH5+JHu6wm2eP+d8OZNoSMYgPZJq78vqQ9g+9+nMuIsAO7skzphRXHyw==", + "optional": true + }, + "@esbuild/openbsd-arm64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.0.tgz", + "integrity": "sha512-suXjq53gERueVWu0OKxzWqk7NxiUWSUlrxoZK7usiF50C6ipColGR5qie2496iKGYNLhDZkPxBI3erbnYkU0rQ==", "optional": true }, "@esbuild/openbsd-x64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.8.tgz", - "integrity": "sha512-/7Y7u77rdvmGTxR83PgaSvSBJCC2L3Kb1M/+dmSIvRvQPXXCuC97QAwMugBNG0yGcbEGfFBH7ojPzAOxfGNkwQ==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.0.tgz", + "integrity": "sha512-6p3nHpby0DM/v15IFKMjAaayFhqnXV52aEmv1whZHX56pdkK+MEaLoQWj+H42ssFarP1PcomVhbsR4pkz09qBg==", "optional": true }, "@esbuild/sunos-x64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.8.tgz", - "integrity": "sha512-9Lc4s7Oi98GqFA4HzA/W2JHIYfnXbUYgekUP/Sm4BG9sfLjyv6GKKHKKVs83SMicBF2JwAX6A1PuOLMqpD001w==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.0.tgz", + "integrity": "sha512-BFelBGfrBwk6LVrmFzCq1u1dZbG4zy/Kp93w2+y83Q5UGYF1d8sCzeLI9NXjKyujjBBniQa8R8PzLFAUrSM9OA==", "optional": true }, "@esbuild/win32-arm64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.8.tgz", - "integrity": "sha512-rq6WzBGjSzihI9deW3fC2Gqiak68+b7qo5/3kmB6Gvbh/NYPA0sJhrnp7wgV4bNwjqM+R2AApXGxMO7ZoGhIJg==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.0.tgz", + "integrity": "sha512-lY6AC8p4Cnb7xYHuIxQ6iYPe6MfO2CC43XXKo9nBXDb35krYt7KGhQnOkRGar5psxYkircpCqfbNDB4uJbS2jQ==", "optional": true }, "@esbuild/win32-ia32": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.8.tgz", - "integrity": "sha512-AIAbverbg5jMvJznYiGhrd3sumfwWs8572mIJL5NQjJa06P8KfCPWZQ0NwZbPQnbQi9OWSZhFVSUWjjIrn4hSw==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.0.tgz", + "integrity": "sha512-7L1bHlOTcO4ByvI7OXVI5pNN6HSu6pUQq9yodga8izeuB1KcT2UkHaH6118QJwopExPn0rMHIseCTx1CRo/uNA==", "optional": true }, "@esbuild/win32-x64": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.8.tgz", - "integrity": "sha512-bfZ0cQ1uZs2PqpulNL5j/3w+GDhP36k1K5c38QdQg+Swy51jFZWWeIkteNsufkQxp986wnqRRsb/bHbY1WQ7TA==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.0.tgz", + "integrity": "sha512-Arm+WgUFLUATuoxCJcahGuk6Yj9Pzxd6l11Zb/2aAuv5kWWvvfhLFo2fni4uSK5vzlUdCGZ/BdV5tH8klj8p8g==", "optional": true }, "@eslint-community/eslint-utils": { @@ -35595,32 +35639,34 @@ } }, "esbuild": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.8.tgz", - "integrity": "sha512-l7iffQpT2OrZfH2rXIp7/FkmaeZM0vxbxN9KfiCwGYuZqzMg/JdvX26R31Zxn/Pxvsrg3Y9N6XTcnknqDyyv4w==", - "requires": { - "@esbuild/android-arm": "0.19.8", - "@esbuild/android-arm64": "0.19.8", - "@esbuild/android-x64": "0.19.8", - "@esbuild/darwin-arm64": "0.19.8", - "@esbuild/darwin-x64": "0.19.8", - "@esbuild/freebsd-arm64": "0.19.8", - "@esbuild/freebsd-x64": "0.19.8", - "@esbuild/linux-arm": "0.19.8", - "@esbuild/linux-arm64": "0.19.8", - "@esbuild/linux-ia32": "0.19.8", - "@esbuild/linux-loong64": "0.19.8", - "@esbuild/linux-mips64el": "0.19.8", - "@esbuild/linux-ppc64": "0.19.8", - "@esbuild/linux-riscv64": "0.19.8", - "@esbuild/linux-s390x": "0.19.8", - "@esbuild/linux-x64": "0.19.8", - "@esbuild/netbsd-x64": "0.19.8", - "@esbuild/openbsd-x64": "0.19.8", - "@esbuild/sunos-x64": "0.19.8", - "@esbuild/win32-arm64": "0.19.8", - "@esbuild/win32-ia32": "0.19.8", - "@esbuild/win32-x64": "0.19.8" + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.0.tgz", + "integrity": "sha512-1lvV17H2bMYda/WaFb2jLPeHU3zml2k4/yagNMG8Q/YtfMjCwEUZa2eXXMgZTVSL5q1n4H7sQ0X6CdJDqqeCFA==", + "requires": { + "@esbuild/aix-ppc64": "0.23.0", + "@esbuild/android-arm": "0.23.0", + "@esbuild/android-arm64": "0.23.0", + "@esbuild/android-x64": "0.23.0", + "@esbuild/darwin-arm64": "0.23.0", + "@esbuild/darwin-x64": "0.23.0", + "@esbuild/freebsd-arm64": "0.23.0", + "@esbuild/freebsd-x64": "0.23.0", + "@esbuild/linux-arm": "0.23.0", + "@esbuild/linux-arm64": "0.23.0", + "@esbuild/linux-ia32": "0.23.0", + "@esbuild/linux-loong64": "0.23.0", + "@esbuild/linux-mips64el": "0.23.0", + "@esbuild/linux-ppc64": "0.23.0", + "@esbuild/linux-riscv64": "0.23.0", + "@esbuild/linux-s390x": "0.23.0", + "@esbuild/linux-x64": "0.23.0", + "@esbuild/netbsd-x64": "0.23.0", + "@esbuild/openbsd-arm64": "0.23.0", + "@esbuild/openbsd-x64": "0.23.0", + "@esbuild/sunos-x64": "0.23.0", + "@esbuild/win32-arm64": "0.23.0", + "@esbuild/win32-ia32": "0.23.0", + "@esbuild/win32-x64": "0.23.0" } }, "escalade": { diff --git a/package.json b/package.json index a9f0147c2..1b8768b72 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ "dotenv": "^16.4.5", "enzyme": "3.11.0", "enzyme-adapter-react-17-updated": "^1.0.2", - "esbuild": "^0.19.8", + "esbuild": "^0.23.0", "events": "^3.3.0", "express": "^4.18.2", "i18next": "^23.9.0", From 16c3676d2b650816f468eeb5a0815d7dae50212b Mon Sep 17 00:00:00 2001 From: achowdhry-ripple <achowdhry@ripple.com> Date: Thu, 18 Jul 2024 18:44:16 -0400 Subject: [PATCH 25/79] Leverage nftoken_id, nftoken_ids and offer_id meta fields in transaction parsers (#1018) ## High Level Overview of Change utilize added ID fields based on [this rippled PR](https://github.com/XRPLF/rippled/pull/4447), rather than manually parsing for NFToken transactions. ### Context of Change https://github.com/ripple/explorer/issues/708 --- .../Transaction/NFTokenAcceptOffer/parser.ts | 4 +- .../mock_data/NFTokenAcceptOffer_Broker.json | 3 +- .../mock_data/NFTokenAcceptOffer_Buy.json | 3 +- .../mock_data/NFTokenAcceptOffer_Sell.json | 3 +- .../Transaction/NFTokenCancelOffer/parser.ts | 2 +- .../test/mock_data/NFTokenCancelOffer.json | 3 +- .../Transaction/NFTokenCreateOffer/parser.ts | 3 +- .../mock_data/NFTokenCreateOffer_Buy.json | 3 +- .../mock_data/NFTokenCreateOffer_Sell.json | 3 +- .../Transaction/NFTokenMint/parser.ts | 53 +++---------------- .../NFTokenMintModified1Created1.json | 3 +- .../test/mock_data/NFTokenMintModified2.json | 3 +- .../NFTokenMintModified4Created1.json | 3 +- .../NFTokenMintMostModified2Created1.json | 3 +- .../test/mock_data/NFTokenMintWithIssuer.json | 3 +- 15 files changed, 33 insertions(+), 62 deletions(-) diff --git a/src/containers/shared/components/Transaction/NFTokenAcceptOffer/parser.ts b/src/containers/shared/components/Transaction/NFTokenAcceptOffer/parser.ts index 85abfdaa6..5586be0c8 100644 --- a/src/containers/shared/components/Transaction/NFTokenAcceptOffer/parser.ts +++ b/src/containers/shared/components/Transaction/NFTokenAcceptOffer/parser.ts @@ -35,7 +35,7 @@ export const parser: TransactionParser< return { amount: formatAmount(buyOfferNode.Amount), - tokenID: buyOfferNode.NFTokenID, + tokenID: meta.nftoken_id, seller: sellOfferNode.Owner, buyer: buyOfferNode.Owner, acceptedOfferIDs, @@ -51,7 +51,7 @@ export const parser: TransactionParser< } const amount = formatAmount(acceptedOfferNode.Amount) - const tokenID = acceptedOfferNode.NFTokenID + const tokenID = meta.nftoken_id const offerer = acceptedOfferNode.Owner const accepter = tx.Account const isSellOffer = determineIsSellOffer(acceptedOfferNode.Flags) diff --git a/src/containers/shared/components/Transaction/NFTokenAcceptOffer/test/mock_data/NFTokenAcceptOffer_Broker.json b/src/containers/shared/components/Transaction/NFTokenAcceptOffer/test/mock_data/NFTokenAcceptOffer_Broker.json index 4a2ab29ab..f1bc90003 100644 --- a/src/containers/shared/components/Transaction/NFTokenAcceptOffer/test/mock_data/NFTokenAcceptOffer_Broker.json +++ b/src/containers/shared/components/Transaction/NFTokenAcceptOffer/test/mock_data/NFTokenAcceptOffer_Broker.json @@ -255,7 +255,8 @@ } ], "TransactionIndex": 7, - "TransactionResult": "tesSUCCESS" + "TransactionResult": "tesSUCCESS", + "nftoken_id": "00081B581189F5687DBB7516339D6CCB5593D96622AD82DF08CFDA8600000A17" }, "hash": "E6CE3C3C554BA01891A9D12E89062C34BBEA6282CF8AA4D9AF8BF7D0E7D26B7D", "ledger_index": 76208251, diff --git a/src/containers/shared/components/Transaction/NFTokenAcceptOffer/test/mock_data/NFTokenAcceptOffer_Buy.json b/src/containers/shared/components/Transaction/NFTokenAcceptOffer/test/mock_data/NFTokenAcceptOffer_Buy.json index d984fc1f7..6bb4a8973 100644 --- a/src/containers/shared/components/Transaction/NFTokenAcceptOffer/test/mock_data/NFTokenAcceptOffer_Buy.json +++ b/src/containers/shared/components/Transaction/NFTokenAcceptOffer/test/mock_data/NFTokenAcceptOffer_Buy.json @@ -439,7 +439,8 @@ } ], "TransactionIndex": 4, - "TransactionResult": "tesSUCCESS" + "TransactionResult": "tesSUCCESS", + "nftoken_id": "000800006203F49C21D5D6E022CB16DE3538F248662FC73C29ABA6A90000000D" }, "hash": "21C60F255B29D0034B9EBA2ED1F7523635C61DED1D6BDBCFFD67703C45F7072D", "ledger_index": 1799495, diff --git a/src/containers/shared/components/Transaction/NFTokenAcceptOffer/test/mock_data/NFTokenAcceptOffer_Sell.json b/src/containers/shared/components/Transaction/NFTokenAcceptOffer/test/mock_data/NFTokenAcceptOffer_Sell.json index 3f78b0426..77fe997f5 100644 --- a/src/containers/shared/components/Transaction/NFTokenAcceptOffer/test/mock_data/NFTokenAcceptOffer_Sell.json +++ b/src/containers/shared/components/Transaction/NFTokenAcceptOffer/test/mock_data/NFTokenAcceptOffer_Sell.json @@ -392,7 +392,8 @@ } ], "TransactionIndex": 0, - "TransactionResult": "tesSUCCESS" + "TransactionResult": "tesSUCCESS", + "nftoken_id": "000800006203F49C21D5D6E022CB16DE3538F248662FC73C216B9CBF00000023" }, "hash": "553922B202932DD500C6E0D6905BA1D8ACC0DF746519DD6AAA724AF70D23F1E6", "ledger_index": 1889191, diff --git a/src/containers/shared/components/Transaction/NFTokenCancelOffer/parser.ts b/src/containers/shared/components/Transaction/NFTokenCancelOffer/parser.ts index f2a8debe2..4857fb442 100644 --- a/src/containers/shared/components/Transaction/NFTokenCancelOffer/parser.ts +++ b/src/containers/shared/components/Transaction/NFTokenCancelOffer/parser.ts @@ -10,7 +10,7 @@ export const parser: TransactionParser< const cancelledOffers = meta.AffectedNodes.filter( (node: any) => node.DeletedNode?.LedgerEntryType === 'NFTokenOffer', ).map((node: any) => ({ - offerID: node.DeletedNode.LedgerIndex, + offerID: meta.offer_id, amount: formatAmount(node.DeletedNode.FinalFields.Amount), tokenID: node.DeletedNode.FinalFields.NFTokenID, offerer: node.DeletedNode.FinalFields.Owner, diff --git a/src/containers/shared/components/Transaction/NFTokenCancelOffer/test/mock_data/NFTokenCancelOffer.json b/src/containers/shared/components/Transaction/NFTokenCancelOffer/test/mock_data/NFTokenCancelOffer.json index ee6e5472d..d625ca873 100644 --- a/src/containers/shared/components/Transaction/NFTokenCancelOffer/test/mock_data/NFTokenCancelOffer.json +++ b/src/containers/shared/components/Transaction/NFTokenCancelOffer/test/mock_data/NFTokenCancelOffer.json @@ -81,7 +81,8 @@ } ], "TransactionIndex": 2, - "TransactionResult": "tesSUCCESS" + "TransactionResult": "tesSUCCESS", + "offer_id": "35F3D6D99548FA5F5315580FBF8BA6B15CAA2CAE93023D5CE4FDC130602BC5C3" }, "hash": "AF12B2694896ADE0F93C8C3D09602B242F08C50854A0C600E0E7A2E18586C8C3", "ledger_index": 1799491, diff --git a/src/containers/shared/components/Transaction/NFTokenCreateOffer/parser.ts b/src/containers/shared/components/Transaction/NFTokenCreateOffer/parser.ts index e818c0294..deaaacffe 100644 --- a/src/containers/shared/components/Transaction/NFTokenCreateOffer/parser.ts +++ b/src/containers/shared/components/Transaction/NFTokenCreateOffer/parser.ts @@ -2,7 +2,6 @@ import type { NFTokenCreateOffer } from 'xrpl' import { NFTokenCreateOfferInstructions } from './types' import { TransactionParser } from '../types' import { formatAmount } from '../../../../../rippled/lib/txSummary/formatAmount' -import { findNode } from '../../../transactionUtils' export const parser: TransactionParser< NFTokenCreateOffer, @@ -13,7 +12,7 @@ export const parser: TransactionParser< const tokenID = tx.NFTokenID const isSellOffer = ((tx.Flags as number)! & 1) !== 0 const owner = tx.Owner - const offerID = findNode(meta, 'CreatedNode', 'NFTokenOffer')?.LedgerIndex + const offerID = meta.offer_id const destination = tx.Destination return { diff --git a/src/containers/shared/components/Transaction/NFTokenCreateOffer/test/mock_data/NFTokenCreateOffer_Buy.json b/src/containers/shared/components/Transaction/NFTokenCreateOffer/test/mock_data/NFTokenCreateOffer_Buy.json index 57b78b9c9..546e25bc7 100644 --- a/src/containers/shared/components/Transaction/NFTokenCreateOffer/test/mock_data/NFTokenCreateOffer_Buy.json +++ b/src/containers/shared/components/Transaction/NFTokenCreateOffer/test/mock_data/NFTokenCreateOffer_Buy.json @@ -70,7 +70,8 @@ } ], "TransactionIndex": 0, - "TransactionResult": "tesSUCCESS" + "TransactionResult": "tesSUCCESS", + "offer_id": "3D1C297DA5B831267CCF692F8A023688D6A4BD5AFAE9A746D5C4E0B15D256B29" }, "hash": "385DC0497AAF8061549A7DC04EB20C2B387A167792796F5806A13E0422125563", "ledger_index": 1887982, diff --git a/src/containers/shared/components/Transaction/NFTokenCreateOffer/test/mock_data/NFTokenCreateOffer_Sell.json b/src/containers/shared/components/Transaction/NFTokenCreateOffer/test/mock_data/NFTokenCreateOffer_Sell.json index ca2b485e1..01a6427e6 100644 --- a/src/containers/shared/components/Transaction/NFTokenCreateOffer/test/mock_data/NFTokenCreateOffer_Sell.json +++ b/src/containers/shared/components/Transaction/NFTokenCreateOffer/test/mock_data/NFTokenCreateOffer_Sell.json @@ -80,7 +80,8 @@ } ], "TransactionIndex": 1, - "TransactionResult": "tesSUCCESS" + "TransactionResult": "tesSUCCESS", + "offer_id": "F660CA62E16B8067649052E8FCE947049FC6EF0D8B42EF7E5819997EC5AE45B6" }, "hash": "47DCA082AE5920D672B32E63623B799899B91B77D68365711B07376E5ACFC8DB", "ledger_index": 1799495, diff --git a/src/containers/shared/components/Transaction/NFTokenMint/parser.ts b/src/containers/shared/components/Transaction/NFTokenMint/parser.ts index 998ab089f..acb0cd7c1 100644 --- a/src/containers/shared/components/Transaction/NFTokenMint/parser.ts +++ b/src/containers/shared/components/Transaction/NFTokenMint/parser.ts @@ -7,49 +7,10 @@ import { convertHexToString } from '../../../../../rippled/lib/utils' export const parser: TransactionParser<NFTokenMint, NFTokenMintInstructions> = ( tx, meta, -) => { - // When a mint results in splitting an existing page, - // it results in a created page and a modified node. Sometimes, - // the created node needs to be linked to a third page, resulting - // in modifying that third page's PreviousPageMin or NextPageMin - // field changing, but no NFTs within that page changing. In this - // case, there will be no previous NFTs and we need to skip. - // However, there will always be NFTs listed in the final fields, - // as rippled outputs all fields in final fields even if they were - // not changed. Thus why we add the additional condition to check - // if the PreviousFields contains NFTokens - const affectedNodes = meta.AffectedNodes.filter( - (node: any) => - node.CreatedNode?.LedgerEntryType === 'NFTokenPage' || - (node.ModifiedNode?.LedgerEntryType === 'NFTokenPage' && - !!node.ModifiedNode?.PreviousFields.NFTokens), - ) - - const previousTokenIDSet = new Set( - affectedNodes - .flatMap((node: any) => - node.ModifiedNode?.PreviousFields?.NFTokens?.map( - (token: any) => token.NFToken.NFTokenID, - ), - ) - .filter((id: any) => id), - ) - - const finalTokenIDs = affectedNodes - .flatMap((node: any) => - ( - node.ModifiedNode?.FinalFields ?? node.CreatedNode?.NewFields - )?.NFTokens?.map((token: any) => token.NFToken.NFTokenID), - ) - .filter((id: any) => id) - - const tokenID = finalTokenIDs.find((id: any) => !previousTokenIDSet.has(id)) - - return { - tokenID, - tokenTaxon: tx.NFTokenTaxon, - uri: convertHexToString(tx.URI), - transferFee: tx.TransferFee, - issuer: tx.Issuer, - } -} +) => ({ + tokenID: meta.nftoken_id, + tokenTaxon: tx.NFTokenTaxon, + uri: convertHexToString(tx.URI), + transferFee: tx.TransferFee, + issuer: tx.Issuer, +}) diff --git a/src/containers/shared/components/Transaction/NFTokenMint/test/mock_data/NFTokenMintModified1Created1.json b/src/containers/shared/components/Transaction/NFTokenMint/test/mock_data/NFTokenMintModified1Created1.json index d19662a65..2fb674b4e 100644 --- a/src/containers/shared/components/Transaction/NFTokenMint/test/mock_data/NFTokenMintModified1Created1.json +++ b/src/containers/shared/components/Transaction/NFTokenMint/test/mock_data/NFTokenMintModified1Created1.json @@ -53,7 +53,8 @@ } ], "TransactionIndex": 1, - "TransactionResult": "tesSUCCESS" + "TransactionResult": "tesSUCCESS", + "nftoken_id": "0008000085D33F9C5481D3515029C9904D16F0109414D3A00000099A00000000" }, "hash": "B0AAA46053F2570200CA1E12978EFFBB124374276669CC3F68602A6788182172", "ledger_index": 5605230, diff --git a/src/containers/shared/components/Transaction/NFTokenMint/test/mock_data/NFTokenMintModified2.json b/src/containers/shared/components/Transaction/NFTokenMint/test/mock_data/NFTokenMintModified2.json index 27f0ad378..4cb746d3d 100644 --- a/src/containers/shared/components/Transaction/NFTokenMint/test/mock_data/NFTokenMintModified2.json +++ b/src/containers/shared/components/Transaction/NFTokenMint/test/mock_data/NFTokenMintModified2.json @@ -301,7 +301,8 @@ } ], "TransactionIndex": 0, - "TransactionResult": "tesSUCCESS" + "TransactionResult": "tesSUCCESS", + "nftoken_id": "000800006203F49C21D5D6E022CB16DE3538F248662FC73C535743B40000001A" }, "hash": "B9A20167DC30985ABD983912F29DE81CB4579FAF9672C9D68BEC5219C19C7E50", "ledger_index": 1861436, diff --git a/src/containers/shared/components/Transaction/NFTokenMint/test/mock_data/NFTokenMintModified4Created1.json b/src/containers/shared/components/Transaction/NFTokenMint/test/mock_data/NFTokenMintModified4Created1.json index 2c9a62634..2156f52bb 100644 --- a/src/containers/shared/components/Transaction/NFTokenMint/test/mock_data/NFTokenMintModified4Created1.json +++ b/src/containers/shared/components/Transaction/NFTokenMint/test/mock_data/NFTokenMintModified4Created1.json @@ -690,7 +690,8 @@ } ], "TransactionIndex": 337, - "TransactionResult": "tesSUCCESS" + "TransactionResult": "tesSUCCESS", + "nftoken_id": "000D0000B9BD7D214128A91ECECE5FCFF9BDB0D043567C51CFBEC443000063A7" }, "hash": "4E0EB5F23D248740CB8FC28D1003CEFE841E21811FE2EA4B195CFE1B0BC54219", "ledger_index": 6453184, diff --git a/src/containers/shared/components/Transaction/NFTokenMint/test/mock_data/NFTokenMintMostModified2Created1.json b/src/containers/shared/components/Transaction/NFTokenMint/test/mock_data/NFTokenMintMostModified2Created1.json index 7278c7c13..f2ccdcc36 100644 --- a/src/containers/shared/components/Transaction/NFTokenMint/test/mock_data/NFTokenMintMostModified2Created1.json +++ b/src/containers/shared/components/Transaction/NFTokenMint/test/mock_data/NFTokenMintMostModified2Created1.json @@ -457,7 +457,8 @@ } ], "TransactionIndex": 0, - "TransactionResult": "tesSUCCESS" + "TransactionResult": "tesSUCCESS", + "nftoken_id": "0008000085D33F9C5481D3515029C9904D16F0109414D3A0DCBA29BA00000020" }, "hash": "C4E598099A8B13C5C8D2B8C86385A37B64C2F62BFA1FB87196401BB6ACB67A69", "ledger_index": 5605289, diff --git a/src/containers/shared/components/Transaction/NFTokenMint/test/mock_data/NFTokenMintWithIssuer.json b/src/containers/shared/components/Transaction/NFTokenMint/test/mock_data/NFTokenMintWithIssuer.json index db644a078..d0dad91c5 100644 --- a/src/containers/shared/components/Transaction/NFTokenMint/test/mock_data/NFTokenMintWithIssuer.json +++ b/src/containers/shared/components/Transaction/NFTokenMint/test/mock_data/NFTokenMintWithIssuer.json @@ -72,7 +72,8 @@ } ], "TransactionIndex": 0, - "TransactionResult": "tesSUCCESS" + "TransactionResult": "tesSUCCESS", + "nftoken_id": "000861A8A99B4460C2A4CCC90634FD9C7F51940AD9450BE30000099B00000000" }, "hash": "73629D3E84AC18C06350A9A4A0B2EF15AB52E5A62AECDAB4A0579DEF342FC61F", "ledger_index": 4997948, From 7db7962240132e30c104814634dba848c67b3327 Mon Sep 17 00:00:00 2001 From: julian78780 <berridi@tutanota.com> Date: Tue, 30 Jul 2024 12:11:11 -0500 Subject: [PATCH 26/79] Add meta description (#1020) Added a meta description tag to the HTML head to improve SEO and ensure proper display in search engine results. ## High Level Overview of Change <!-- Please include a summary/list of the changes. If too broad, please consider splitting into multiple PRs. --> ### Context of Change <!-- Please include the context of a change. If a bug fix, when was the bug introduced? What was the behavior? If a new feature, why was this architecture chosen? What were the alternatives? If a refactor, how is this better than the previous implementation? If there is a design document for this feature, please link it here. --> ### Type of Change <!-- Please check relevant options, delete irrelevant ones. --> - [ x] Bug fix (non-breaking change which fixes an issue) ### TypeScript/Hooks Update <!-- In an effort to modernize the codebase, you should convert the files that you work with to React Hooks and TypeScript. If this is not possible (e.g. it's too many changes, touching too many files, etc.) please explain why here. --> - [ ] Updated files to React Hooks - [ ] Updated files to TypeScript ## Before / After <!-- If just refactoring / back-end changes, this can be just an in-English description of the change at a technical level. If a UI change, screenshots should be included. --> ## Test Plan <!-- Please describe the tests that you ran to verify your changes and provide instructions so that others can reproduce. --> <!-- ## Future Tasks For future tasks related to PR. --> --- src/index.html | 1 + 1 file changed, 1 insertion(+) diff --git a/src/index.html b/src/index.html index dbf1e83b5..514732776 100644 --- a/src/index.html +++ b/src/index.html @@ -8,6 +8,7 @@ <meta name="apple-mobile-web-app-capable" content="yes"> <meta name="mobile-web-app-capable" content="yes"> <meta name="google-site-verification" content="k8jb6KQfitguHqeR97svoRnnsgzvs3a0FliHbESVDk4" /> + <meta name="description" content="Discover the XRP Ledger with this open source explorer. Check account balances, transactions, validators, nodes and analyze blockchain activity."> <!-- manifest.json provides metadata used when your web app is added to the homescreen on Android. See https://developers.google.com/web/fundamentals/engage-and-retain/web-app-manifest/ From 7570cb1fcb335e121296d4d41a7bf89d5f2750cb Mon Sep 17 00:00:00 2001 From: achowdhry-ripple <achowdhry@ripple.com> Date: Tue, 6 Aug 2024 11:05:40 -0400 Subject: [PATCH 27/79] Ledgers page index.html redirect (#1022) ## High Level Overview of Change Obseleted path (/index.html) now redirects to current path to ledgers page (/). <!-- Please include a summary/list of the changes. If too broad, please consider splitting into multiple PRs. --> ### Context of Change <!-- Please include the context of a change. If a bug fix, when was the bug introduced? What was the behavior? If a new feature, why was this architecture chosen? What were the alternatives? If a refactor, how is this better than the previous implementation? If there is a design document for this feature, please link it here. --> ### Type of Change <!-- Please check relevant options, delete irrelevant ones. --> - [x] Bug fix (non-breaking change which fixes an issue) - [ ] New feature (non-breaking change which adds functionality) - [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected) - [ ] Refactor (non-breaking change that only restructures code) - [ ] Tests (You added tests for code that already exists, or your new feature included in this PR) - [ ] Documentation Updates - [ ] Translation Updates - [ ] Release ### TypeScript/Hooks Update <!-- In an effort to modernize the codebase, you should convert the files that you work with to React Hooks and TypeScript. If this is not possible (e.g. it's too many changes, touching too many files, etc.) please explain why here. --> - [ ] Updated files to React Hooks - [ ] Updated files to TypeScript ## Before / After <!-- If just refactoring / back-end changes, this can be just an in-English description of the change at a technical level. If a UI change, screenshots should be included. --> ## Test Plan <!-- Please describe the tests that you ran to verify your changes and provide instructions so that others can reproduce. --> <!-- ## Future Tasks For future tasks related to PR. --> --- src/containers/App/index.tsx | 8 +++++++ src/containers/App/test/App.test.jsx | 34 ++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/src/containers/App/index.tsx b/src/containers/App/index.tsx index 29e96fa80..d03150b9e 100644 --- a/src/containers/App/index.tsx +++ b/src/containers/App/index.tsx @@ -104,6 +104,14 @@ export const AppWrapper = () => { path={updatePath('/ledgers')} element={<Navigate to={updatePath('/')} replace />} /> + <Route + path={updatePath('/index.html')} + element={<Navigate to={updatePath('/')} replace />} + /> + <Route + path={updatePath('/index.htm')} + element={<Navigate to={updatePath('/')} replace />} + /> {/* End: Redirects */} {mode === 'custom' && ( <Route path="/" element={<CustomNetworkHome />} /> diff --git a/src/containers/App/test/App.test.jsx b/src/containers/App/test/App.test.jsx index 15674340b..29347e8c0 100644 --- a/src/containers/App/test/App.test.jsx +++ b/src/containers/App/test/App.test.jsx @@ -161,6 +161,40 @@ describe('App container', () => { ]) }) + it('renders ledger explorer page from index.html redirect', async () => { + wrapper = createWrapper('/index.html') + await flushPromises() + await flushPromises() + wrapper.update() + + expect(document.title).toEqual('xrpl_explorer | ledgers') + expect(window.dataLayer).toEqual([ + { + page_path: '/', + page_title: `xrpl_explorer | ledgers`, + event: 'screen_view', + network: 'mainnet', + }, + ]) + }) + + it('renders ledger explorer page from index.htm redirect', async () => { + wrapper = createWrapper('/index.html') + await flushPromises() + await flushPromises() + wrapper.update() + + expect(document.title).toEqual('xrpl_explorer | ledgers') + expect(window.dataLayer).toEqual([ + { + page_path: '/', + page_title: `xrpl_explorer | ledgers`, + event: 'screen_view', + network: 'mainnet', + }, + ]) + }) + it('renders not found page', () => { wrapper = createWrapper('/zzz') return new Promise((r) => setTimeout(r, 10)).then(() => { From 1a835eb8793278eaef5acca342a777ffae800c6b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 15 Aug 2024 19:07:00 +0000 Subject: [PATCH 28/79] chore(deps-dev): bump typescript from 4.9.4 to 4.9.5 (#1023) --- package-lock.json | 11 +++++++---- package.json | 2 +- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 774723f74..987f3fa93 100644 --- a/package-lock.json +++ b/package-lock.json @@ -110,7 +110,7 @@ "stylelint-scss": "^5.3.2", "ts-jest": "^26.5.6", "ts-node": "^10.9.2", - "typescript": "^4.9.4", + "typescript": "^4.9.5", "xrpl": "^3.1.0" }, "engines": { @@ -26956,9 +26956,10 @@ } }, "node_modules/typescript": { - "version": "4.9.4", + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", "devOptional": true, - "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -46620,7 +46621,9 @@ } }, "typescript": { - "version": "4.9.4", + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", "devOptional": true }, "unbox-primitive": { diff --git a/package.json b/package.json index 1b8768b72..80407d2dc 100644 --- a/package.json +++ b/package.json @@ -105,7 +105,7 @@ "stylelint-scss": "^5.3.2", "ts-jest": "^26.5.6", "ts-node": "^10.9.2", - "typescript": "^4.9.4", + "typescript": "^4.9.5", "xrpl": "^3.1.0" }, "resolutions": { From 33d72afc65a4f30ff0d889573e3d0e2485aa3049 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 Aug 2024 13:31:19 +0000 Subject: [PATCH 29/79] chore(deps): bump debug from 4.3.4 to 4.3.6 (#1024) --- package-lock.json | 11 +++++++---- package.json | 2 +- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 987f3fa93..15a642a63 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26,7 +26,7 @@ "d3-geo": "^3.1.0", "d3-hexbin": "^0.2.2", "d3-scale": "^4.0.2", - "debug": "^4.3.1", + "debug": "^4.3.6", "dotenv": "^16.4.5", "enzyme": "3.11.0", "enzyme-adapter-react-17-updated": "^1.0.2", @@ -9906,8 +9906,9 @@ } }, "node_modules/debug": { - "version": "4.3.4", - "license": "MIT", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", "dependencies": { "ms": "2.1.2" }, @@ -34976,7 +34977,9 @@ } }, "debug": { - "version": "4.3.4", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", "requires": { "ms": "2.1.2" } diff --git a/package.json b/package.json index 80407d2dc..7469338b3 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ "d3-geo": "^3.1.0", "d3-hexbin": "^0.2.2", "d3-scale": "^4.0.2", - "debug": "^4.3.1", + "debug": "^4.3.6", "dotenv": "^16.4.5", "enzyme": "3.11.0", "enzyme-adapter-react-17-updated": "^1.0.2", From 634c3b366001e89d6a90eb11f2c769db86b7920b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 Aug 2024 13:36:59 +0000 Subject: [PATCH 30/79] chore(deps-dev): bump nodemon from 3.0.1 to 3.1.4 (#1027) --- package-lock.json | 33 +++++++++------------------------ package.json | 2 +- 2 files changed, 10 insertions(+), 25 deletions(-) diff --git a/package-lock.json b/package-lock.json index 15a642a63..d16af9414 100644 --- a/package-lock.json +++ b/package-lock.json @@ -94,7 +94,7 @@ "lint-staged": "^15.2.5", "mock-socket": "^9.1.5", "moxios": "^0.4.0", - "nodemon": "^3.0.1", + "nodemon": "^3.1.4", "npm-run-all": "^4.1.5", "prettier": "^3.3.2", "react-error-overlay": "6.0.11", @@ -22280,13 +22280,13 @@ "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==" }, "node_modules/nodemon": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.0.1.tgz", - "integrity": "sha512-g9AZ7HmkhQkqXkRc20w+ZfQ73cHLbE8hnPbtaFbFtCumZsjyMhKk9LajQ07U5Ux28lvFjZ5X7HvWR1xzU8jHVw==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.4.tgz", + "integrity": "sha512-wjPBbFhtpJwmIeY2yP7QF+UKzPfltVGtfce1g/bB15/8vCGZj8uxD62b/b9M9/WVgme0NZudpownKN+c0plXlQ==", "dev": true, "dependencies": { "chokidar": "^3.5.2", - "debug": "^3.2.7", + "debug": "^4", "ignore-by-default": "^1.0.1", "minimatch": "^3.1.2", "pstree.remy": "^1.1.8", @@ -22307,14 +22307,6 @@ "url": "https://opencollective.com/nodemon" } }, - "node_modules/nodemon/node_modules/debug": { - "version": "3.2.7", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, "node_modules/nodemon/node_modules/semver": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", @@ -43504,13 +43496,13 @@ "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==" }, "nodemon": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.0.1.tgz", - "integrity": "sha512-g9AZ7HmkhQkqXkRc20w+ZfQ73cHLbE8hnPbtaFbFtCumZsjyMhKk9LajQ07U5Ux28lvFjZ5X7HvWR1xzU8jHVw==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.4.tgz", + "integrity": "sha512-wjPBbFhtpJwmIeY2yP7QF+UKzPfltVGtfce1g/bB15/8vCGZj8uxD62b/b9M9/WVgme0NZudpownKN+c0plXlQ==", "dev": true, "requires": { "chokidar": "^3.5.2", - "debug": "^3.2.7", + "debug": "^4", "ignore-by-default": "^1.0.1", "minimatch": "^3.1.2", "pstree.remy": "^1.1.8", @@ -43521,13 +43513,6 @@ "undefsafe": "^2.0.5" }, "dependencies": { - "debug": { - "version": "3.2.7", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, "semver": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", diff --git a/package.json b/package.json index 7469338b3..e781f96de 100644 --- a/package.json +++ b/package.json @@ -89,7 +89,7 @@ "lint-staged": "^15.2.5", "mock-socket": "^9.1.5", "moxios": "^0.4.0", - "nodemon": "^3.0.1", + "nodemon": "^3.1.4", "npm-run-all": "^4.1.5", "prettier": "^3.3.2", "react-error-overlay": "6.0.11", From fc5b6fb1ffd8833090b9bbf62098621fb7e7cc4c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 Aug 2024 13:42:14 +0000 Subject: [PATCH 31/79] chore(deps-dev): bump @babel/preset-env from 7.24.5 to 7.25.3 (#1026) --- package-lock.json | 1949 +++++++++++++++++++++++---------------------- package.json | 2 +- 2 files changed, 976 insertions(+), 975 deletions(-) diff --git a/package-lock.json b/package-lock.json index d16af9414..ff556be9c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -63,7 +63,7 @@ }, "devDependencies": { "@babel/eslint-parser": "^7.22.6", - "@babel/preset-env": "^7.24.5", + "@babel/preset-env": "^7.25.3", "@babel/preset-react": "^7.24.7", "@types/create-hash": "^1.2.2", "@types/enzyme": "^3.10.12", @@ -164,9 +164,9 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.24.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.4.tgz", - "integrity": "sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.2.tgz", + "integrity": "sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==", "engines": { "node": ">=6.9.0" } @@ -240,11 +240,11 @@ } }, "node_modules/@babel/generator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.7.tgz", - "integrity": "sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz", + "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==", "dependencies": { - "@babel/types": "^7.24.7", + "@babel/types": "^7.25.0", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" @@ -266,25 +266,26 @@ } }, "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", - "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz", + "integrity": "sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==", "dev": true, "dependencies": { - "@babel/types": "^7.22.15" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", - "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", + "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", "dependencies": { - "@babel/compat-data": "^7.23.5", - "@babel/helper-validator-option": "^7.23.5", - "browserslist": "^4.22.2", + "@babel/compat-data": "^7.25.2", + "@babel/helper-validator-option": "^7.24.8", + "browserslist": "^4.23.1", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -314,19 +315,17 @@ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.5.tgz", - "integrity": "sha512-uRc4Cv8UQWnE4NXlYTIIdM7wfFkOqlFztcC/gVXDKohKoVB3OyonfelUBaJzSwpBntZ2KYGF/9S7asCHsXwW6g==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-member-expression-to-functions": "^7.24.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.24.1", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.24.5", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.0.tgz", + "integrity": "sha512-GYM6BxeQsETc9mnct+nIIpf63SAyzvyYN7UB/IlTyd+MBg06afFGp0mIeUqGyWgS2mxad6vqbMrHVlaL3m70sQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-member-expression-to-functions": "^7.24.8", + "@babel/helper-optimise-call-expression": "^7.24.7", + "@babel/helper-replace-supers": "^7.25.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/traverse": "^7.25.0", "semver": "^6.3.1" }, "engines": { @@ -346,12 +345,12 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", - "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.2.tgz", + "integrity": "sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-annotate-as-pure": "^7.24.7", "regexpu-core": "^5.3.1", "semver": "^6.3.1" }, @@ -387,47 +386,14 @@ "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz", - "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==", - "dependencies": { - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz", - "integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==", - "dependencies": { - "@babel/template": "^7.24.7", - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz", - "integrity": "sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==", - "dependencies": { - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.5.tgz", - "integrity": "sha512-4owRteeihKWKamtqg4JmWSsEZU445xpFRXPEwp44HbgbxdWlUV1b4Agg4lkA806Lil5XM/e+FJyS0vj5T6vmcA==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz", + "integrity": "sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==", "dev": true, "dependencies": { - "@babel/types": "^7.24.5" + "@babel/traverse": "^7.24.8", + "@babel/types": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -446,15 +412,14 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", - "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", + "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.20" + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7", + "@babel/traverse": "^7.25.2" }, "engines": { "node": ">=6.9.0" @@ -464,34 +429,34 @@ } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", - "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz", + "integrity": "sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==", "dev": true, "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.7.tgz", - "integrity": "sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", + "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz", - "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.0.tgz", + "integrity": "sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-wrap-function": "^7.22.20" + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-wrap-function": "^7.25.0", + "@babel/traverse": "^7.25.0" }, "engines": { "node": ">=6.9.0" @@ -501,14 +466,14 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.24.1.tgz", - "integrity": "sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz", + "integrity": "sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-member-expression-to-functions": "^7.23.0", - "@babel/helper-optimise-call-expression": "^7.22.5" + "@babel/helper-member-expression-to-functions": "^7.24.8", + "@babel/helper-optimise-call-expression": "^7.24.7", + "@babel/traverse": "^7.25.0" }, "engines": { "node": ">=6.9.0" @@ -518,23 +483,25 @@ } }, "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", + "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", - "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz", + "integrity": "sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==", "dev": true, "dependencies": { - "@babel/types": "^7.22.5" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -544,6 +511,7 @@ "version": "7.24.7", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", + "dev": true, "dependencies": { "@babel/types": "^7.24.7" }, @@ -552,9 +520,9 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz", - "integrity": "sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", + "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", "engines": { "node": ">=6.9.0" } @@ -568,22 +536,22 @@ } }, "node_modules/@babel/helper-validator-option": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.7.tgz", - "integrity": "sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", + "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.24.5.tgz", - "integrity": "sha512-/xxzuNvgRl4/HLNKvnFwdhdgN3cpLxgLROeLDl83Yx0AJ1SGvq1ak0OszTOjDfiB8Vx03eJbeDWh9r+jCCWttw==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.0.tgz", + "integrity": "sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ==", "dev": true, "dependencies": { - "@babel/helper-function-name": "^7.23.0", - "@babel/template": "^7.24.0", - "@babel/types": "^7.24.5" + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.0", + "@babel/types": "^7.25.0" }, "engines": { "node": ">=6.9.0" @@ -617,9 +585,12 @@ } }, "node_modules/@babel/parser": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.7.tgz", - "integrity": "sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==", + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz", + "integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==", + "dependencies": { + "@babel/types": "^7.25.2" + }, "bin": { "parser": "bin/babel-parser.js" }, @@ -628,13 +599,28 @@ } }, "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.5.tgz", - "integrity": "sha512-LdXRi1wEMTrHVR4Zc9F8OewC3vdm5h4QB6L71zy6StmYeqGi1b3ttIO8UC+BfZKcH9jdr4aI249rBkm+3+YvHw==", + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.3.tgz", + "integrity": "sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/traverse": "^7.25.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.0.tgz", + "integrity": "sha512-Bm4bH2qsX880b/3ziJ8KD711LT7z4u8CFudmjqle65AZj/HNUFhEf90dqYv6O86buWvSBmeQDjv0Tn2aF/bIBA==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-plugin-utils": "^7.24.5" + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -644,12 +630,12 @@ } }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.1.tgz", - "integrity": "sha512-y4HqEnkelJIOQGd+3g1bTeKsA5c6qM7eOn7VggGVbBc0y8MLSKHacwcIE2PplNlQSj0PqS9rrXL/nkPVK+kUNg==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.0.tgz", + "integrity": "sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -659,14 +645,14 @@ } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.1.tgz", - "integrity": "sha512-Hj791Ii4ci8HqnaKHAlLNs+zaLXb0EzSDhiAWp5VNlyvCNymYfacs64pxTxbH1znW/NcArSmwpmG9IKE/TUVVQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz", + "integrity": "sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.24.1" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/plugin-transform-optional-chaining": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -676,13 +662,13 @@ } }, "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.1.tgz", - "integrity": "sha512-m9m/fXsXLiHfwdgydIFnpk+7jlVbnvlK5B2EKiPdLUb6WX654ZaaEWJUjk8TftRbZpK0XibovlLWX4KIZhV6jw==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.0.tgz", + "integrity": "sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/traverse": "^7.25.0" }, "engines": { "node": ">=6.9.0" @@ -907,12 +893,12 @@ } }, "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.1.tgz", - "integrity": "sha512-IuwnI5XnuF189t91XbxmXeCDz3qs6iDRO7GJ++wcfgeXNs/8FmIlKcpDSXNVyuLQxlwvskmI3Ct73wUODkJBlQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.7.tgz", + "integrity": "sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -922,12 +908,12 @@ } }, "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.1.tgz", - "integrity": "sha512-zhQTMH0X2nVLnb04tz+s7AMuasX8U0FnpE+nHTOhSOINjWMnopoZTxtIKsd45n4GQ/HIZLyfIpoul8e2m0DnRA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.7.tgz", + "integrity": "sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1101,12 +1087,12 @@ } }, "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.1.tgz", - "integrity": "sha512-ngT/3NkRhsaep9ck9uj2Xhv9+xB1zShY3tM3g6om4xxCELwCDN4g4Aq5dRn48+0hasAql7s2hdBOysCfNpr4fw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz", + "integrity": "sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1116,15 +1102,15 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.24.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.3.tgz", - "integrity": "sha512-Qe26CMYVjpQxJ8zxM1340JFNjZaF+ISWpr1Kt/jGo+ZTUzKkfw/pphEWbRCb+lmSM6k/TOgfYLvmbHkUQ0asIg==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.0.tgz", + "integrity": "sha512-uaIi2FdqzjpAMvVqvB51S42oC2JEVgh0LDsGfZVDysWE8LrJtQC2jvKmOqEYThKyB7bDEb7BP1GYWDm7tABA0Q==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-remap-async-to-generator": "^7.22.20", - "@babel/plugin-syntax-async-generators": "^7.8.4" + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-remap-async-to-generator": "^7.25.0", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/traverse": "^7.25.0" }, "engines": { "node": ">=6.9.0" @@ -1134,14 +1120,14 @@ } }, "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.1.tgz", - "integrity": "sha512-AawPptitRXp1y0n4ilKcGbRYWfbbzFWz2NqNu7dacYDtFtz0CMjG64b3LQsb3KIgnf4/obcUL78hfaOS7iCUfw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz", + "integrity": "sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==", "dev": true, "dependencies": { - "@babel/helper-module-imports": "^7.24.1", - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-remap-async-to-generator": "^7.22.20" + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-remap-async-to-generator": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1151,12 +1137,12 @@ } }, "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.1.tgz", - "integrity": "sha512-TWWC18OShZutrv9C6mye1xwtam+uNi2bnTOCBUd5sZxyHOiWbU6ztSROofIMrK84uweEZC219POICK/sTYwfgg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz", + "integrity": "sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1166,12 +1152,12 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.5.tgz", - "integrity": "sha512-sMfBc3OxghjC95BkYrYocHL3NaOplrcaunblzwXhGmlPwpmfsxr4vK+mBBt49r+S240vahmv+kUxkeKgs+haCw==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.0.tgz", + "integrity": "sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.5" + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -1181,13 +1167,13 @@ } }, "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.1.tgz", - "integrity": "sha512-OMLCXi0NqvJfORTaPQBwqLXHhb93wkBKZ4aNwMl6WtehO7ar+cmp+89iPEQPqxAnxsOKTaMcs3POz3rKayJ72g==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.7.tgz", + "integrity": "sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.1", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1197,13 +1183,13 @@ } }, "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.24.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.4.tgz", - "integrity": "sha512-B8q7Pz870Hz/q9UgP8InNpY01CSLDSCyqX7zcRuv3FcPl87A2G17lASroHWaCtbdIcbYzOZ7kWmXFKbijMSmFg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz", + "integrity": "sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.4", - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-class-static-block": "^7.14.5" }, "engines": { @@ -1214,18 +1200,16 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.5.tgz", - "integrity": "sha512-gWkLP25DFj2dwe9Ck8uwMOpko4YsqyfZJrOmqqcegeDYEbp7rmn4U6UQZNj08UF6MaX39XenSpKRCvpDRBtZ7Q==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.0.tgz", + "integrity": "sha512-xyi6qjr/fYU304fiRwFbekzkqVJZ6A7hOjWZd+89FVcBqPV3S9Wuozz82xdpLspckeaafntbzglaW4pqpzvtSw==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-plugin-utils": "^7.24.5", - "@babel/helper-replace-supers": "^7.24.1", - "@babel/helper-split-export-declaration": "^7.24.5", + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-compilation-targets": "^7.24.8", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-replace-supers": "^7.25.0", + "@babel/traverse": "^7.25.0", "globals": "^11.1.0" }, "engines": { @@ -1236,13 +1220,13 @@ } }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.1.tgz", - "integrity": "sha512-5pJGVIUfJpOS+pAqBQd+QMaTD2vCL/HcePooON6pDpHgRp4gNRmzyHTPIkXntwKsq3ayUFVfJaIKPw2pOkOcTw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz", + "integrity": "sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/template": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/template": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1252,12 +1236,12 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.5.tgz", - "integrity": "sha512-SZuuLyfxvsm+Ah57I/i1HVjveBENYK9ue8MJ7qkc7ndoNjqquJiElzA7f5yaAXjyW2hKojosOTAQQRX50bPSVg==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.8.tgz", + "integrity": "sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.5" + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -1267,13 +1251,13 @@ } }, "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.1.tgz", - "integrity": "sha512-p7uUxgSoZwZ2lPNMzUkqCts3xlp8n+o05ikjy7gbtFJSt9gdU88jAmtfmOxHM14noQXBxfgzf2yRWECiNVhTCw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz", + "integrity": "sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1283,12 +1267,12 @@ } }, "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.1.tgz", - "integrity": "sha512-msyzuUnvsjsaSaocV6L7ErfNsa5nDWL1XKNnDePLgmz+WdU4w/J8+AxBMrWfi9m4IxfL5sZQKUPQKDQeeAT6lA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz", + "integrity": "sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1297,13 +1281,29 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.0.tgz", + "integrity": "sha512-YLpb4LlYSc3sCUa35un84poXoraOiQucUTTu8X1j18JV+gNa8E0nyUf/CjZ171IRGr4jEguF+vzJU66QZhn29g==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.0", + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.1.tgz", - "integrity": "sha512-av2gdSTyXcJVdI+8aFZsCAtR29xJt0S5tas+Ef8NvBNmD1a+N/3ecMLeMBgfcK+xzsjdLDT6oHt+DFPyeqUbDA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz", + "integrity": "sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-dynamic-import": "^7.8.3" }, "engines": { @@ -1314,13 +1314,13 @@ } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.1.tgz", - "integrity": "sha512-U1yX13dVBSwS23DEAqU+Z/PkwE9/m7QQy8Y9/+Tdb8UWYaGNDYwTLi19wqIAiROr8sXVum9A/rtiH5H0boUcTw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz", + "integrity": "sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==", "dev": true, "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1330,12 +1330,12 @@ } }, "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.1.tgz", - "integrity": "sha512-Ft38m/KFOyzKw2UaJFkWG9QnHPG/Q/2SkOrRk4pNBPg5IPZ+dOxcmkK5IyuBcxiNPyyYowPGUReyBvrvZs7IlQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz", + "integrity": "sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" }, "engines": { @@ -1362,13 +1362,13 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.1.tgz", - "integrity": "sha512-OxBdcnF04bpdQdR3i4giHZNZQn7cm8RQKcSwA17wAAqEELo1ZOwp5FFgeptWUQXFyT9kwHo10aqqauYkRZPCAg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz", + "integrity": "sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1378,14 +1378,14 @@ } }, "node_modules/@babel/plugin-transform-function-name": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.1.tgz", - "integrity": "sha512-BXmDZpPlh7jwicKArQASrj8n22/w6iymRnvHYYd2zO30DbE277JO20/7yXJT3QxDPtiQiOxQBbZH4TpivNXIxA==", + "version": "7.25.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.1.tgz", + "integrity": "sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA==", "dev": true, "dependencies": { - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-compilation-targets": "^7.24.8", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/traverse": "^7.25.1" }, "engines": { "node": ">=6.9.0" @@ -1395,12 +1395,12 @@ } }, "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.1.tgz", - "integrity": "sha512-U7RMFmRvoasscrIFy5xA4gIp8iWnWubnKkKuUGJjsuOH7GfbMkB+XZzeslx2kLdEGdOJDamEmCqOks6e8nv8DQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz", + "integrity": "sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-json-strings": "^7.8.3" }, "engines": { @@ -1411,12 +1411,12 @@ } }, "node_modules/@babel/plugin-transform-literals": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.1.tgz", - "integrity": "sha512-zn9pwz8U7nCqOYIiBaOxoQOtYmMODXTJnkxG4AtX8fPmnCRYWBOHD0qcpwS9e2VDSp1zNJYpdnFMIKb8jmwu6g==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.2.tgz", + "integrity": "sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -1426,12 +1426,12 @@ } }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.1.tgz", - "integrity": "sha512-OhN6J4Bpz+hIBqItTeWJujDOfNP+unqv/NJgyhlpSqgBTPm37KkMmZV6SYcOj+pnDbdcl1qRGV/ZiIjX9Iy34w==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz", + "integrity": "sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" }, "engines": { @@ -1442,12 +1442,12 @@ } }, "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.1.tgz", - "integrity": "sha512-4ojai0KysTWXzHseJKa1XPNXKRbuUrhkOPY4rEGeR+7ChlJVKxFa3H3Bz+7tWaGKgJAXUWKOGmltN+u9B3+CVg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz", + "integrity": "sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1457,13 +1457,13 @@ } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.1.tgz", - "integrity": "sha512-lAxNHi4HVtjnHd5Rxg3D5t99Xm6H7b04hUS7EHIXcUl2EV4yl1gWdqZrNzXnSrHveL9qMdbODlLF55mvgjAfaQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz", + "integrity": "sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1473,14 +1473,14 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.1.tgz", - "integrity": "sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.8.tgz", + "integrity": "sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-simple-access": "^7.22.5" + "@babel/helper-module-transforms": "^7.24.8", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-simple-access": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1490,15 +1490,15 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.1.tgz", - "integrity": "sha512-mqQ3Zh9vFO1Tpmlt8QPnbwGHzNz3lpNEMxQb1kAemn/erstyqw1r9KeOlOfo3y6xAnFEcOv2tSyrXfmMk+/YZA==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.0.tgz", + "integrity": "sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw==", "dev": true, "dependencies": { - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-validator-identifier": "^7.22.20" + "@babel/helper-module-transforms": "^7.25.0", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", + "@babel/traverse": "^7.25.0" }, "engines": { "node": ">=6.9.0" @@ -1508,13 +1508,13 @@ } }, "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.1.tgz", - "integrity": "sha512-tuA3lpPj+5ITfcCluy6nWonSL7RvaG0AOTeAuvXqEKS34lnLzXpDb0dcP6K8jD0zWZFNDVly90AGFJPnm4fOYg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz", + "integrity": "sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1524,13 +1524,13 @@ } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", - "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz", + "integrity": "sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1540,12 +1540,12 @@ } }, "node_modules/@babel/plugin-transform-new-target": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.1.tgz", - "integrity": "sha512-/rurytBM34hYy0HKZQyA0nHbQgQNFm4Q/BOc9Hflxi2X3twRof7NaE5W46j4kQitm7SvACVRXsa6N/tSZxvPug==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz", + "integrity": "sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1555,12 +1555,12 @@ } }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.1.tgz", - "integrity": "sha512-iQ+caew8wRrhCikO5DrUYx0mrmdhkaELgFa+7baMcVuhxIkN7oxt06CZ51D65ugIb1UWRQ8oQe+HXAVM6qHFjw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz", + "integrity": "sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" }, "engines": { @@ -1571,12 +1571,12 @@ } }, "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.1.tgz", - "integrity": "sha512-7GAsGlK4cNL2OExJH1DzmDeKnRv/LXq0eLUSvudrehVA5Rgg4bIrqEUW29FbKMBRT0ztSqisv7kjP+XIC4ZMNw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz", + "integrity": "sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-numeric-separator": "^7.10.4" }, "engines": { @@ -1587,15 +1587,15 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.5.tgz", - "integrity": "sha512-7EauQHszLGM3ay7a161tTQH7fj+3vVM/gThlz5HpFtnygTxjrlvoeq7MPVA1Vy9Q555OB8SnAOsMkLShNkkrHA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz", + "integrity": "sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==", "dev": true, "dependencies": { - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-plugin-utils": "^7.24.5", + "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.24.5" + "@babel/plugin-transform-parameters": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1605,13 +1605,13 @@ } }, "node_modules/@babel/plugin-transform-object-super": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.1.tgz", - "integrity": "sha512-oKJqR3TeI5hSLRxudMjFQ9re9fBVUU0GICqM3J1mi8MqlhVr6hC/ZN4ttAyMuQR6EZZIY6h/exe5swqGNNIkWQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz", + "integrity": "sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-replace-supers": "^7.24.1" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-replace-supers": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1621,12 +1621,12 @@ } }, "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.1.tgz", - "integrity": "sha512-oBTH7oURV4Y+3EUrf6cWn1OHio3qG/PVwO5J03iSJmBg6m2EhKjkAu/xuaXaYwWW9miYtvbWv4LNf0AmR43LUA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz", + "integrity": "sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" }, "engines": { @@ -1637,13 +1637,13 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.5.tgz", - "integrity": "sha512-xWCkmwKT+ihmA6l7SSTpk8e4qQl/274iNbSKRRS8mpqFR32ksy36+a+LWY8OXCCEefF8WFlnOHVsaDI2231wBg==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.8.tgz", + "integrity": "sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", "@babel/plugin-syntax-optional-chaining": "^7.8.3" }, "engines": { @@ -1654,12 +1654,12 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.5.tgz", - "integrity": "sha512-9Co00MqZ2aoky+4j2jhofErthm6QVLKbpQrvz20c3CH9KQCLHyNB+t2ya4/UrRpQGR+Wrwjg9foopoeSdnHOkA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz", + "integrity": "sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1669,13 +1669,13 @@ } }, "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.1.tgz", - "integrity": "sha512-tGvisebwBO5em4PaYNqt4fkw56K2VALsAbAakY0FjTYqJp7gfdrgr7YX76Or8/cpik0W6+tj3rZ0uHU9Oil4tw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.7.tgz", + "integrity": "sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.1", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1685,14 +1685,14 @@ } }, "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.5.tgz", - "integrity": "sha512-JM4MHZqnWR04jPMujQDTBVRnqxpLLpx2tkn7iPn+Hmsc0Gnb79yvRWOkvqFOx3Z7P7VxiRIR22c4eGSNj87OBQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz", + "integrity": "sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.24.5", - "@babel/helper-plugin-utils": "^7.24.5", + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" }, "engines": { @@ -1703,12 +1703,12 @@ } }, "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.1.tgz", - "integrity": "sha512-LetvD7CrHmEx0G442gOomRr66d7q8HzzGGr4PMHGr+5YIm6++Yke+jxj246rpvsbyhJwCLxcTn6zW1P1BSenqA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz", + "integrity": "sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1811,12 +1811,12 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.1.tgz", - "integrity": "sha512-sJwZBCzIBE4t+5Q4IGLaaun5ExVMRY0lYwos/jNecjMrVCygCdph3IKv0tkP5Fc87e/1+bebAmEAGBfnRD+cnw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz", + "integrity": "sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-plugin-utils": "^7.24.7", "regenerator-transform": "^0.15.2" }, "engines": { @@ -1827,12 +1827,12 @@ } }, "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.1.tgz", - "integrity": "sha512-JAclqStUfIwKN15HrsQADFgeZt+wexNQ0uLhuqvqAUFoqPMjEcFCYZBhq0LUdz6dZK/mD+rErhW71fbx8RYElg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz", + "integrity": "sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1871,12 +1871,12 @@ } }, "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.1.tgz", - "integrity": "sha512-LyjVB1nsJ6gTTUKRjRWx9C1s9hE7dLfP/knKdrfeH9UPtAGjYGgxIbFfx7xyLIEWs7Xe1Gnf8EWiUqfjLhInZA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz", + "integrity": "sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1886,13 +1886,13 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.1.tgz", - "integrity": "sha512-KjmcIM+fxgY+KxPVbjelJC6hrH1CgtPmTvdXAfn3/a9CnWGSTY7nH4zm5+cjmWJybdcPSsD0++QssDsjcpe47g==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz", + "integrity": "sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1902,12 +1902,12 @@ } }, "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.1.tgz", - "integrity": "sha512-9v0f1bRXgPVcPrngOQvLXeGNNVLc8UjMVfebo9ka0WF3/7+aVUHmaJVT3sa0XCzEFioPfPHZiOcYG9qOsH63cw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz", + "integrity": "sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1917,12 +1917,12 @@ } }, "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.1.tgz", - "integrity": "sha512-WRkhROsNzriarqECASCNu/nojeXCDTE/F2HmRgOzi7NGvyfYGq1NEjKBK3ckLfRgGc6/lPAqP0vDOSw3YtG34g==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz", + "integrity": "sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1932,12 +1932,12 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.5.tgz", - "integrity": "sha512-UTGnhYVZtTAjdwOTzT+sCyXmTn8AhaxOS/MjG9REclZ6ULHWF9KoCZur0HSGU7hk8PdBFKKbYe6+gqdXWz84Jg==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.8.tgz", + "integrity": "sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.5" + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -1965,12 +1965,12 @@ } }, "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.1.tgz", - "integrity": "sha512-RlkVIcWT4TLI96zM660S877E7beKlQw7Ig+wqkKBiWfj0zH5Q4h50q6er4wzZKRNSYpfo6ILJ+hrJAGSX2qcNw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz", + "integrity": "sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1980,13 +1980,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.1.tgz", - "integrity": "sha512-Ss4VvlfYV5huWApFsF8/Sq0oXnGO+jB+rijFEFugTd3cwSObUSnUi88djgR5528Csl0uKlrI331kRqe56Ov2Ng==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz", + "integrity": "sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -1996,13 +1996,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.1.tgz", - "integrity": "sha512-2A/94wgZgxfTsiLaQ2E36XAOdcZmGAaEEgVmxQWwZXWkGhvoHbaqXcKnU8zny4ycpu3vNqg0L/PcCiYtHtA13g==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz", + "integrity": "sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -2012,13 +2012,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.1.tgz", - "integrity": "sha512-fqj4WuzzS+ukpgerpAoOnMfQXwUHFxXUZUE84oL2Kao2N8uSlvcpnAidKASgsNgzZHBsHWvcm8s9FPWUhAb8fA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.7.tgz", + "integrity": "sha512-2G8aAvF4wy1w/AGZkemprdGMRg5o6zPNhbHVImRz3lss55TYCBd6xStN19rt8XJHq20sqV0JbyWjOWwQRwV/wg==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -2028,27 +2028,28 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.5.tgz", - "integrity": "sha512-UGK2ifKtcC8i5AI4cH+sbLLuLc2ktYSFJgBAXorKAsHUZmrQ1q6aQ6i3BvU24wWs2AAKqQB6kq3N9V9Gw1HiMQ==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.24.4", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-plugin-utils": "^7.24.5", - "@babel/helper-validator-option": "^7.23.5", - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.24.5", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.24.1", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.1", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.24.1", + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.3.tgz", + "integrity": "sha512-QsYW7UeAaXvLPX9tdVliMJE7MD7M6MLYVTovRTIwhoYQVFHR1rM4wO8wqAezYi3/BpSD+NzVCZ69R6smWiIi8g==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.25.2", + "@babel/helper-compilation-targets": "^7.25.2", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-validator-option": "^7.24.8", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.3", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.0", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.0", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.7", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.0", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-syntax-class-static-block": "^7.14.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.24.1", - "@babel/plugin-syntax-import-attributes": "^7.24.1", + "@babel/plugin-syntax-import-assertions": "^7.24.7", + "@babel/plugin-syntax-import-attributes": "^7.24.7", "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", @@ -2060,59 +2061,60 @@ "@babel/plugin-syntax-private-property-in-object": "^7.14.5", "@babel/plugin-syntax-top-level-await": "^7.14.5", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.24.1", - "@babel/plugin-transform-async-generator-functions": "^7.24.3", - "@babel/plugin-transform-async-to-generator": "^7.24.1", - "@babel/plugin-transform-block-scoped-functions": "^7.24.1", - "@babel/plugin-transform-block-scoping": "^7.24.5", - "@babel/plugin-transform-class-properties": "^7.24.1", - "@babel/plugin-transform-class-static-block": "^7.24.4", - "@babel/plugin-transform-classes": "^7.24.5", - "@babel/plugin-transform-computed-properties": "^7.24.1", - "@babel/plugin-transform-destructuring": "^7.24.5", - "@babel/plugin-transform-dotall-regex": "^7.24.1", - "@babel/plugin-transform-duplicate-keys": "^7.24.1", - "@babel/plugin-transform-dynamic-import": "^7.24.1", - "@babel/plugin-transform-exponentiation-operator": "^7.24.1", - "@babel/plugin-transform-export-namespace-from": "^7.24.1", - "@babel/plugin-transform-for-of": "^7.24.1", - "@babel/plugin-transform-function-name": "^7.24.1", - "@babel/plugin-transform-json-strings": "^7.24.1", - "@babel/plugin-transform-literals": "^7.24.1", - "@babel/plugin-transform-logical-assignment-operators": "^7.24.1", - "@babel/plugin-transform-member-expression-literals": "^7.24.1", - "@babel/plugin-transform-modules-amd": "^7.24.1", - "@babel/plugin-transform-modules-commonjs": "^7.24.1", - "@babel/plugin-transform-modules-systemjs": "^7.24.1", - "@babel/plugin-transform-modules-umd": "^7.24.1", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", - "@babel/plugin-transform-new-target": "^7.24.1", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.1", - "@babel/plugin-transform-numeric-separator": "^7.24.1", - "@babel/plugin-transform-object-rest-spread": "^7.24.5", - "@babel/plugin-transform-object-super": "^7.24.1", - "@babel/plugin-transform-optional-catch-binding": "^7.24.1", - "@babel/plugin-transform-optional-chaining": "^7.24.5", - "@babel/plugin-transform-parameters": "^7.24.5", - "@babel/plugin-transform-private-methods": "^7.24.1", - "@babel/plugin-transform-private-property-in-object": "^7.24.5", - "@babel/plugin-transform-property-literals": "^7.24.1", - "@babel/plugin-transform-regenerator": "^7.24.1", - "@babel/plugin-transform-reserved-words": "^7.24.1", - "@babel/plugin-transform-shorthand-properties": "^7.24.1", - "@babel/plugin-transform-spread": "^7.24.1", - "@babel/plugin-transform-sticky-regex": "^7.24.1", - "@babel/plugin-transform-template-literals": "^7.24.1", - "@babel/plugin-transform-typeof-symbol": "^7.24.5", - "@babel/plugin-transform-unicode-escapes": "^7.24.1", - "@babel/plugin-transform-unicode-property-regex": "^7.24.1", - "@babel/plugin-transform-unicode-regex": "^7.24.1", - "@babel/plugin-transform-unicode-sets-regex": "^7.24.1", + "@babel/plugin-transform-arrow-functions": "^7.24.7", + "@babel/plugin-transform-async-generator-functions": "^7.25.0", + "@babel/plugin-transform-async-to-generator": "^7.24.7", + "@babel/plugin-transform-block-scoped-functions": "^7.24.7", + "@babel/plugin-transform-block-scoping": "^7.25.0", + "@babel/plugin-transform-class-properties": "^7.24.7", + "@babel/plugin-transform-class-static-block": "^7.24.7", + "@babel/plugin-transform-classes": "^7.25.0", + "@babel/plugin-transform-computed-properties": "^7.24.7", + "@babel/plugin-transform-destructuring": "^7.24.8", + "@babel/plugin-transform-dotall-regex": "^7.24.7", + "@babel/plugin-transform-duplicate-keys": "^7.24.7", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.0", + "@babel/plugin-transform-dynamic-import": "^7.24.7", + "@babel/plugin-transform-exponentiation-operator": "^7.24.7", + "@babel/plugin-transform-export-namespace-from": "^7.24.7", + "@babel/plugin-transform-for-of": "^7.24.7", + "@babel/plugin-transform-function-name": "^7.25.1", + "@babel/plugin-transform-json-strings": "^7.24.7", + "@babel/plugin-transform-literals": "^7.25.2", + "@babel/plugin-transform-logical-assignment-operators": "^7.24.7", + "@babel/plugin-transform-member-expression-literals": "^7.24.7", + "@babel/plugin-transform-modules-amd": "^7.24.7", + "@babel/plugin-transform-modules-commonjs": "^7.24.8", + "@babel/plugin-transform-modules-systemjs": "^7.25.0", + "@babel/plugin-transform-modules-umd": "^7.24.7", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7", + "@babel/plugin-transform-new-target": "^7.24.7", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7", + "@babel/plugin-transform-numeric-separator": "^7.24.7", + "@babel/plugin-transform-object-rest-spread": "^7.24.7", + "@babel/plugin-transform-object-super": "^7.24.7", + "@babel/plugin-transform-optional-catch-binding": "^7.24.7", + "@babel/plugin-transform-optional-chaining": "^7.24.8", + "@babel/plugin-transform-parameters": "^7.24.7", + "@babel/plugin-transform-private-methods": "^7.24.7", + "@babel/plugin-transform-private-property-in-object": "^7.24.7", + "@babel/plugin-transform-property-literals": "^7.24.7", + "@babel/plugin-transform-regenerator": "^7.24.7", + "@babel/plugin-transform-reserved-words": "^7.24.7", + "@babel/plugin-transform-shorthand-properties": "^7.24.7", + "@babel/plugin-transform-spread": "^7.24.7", + "@babel/plugin-transform-sticky-regex": "^7.24.7", + "@babel/plugin-transform-template-literals": "^7.24.7", + "@babel/plugin-transform-typeof-symbol": "^7.24.8", + "@babel/plugin-transform-unicode-escapes": "^7.24.7", + "@babel/plugin-transform-unicode-property-regex": "^7.24.7", + "@babel/plugin-transform-unicode-regex": "^7.24.7", + "@babel/plugin-transform-unicode-sets-regex": "^7.24.7", "@babel/preset-modules": "0.1.6-no-external-plugins", "babel-plugin-polyfill-corejs2": "^0.4.10", "babel-plugin-polyfill-corejs3": "^0.10.4", "babel-plugin-polyfill-regenerator": "^0.6.1", - "core-js-compat": "^3.31.0", + "core-js-compat": "^3.37.1", "semver": "^6.3.1" }, "engines": { @@ -2243,31 +2245,28 @@ } }, "node_modules/@babel/template": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.7.tgz", - "integrity": "sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", + "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", "dependencies": { "@babel/code-frame": "^7.24.7", - "@babel/parser": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/parser": "^7.25.0", + "@babel/types": "^7.25.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.7.tgz", - "integrity": "sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==", + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.3.tgz", + "integrity": "sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==", "dependencies": { "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.24.7", - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-function-name": "^7.24.7", - "@babel/helper-hoist-variables": "^7.24.7", - "@babel/helper-split-export-declaration": "^7.24.7", - "@babel/parser": "^7.24.7", - "@babel/types": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/parser": "^7.25.3", + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.2", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -2276,11 +2275,11 @@ } }, "node_modules/@babel/types": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.7.tgz", - "integrity": "sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz", + "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==", "dependencies": { - "@babel/helper-string-parser": "^7.24.7", + "@babel/helper-string-parser": "^7.24.8", "@babel/helper-validator-identifier": "^7.24.7", "to-fast-properties": "^2.0.0" }, @@ -8502,9 +8501,9 @@ "license": "BSD-2-Clause" }, "node_modules/browserslist": { - "version": "4.23.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", - "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", + "version": "4.23.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", + "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", "funding": [ { "type": "opencollective", @@ -8520,10 +8519,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001587", - "electron-to-chromium": "^1.4.668", - "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.13" + "caniuse-lite": "^1.0.30001646", + "electron-to-chromium": "^1.5.4", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.0" }, "bin": { "browserslist": "cli.js" @@ -8701,9 +8700,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001615", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001615.tgz", - "integrity": "sha512-1IpazM5G3r38meiae0bHRnPhz+CBQ3ZLqbQMtrg+AsTPKAXgW38JNsXkyZ+v8waCsDmPq87lmfun5Q2AGysNEQ==", + "version": "1.0.30001651", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001651.tgz", + "integrity": "sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg==", "funding": [ { "type": "opencollective", @@ -9284,12 +9283,12 @@ } }, "node_modules/core-js-compat": { - "version": "3.37.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.0.tgz", - "integrity": "sha512-vYq4L+T8aS5UuFg4UwDhc7YNRWVeVZwltad9C/jV3R2LgVOpS9BDr7l/WL6BN0dbV3k1XejPTHqqEzJgsa0frA==", + "version": "3.38.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.0.tgz", + "integrity": "sha512-75LAicdLa4OJVwFxFbQR3NdnZjNgX6ILpVcVzcC4T2smerB5lELMrJQQQoWV6TiuC/vlaFqgU2tKQx9w5s0e0A==", "dev": true, "dependencies": { - "browserslist": "^4.23.0" + "browserslist": "^4.23.3" }, "funding": { "type": "opencollective", @@ -10386,9 +10385,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.754", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.754.tgz", - "integrity": "sha512-7Kr5jUdns5rL/M9wFFmMZAgFDuL2YOnanFH4OI4iFzUqyh3XOL7nAGbSlSMZdzKMIyyTpNSbqZsWG9odwLeKvA==" + "version": "1.5.11", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.11.tgz", + "integrity": "sha512-R1CccCDYqndR25CaXFd6hp/u9RaaMcftMkphmvuepXr5b1vfLkRml6aWVeBhXJ7rbevHkKEMJtz8XqPf7ffmew==" }, "node_modules/emittery": { "version": "0.7.2", @@ -10846,8 +10845,9 @@ } }, "node_modules/escalade": { - "version": "3.1.1", - "license": "MIT", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", "engines": { "node": ">=6" } @@ -22275,9 +22275,9 @@ } }, "node_modules/node-releases": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==" + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==" }, "node_modules/nodemon": { "version": "3.1.4", @@ -22878,8 +22878,9 @@ "license": "MIT" }, "node_modules/picocolors": { - "version": "1.0.0", - "license": "ISC" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==" }, "node_modules/picomatch": { "version": "2.3.1", @@ -27110,9 +27111,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", "funding": [ { "type": "opencollective", @@ -27128,8 +27129,8 @@ } ], "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "escalade": "^3.1.2", + "picocolors": "^1.0.1" }, "bin": { "update-browserslist-db": "cli.js" @@ -28367,9 +28368,9 @@ } }, "@babel/compat-data": { - "version": "7.24.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.4.tgz", - "integrity": "sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==" + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.2.tgz", + "integrity": "sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==" }, "@babel/core": { "version": "7.23.7", @@ -28423,11 +28424,11 @@ } }, "@babel/generator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.7.tgz", - "integrity": "sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz", + "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==", "requires": { - "@babel/types": "^7.24.7", + "@babel/types": "^7.25.0", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" @@ -28443,22 +28444,23 @@ } }, "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", - "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz", + "integrity": "sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==", "dev": true, "requires": { - "@babel/types": "^7.22.15" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" } }, "@babel/helper-compilation-targets": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", - "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", + "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", "requires": { - "@babel/compat-data": "^7.23.5", - "@babel/helper-validator-option": "^7.23.5", - "browserslist": "^4.22.2", + "@babel/compat-data": "^7.25.2", + "@babel/helper-validator-option": "^7.24.8", + "browserslist": "^4.23.1", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -28484,19 +28486,17 @@ } }, "@babel/helper-create-class-features-plugin": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.5.tgz", - "integrity": "sha512-uRc4Cv8UQWnE4NXlYTIIdM7wfFkOqlFztcC/gVXDKohKoVB3OyonfelUBaJzSwpBntZ2KYGF/9S7asCHsXwW6g==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-member-expression-to-functions": "^7.24.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.24.1", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.24.5", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.0.tgz", + "integrity": "sha512-GYM6BxeQsETc9mnct+nIIpf63SAyzvyYN7UB/IlTyd+MBg06afFGp0mIeUqGyWgS2mxad6vqbMrHVlaL3m70sQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-member-expression-to-functions": "^7.24.8", + "@babel/helper-optimise-call-expression": "^7.24.7", + "@babel/helper-replace-supers": "^7.25.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/traverse": "^7.25.0", "semver": "^6.3.1" }, "dependencies": { @@ -28509,12 +28509,12 @@ } }, "@babel/helper-create-regexp-features-plugin": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", - "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.2.tgz", + "integrity": "sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-annotate-as-pure": "^7.24.7", "regexpu-core": "^5.3.1", "semver": "^6.3.1" }, @@ -28540,38 +28540,14 @@ "resolve": "^1.14.2" } }, - "@babel/helper-environment-visitor": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz", - "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==", - "requires": { - "@babel/types": "^7.24.7" - } - }, - "@babel/helper-function-name": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz", - "integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==", - "requires": { - "@babel/template": "^7.24.7", - "@babel/types": "^7.24.7" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz", - "integrity": "sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==", - "requires": { - "@babel/types": "^7.24.7" - } - }, "@babel/helper-member-expression-to-functions": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.5.tgz", - "integrity": "sha512-4owRteeihKWKamtqg4JmWSsEZU445xpFRXPEwp44HbgbxdWlUV1b4Agg4lkA806Lil5XM/e+FJyS0vj5T6vmcA==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz", + "integrity": "sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==", "dev": true, "requires": { - "@babel/types": "^7.24.5" + "@babel/traverse": "^7.24.8", + "@babel/types": "^7.24.8" } }, "@babel/helper-module-imports": { @@ -28584,82 +28560,84 @@ } }, "@babel/helper-module-transforms": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", - "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", + "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", "requires": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.20" + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7", + "@babel/traverse": "^7.25.2" } }, "@babel/helper-optimise-call-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", - "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz", + "integrity": "sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==", "dev": true, "requires": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.7" } }, "@babel/helper-plugin-utils": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.7.tgz", - "integrity": "sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==" + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", + "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==" }, "@babel/helper-remap-async-to-generator": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz", - "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.0.tgz", + "integrity": "sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-wrap-function": "^7.22.20" + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-wrap-function": "^7.25.0", + "@babel/traverse": "^7.25.0" } }, "@babel/helper-replace-supers": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.24.1.tgz", - "integrity": "sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz", + "integrity": "sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==", "dev": true, "requires": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-member-expression-to-functions": "^7.23.0", - "@babel/helper-optimise-call-expression": "^7.22.5" + "@babel/helper-member-expression-to-functions": "^7.24.8", + "@babel/helper-optimise-call-expression": "^7.24.7", + "@babel/traverse": "^7.25.0" } }, "@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", + "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", "requires": { - "@babel/types": "^7.22.5" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" } }, "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", - "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz", + "integrity": "sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==", "dev": true, "requires": { - "@babel/types": "^7.22.5" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" } }, "@babel/helper-split-export-declaration": { "version": "7.24.7", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", + "dev": true, "requires": { "@babel/types": "^7.24.7" } }, "@babel/helper-string-parser": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz", - "integrity": "sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==" + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", + "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==" }, "@babel/helper-validator-identifier": { "version": "7.24.7", @@ -28667,19 +28645,19 @@ "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==" }, "@babel/helper-validator-option": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.7.tgz", - "integrity": "sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==" + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", + "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==" }, "@babel/helper-wrap-function": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.24.5.tgz", - "integrity": "sha512-/xxzuNvgRl4/HLNKvnFwdhdgN3cpLxgLROeLDl83Yx0AJ1SGvq1ak0OszTOjDfiB8Vx03eJbeDWh9r+jCCWttw==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.0.tgz", + "integrity": "sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.23.0", - "@babel/template": "^7.24.0", - "@babel/types": "^7.24.5" + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.0", + "@babel/types": "^7.25.0" } }, "@babel/helpers": { @@ -28704,48 +28682,60 @@ } }, "@babel/parser": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.7.tgz", - "integrity": "sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==" + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz", + "integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==", + "requires": { + "@babel/types": "^7.25.2" + } }, "@babel/plugin-bugfix-firefox-class-in-computed-class-key": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.5.tgz", - "integrity": "sha512-LdXRi1wEMTrHVR4Zc9F8OewC3vdm5h4QB6L71zy6StmYeqGi1b3ttIO8UC+BfZKcH9jdr4aI249rBkm+3+YvHw==", + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.3.tgz", + "integrity": "sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/traverse": "^7.25.3" + } + }, + "@babel/plugin-bugfix-safari-class-field-initializer-scope": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.0.tgz", + "integrity": "sha512-Bm4bH2qsX880b/3ziJ8KD711LT7z4u8CFudmjqle65AZj/HNUFhEf90dqYv6O86buWvSBmeQDjv0Tn2aF/bIBA==", "dev": true, "requires": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-plugin-utils": "^7.24.5" + "@babel/helper-plugin-utils": "^7.24.8" } }, "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.1.tgz", - "integrity": "sha512-y4HqEnkelJIOQGd+3g1bTeKsA5c6qM7eOn7VggGVbBc0y8MLSKHacwcIE2PplNlQSj0PqS9rrXL/nkPVK+kUNg==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.0.tgz", + "integrity": "sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.8" } }, "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.1.tgz", - "integrity": "sha512-Hj791Ii4ci8HqnaKHAlLNs+zaLXb0EzSDhiAWp5VNlyvCNymYfacs64pxTxbH1znW/NcArSmwpmG9IKE/TUVVQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz", + "integrity": "sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.24.1" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/plugin-transform-optional-chaining": "^7.24.7" } }, "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.1.tgz", - "integrity": "sha512-m9m/fXsXLiHfwdgydIFnpk+7jlVbnvlK5B2EKiPdLUb6WX654ZaaEWJUjk8TftRbZpK0XibovlLWX4KIZhV6jw==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.0.tgz", + "integrity": "sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw==", "dev": true, "requires": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/traverse": "^7.25.0" } }, "@babel/plugin-proposal-class-properties": { @@ -28888,21 +28878,21 @@ } }, "@babel/plugin-syntax-import-assertions": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.1.tgz", - "integrity": "sha512-IuwnI5XnuF189t91XbxmXeCDz3qs6iDRO7GJ++wcfgeXNs/8FmIlKcpDSXNVyuLQxlwvskmI3Ct73wUODkJBlQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.7.tgz", + "integrity": "sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.7" } }, "@babel/plugin-syntax-import-attributes": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.1.tgz", - "integrity": "sha512-zhQTMH0X2nVLnb04tz+s7AMuasX8U0FnpE+nHTOhSOINjWMnopoZTxtIKsd45n4GQ/HIZLyfIpoul8e2m0DnRA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.7.tgz", + "integrity": "sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.7" } }, "@babel/plugin-syntax-import-meta": { @@ -29008,157 +28998,165 @@ } }, "@babel/plugin-transform-arrow-functions": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.1.tgz", - "integrity": "sha512-ngT/3NkRhsaep9ck9uj2Xhv9+xB1zShY3tM3g6om4xxCELwCDN4g4Aq5dRn48+0hasAql7s2hdBOysCfNpr4fw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz", + "integrity": "sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.7" } }, "@babel/plugin-transform-async-generator-functions": { - "version": "7.24.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.3.tgz", - "integrity": "sha512-Qe26CMYVjpQxJ8zxM1340JFNjZaF+ISWpr1Kt/jGo+ZTUzKkfw/pphEWbRCb+lmSM6k/TOgfYLvmbHkUQ0asIg==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.0.tgz", + "integrity": "sha512-uaIi2FdqzjpAMvVqvB51S42oC2JEVgh0LDsGfZVDysWE8LrJtQC2jvKmOqEYThKyB7bDEb7BP1GYWDm7tABA0Q==", "dev": true, "requires": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-remap-async-to-generator": "^7.22.20", - "@babel/plugin-syntax-async-generators": "^7.8.4" + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-remap-async-to-generator": "^7.25.0", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/traverse": "^7.25.0" } }, "@babel/plugin-transform-async-to-generator": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.1.tgz", - "integrity": "sha512-AawPptitRXp1y0n4ilKcGbRYWfbbzFWz2NqNu7dacYDtFtz0CMjG64b3LQsb3KIgnf4/obcUL78hfaOS7iCUfw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz", + "integrity": "sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.24.1", - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-remap-async-to-generator": "^7.22.20" + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-remap-async-to-generator": "^7.24.7" } }, "@babel/plugin-transform-block-scoped-functions": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.1.tgz", - "integrity": "sha512-TWWC18OShZutrv9C6mye1xwtam+uNi2bnTOCBUd5sZxyHOiWbU6ztSROofIMrK84uweEZC219POICK/sTYwfgg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz", + "integrity": "sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.7" } }, "@babel/plugin-transform-block-scoping": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.5.tgz", - "integrity": "sha512-sMfBc3OxghjC95BkYrYocHL3NaOplrcaunblzwXhGmlPwpmfsxr4vK+mBBt49r+S240vahmv+kUxkeKgs+haCw==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.0.tgz", + "integrity": "sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.5" + "@babel/helper-plugin-utils": "^7.24.8" } }, "@babel/plugin-transform-class-properties": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.1.tgz", - "integrity": "sha512-OMLCXi0NqvJfORTaPQBwqLXHhb93wkBKZ4aNwMl6WtehO7ar+cmp+89iPEQPqxAnxsOKTaMcs3POz3rKayJ72g==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.7.tgz", + "integrity": "sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.24.1", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" } }, "@babel/plugin-transform-class-static-block": { - "version": "7.24.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.4.tgz", - "integrity": "sha512-B8q7Pz870Hz/q9UgP8InNpY01CSLDSCyqX7zcRuv3FcPl87A2G17lASroHWaCtbdIcbYzOZ7kWmXFKbijMSmFg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz", + "integrity": "sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.24.4", - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-class-static-block": "^7.14.5" } }, "@babel/plugin-transform-classes": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.5.tgz", - "integrity": "sha512-gWkLP25DFj2dwe9Ck8uwMOpko4YsqyfZJrOmqqcegeDYEbp7rmn4U6UQZNj08UF6MaX39XenSpKRCvpDRBtZ7Q==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.0.tgz", + "integrity": "sha512-xyi6qjr/fYU304fiRwFbekzkqVJZ6A7hOjWZd+89FVcBqPV3S9Wuozz82xdpLspckeaafntbzglaW4pqpzvtSw==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-plugin-utils": "^7.24.5", - "@babel/helper-replace-supers": "^7.24.1", - "@babel/helper-split-export-declaration": "^7.24.5", + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-compilation-targets": "^7.24.8", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-replace-supers": "^7.25.0", + "@babel/traverse": "^7.25.0", "globals": "^11.1.0" } }, "@babel/plugin-transform-computed-properties": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.1.tgz", - "integrity": "sha512-5pJGVIUfJpOS+pAqBQd+QMaTD2vCL/HcePooON6pDpHgRp4gNRmzyHTPIkXntwKsq3ayUFVfJaIKPw2pOkOcTw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz", + "integrity": "sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/template": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/template": "^7.24.7" } }, "@babel/plugin-transform-destructuring": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.5.tgz", - "integrity": "sha512-SZuuLyfxvsm+Ah57I/i1HVjveBENYK9ue8MJ7qkc7ndoNjqquJiElzA7f5yaAXjyW2hKojosOTAQQRX50bPSVg==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.8.tgz", + "integrity": "sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.5" + "@babel/helper-plugin-utils": "^7.24.8" } }, "@babel/plugin-transform-dotall-regex": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.1.tgz", - "integrity": "sha512-p7uUxgSoZwZ2lPNMzUkqCts3xlp8n+o05ikjy7gbtFJSt9gdU88jAmtfmOxHM14noQXBxfgzf2yRWECiNVhTCw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz", + "integrity": "sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" } }, "@babel/plugin-transform-duplicate-keys": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.1.tgz", - "integrity": "sha512-msyzuUnvsjsaSaocV6L7ErfNsa5nDWL1XKNnDePLgmz+WdU4w/J8+AxBMrWfi9m4IxfL5sZQKUPQKDQeeAT6lA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz", + "integrity": "sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.7" + } + }, + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.0.tgz", + "integrity": "sha512-YLpb4LlYSc3sCUa35un84poXoraOiQucUTTu8X1j18JV+gNa8E0nyUf/CjZ171IRGr4jEguF+vzJU66QZhn29g==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-create-regexp-features-plugin": "^7.25.0", + "@babel/helper-plugin-utils": "^7.24.8" } }, "@babel/plugin-transform-dynamic-import": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.1.tgz", - "integrity": "sha512-av2gdSTyXcJVdI+8aFZsCAtR29xJt0S5tas+Ef8NvBNmD1a+N/3ecMLeMBgfcK+xzsjdLDT6oHt+DFPyeqUbDA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz", + "integrity": "sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-dynamic-import": "^7.8.3" } }, "@babel/plugin-transform-exponentiation-operator": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.1.tgz", - "integrity": "sha512-U1yX13dVBSwS23DEAqU+Z/PkwE9/m7QQy8Y9/+Tdb8UWYaGNDYwTLi19wqIAiROr8sXVum9A/rtiH5H0boUcTw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz", + "integrity": "sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==", "dev": true, "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" } }, "@babel/plugin-transform-export-namespace-from": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.1.tgz", - "integrity": "sha512-Ft38m/KFOyzKw2UaJFkWG9QnHPG/Q/2SkOrRk4pNBPg5IPZ+dOxcmkK5IyuBcxiNPyyYowPGUReyBvrvZs7IlQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz", + "integrity": "sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" } }, @@ -29173,227 +29171,227 @@ } }, "@babel/plugin-transform-for-of": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.1.tgz", - "integrity": "sha512-OxBdcnF04bpdQdR3i4giHZNZQn7cm8RQKcSwA17wAAqEELo1ZOwp5FFgeptWUQXFyT9kwHo10aqqauYkRZPCAg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz", + "integrity": "sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" } }, "@babel/plugin-transform-function-name": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.1.tgz", - "integrity": "sha512-BXmDZpPlh7jwicKArQASrj8n22/w6iymRnvHYYd2zO30DbE277JO20/7yXJT3QxDPtiQiOxQBbZH4TpivNXIxA==", + "version": "7.25.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.1.tgz", + "integrity": "sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA==", "dev": true, "requires": { - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-compilation-targets": "^7.24.8", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/traverse": "^7.25.1" } }, "@babel/plugin-transform-json-strings": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.1.tgz", - "integrity": "sha512-U7RMFmRvoasscrIFy5xA4gIp8iWnWubnKkKuUGJjsuOH7GfbMkB+XZzeslx2kLdEGdOJDamEmCqOks6e8nv8DQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz", + "integrity": "sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-json-strings": "^7.8.3" } }, "@babel/plugin-transform-literals": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.1.tgz", - "integrity": "sha512-zn9pwz8U7nCqOYIiBaOxoQOtYmMODXTJnkxG4AtX8fPmnCRYWBOHD0qcpwS9e2VDSp1zNJYpdnFMIKb8jmwu6g==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.2.tgz", + "integrity": "sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.8" } }, "@babel/plugin-transform-logical-assignment-operators": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.1.tgz", - "integrity": "sha512-OhN6J4Bpz+hIBqItTeWJujDOfNP+unqv/NJgyhlpSqgBTPm37KkMmZV6SYcOj+pnDbdcl1qRGV/ZiIjX9Iy34w==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz", + "integrity": "sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" } }, "@babel/plugin-transform-member-expression-literals": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.1.tgz", - "integrity": "sha512-4ojai0KysTWXzHseJKa1XPNXKRbuUrhkOPY4rEGeR+7ChlJVKxFa3H3Bz+7tWaGKgJAXUWKOGmltN+u9B3+CVg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz", + "integrity": "sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.7" } }, "@babel/plugin-transform-modules-amd": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.1.tgz", - "integrity": "sha512-lAxNHi4HVtjnHd5Rxg3D5t99Xm6H7b04hUS7EHIXcUl2EV4yl1gWdqZrNzXnSrHveL9qMdbODlLF55mvgjAfaQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz", + "integrity": "sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.1.tgz", - "integrity": "sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.8.tgz", + "integrity": "sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-simple-access": "^7.22.5" + "@babel/helper-module-transforms": "^7.24.8", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-simple-access": "^7.24.7" } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.1.tgz", - "integrity": "sha512-mqQ3Zh9vFO1Tpmlt8QPnbwGHzNz3lpNEMxQb1kAemn/erstyqw1r9KeOlOfo3y6xAnFEcOv2tSyrXfmMk+/YZA==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.0.tgz", + "integrity": "sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw==", "dev": true, "requires": { - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-validator-identifier": "^7.22.20" + "@babel/helper-module-transforms": "^7.25.0", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", + "@babel/traverse": "^7.25.0" } }, "@babel/plugin-transform-modules-umd": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.1.tgz", - "integrity": "sha512-tuA3lpPj+5ITfcCluy6nWonSL7RvaG0AOTeAuvXqEKS34lnLzXpDb0dcP6K8jD0zWZFNDVly90AGFJPnm4fOYg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz", + "integrity": "sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" } }, "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", - "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz", + "integrity": "sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" } }, "@babel/plugin-transform-new-target": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.1.tgz", - "integrity": "sha512-/rurytBM34hYy0HKZQyA0nHbQgQNFm4Q/BOc9Hflxi2X3twRof7NaE5W46j4kQitm7SvACVRXsa6N/tSZxvPug==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz", + "integrity": "sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.7" } }, "@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.1.tgz", - "integrity": "sha512-iQ+caew8wRrhCikO5DrUYx0mrmdhkaELgFa+7baMcVuhxIkN7oxt06CZ51D65ugIb1UWRQ8oQe+HXAVM6qHFjw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz", + "integrity": "sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" } }, "@babel/plugin-transform-numeric-separator": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.1.tgz", - "integrity": "sha512-7GAsGlK4cNL2OExJH1DzmDeKnRv/LXq0eLUSvudrehVA5Rgg4bIrqEUW29FbKMBRT0ztSqisv7kjP+XIC4ZMNw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz", + "integrity": "sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-numeric-separator": "^7.10.4" } }, "@babel/plugin-transform-object-rest-spread": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.5.tgz", - "integrity": "sha512-7EauQHszLGM3ay7a161tTQH7fj+3vVM/gThlz5HpFtnygTxjrlvoeq7MPVA1Vy9Q555OB8SnAOsMkLShNkkrHA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz", + "integrity": "sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==", "dev": true, "requires": { - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-plugin-utils": "^7.24.5", + "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.24.5" + "@babel/plugin-transform-parameters": "^7.24.7" } }, "@babel/plugin-transform-object-super": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.1.tgz", - "integrity": "sha512-oKJqR3TeI5hSLRxudMjFQ9re9fBVUU0GICqM3J1mi8MqlhVr6hC/ZN4ttAyMuQR6EZZIY6h/exe5swqGNNIkWQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz", + "integrity": "sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-replace-supers": "^7.24.1" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-replace-supers": "^7.24.7" } }, "@babel/plugin-transform-optional-catch-binding": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.1.tgz", - "integrity": "sha512-oBTH7oURV4Y+3EUrf6cWn1OHio3qG/PVwO5J03iSJmBg6m2EhKjkAu/xuaXaYwWW9miYtvbWv4LNf0AmR43LUA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz", + "integrity": "sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" } }, "@babel/plugin-transform-optional-chaining": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.5.tgz", - "integrity": "sha512-xWCkmwKT+ihmA6l7SSTpk8e4qQl/274iNbSKRRS8mpqFR32ksy36+a+LWY8OXCCEefF8WFlnOHVsaDI2231wBg==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.8.tgz", + "integrity": "sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", "@babel/plugin-syntax-optional-chaining": "^7.8.3" } }, "@babel/plugin-transform-parameters": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.5.tgz", - "integrity": "sha512-9Co00MqZ2aoky+4j2jhofErthm6QVLKbpQrvz20c3CH9KQCLHyNB+t2ya4/UrRpQGR+Wrwjg9foopoeSdnHOkA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz", + "integrity": "sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.5" + "@babel/helper-plugin-utils": "^7.24.7" } }, "@babel/plugin-transform-private-methods": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.1.tgz", - "integrity": "sha512-tGvisebwBO5em4PaYNqt4fkw56K2VALsAbAakY0FjTYqJp7gfdrgr7YX76Or8/cpik0W6+tj3rZ0uHU9Oil4tw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.7.tgz", + "integrity": "sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.24.1", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" } }, "@babel/plugin-transform-private-property-in-object": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.5.tgz", - "integrity": "sha512-JM4MHZqnWR04jPMujQDTBVRnqxpLLpx2tkn7iPn+Hmsc0Gnb79yvRWOkvqFOx3Z7P7VxiRIR22c4eGSNj87OBQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz", + "integrity": "sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.24.5", - "@babel/helper-plugin-utils": "^7.24.5", + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" } }, "@babel/plugin-transform-property-literals": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.1.tgz", - "integrity": "sha512-LetvD7CrHmEx0G442gOomRr66d7q8HzzGGr4PMHGr+5YIm6++Yke+jxj246rpvsbyhJwCLxcTn6zW1P1BSenqA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz", + "integrity": "sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.7" } }, "@babel/plugin-transform-react-display-name": { @@ -29454,22 +29452,22 @@ } }, "@babel/plugin-transform-regenerator": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.1.tgz", - "integrity": "sha512-sJwZBCzIBE4t+5Q4IGLaaun5ExVMRY0lYwos/jNecjMrVCygCdph3IKv0tkP5Fc87e/1+bebAmEAGBfnRD+cnw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz", + "integrity": "sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-plugin-utils": "^7.24.7", "regenerator-transform": "^0.15.2" } }, "@babel/plugin-transform-reserved-words": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.1.tgz", - "integrity": "sha512-JAclqStUfIwKN15HrsQADFgeZt+wexNQ0uLhuqvqAUFoqPMjEcFCYZBhq0LUdz6dZK/mD+rErhW71fbx8RYElg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz", + "integrity": "sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.7" } }, "@babel/plugin-transform-runtime": { @@ -29495,49 +29493,49 @@ } }, "@babel/plugin-transform-shorthand-properties": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.1.tgz", - "integrity": "sha512-LyjVB1nsJ6gTTUKRjRWx9C1s9hE7dLfP/knKdrfeH9UPtAGjYGgxIbFfx7xyLIEWs7Xe1Gnf8EWiUqfjLhInZA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz", + "integrity": "sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.7" } }, "@babel/plugin-transform-spread": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.1.tgz", - "integrity": "sha512-KjmcIM+fxgY+KxPVbjelJC6hrH1CgtPmTvdXAfn3/a9CnWGSTY7nH4zm5+cjmWJybdcPSsD0++QssDsjcpe47g==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz", + "integrity": "sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" } }, "@babel/plugin-transform-sticky-regex": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.1.tgz", - "integrity": "sha512-9v0f1bRXgPVcPrngOQvLXeGNNVLc8UjMVfebo9ka0WF3/7+aVUHmaJVT3sa0XCzEFioPfPHZiOcYG9qOsH63cw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz", + "integrity": "sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.7" } }, "@babel/plugin-transform-template-literals": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.1.tgz", - "integrity": "sha512-WRkhROsNzriarqECASCNu/nojeXCDTE/F2HmRgOzi7NGvyfYGq1NEjKBK3ckLfRgGc6/lPAqP0vDOSw3YtG34g==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz", + "integrity": "sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.7" } }, "@babel/plugin-transform-typeof-symbol": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.5.tgz", - "integrity": "sha512-UTGnhYVZtTAjdwOTzT+sCyXmTn8AhaxOS/MjG9REclZ6ULHWF9KoCZur0HSGU7hk8PdBFKKbYe6+gqdXWz84Jg==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.8.tgz", + "integrity": "sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.5" + "@babel/helper-plugin-utils": "^7.24.8" } }, "@babel/plugin-transform-typescript": { @@ -29553,66 +29551,67 @@ } }, "@babel/plugin-transform-unicode-escapes": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.1.tgz", - "integrity": "sha512-RlkVIcWT4TLI96zM660S877E7beKlQw7Ig+wqkKBiWfj0zH5Q4h50q6er4wzZKRNSYpfo6ILJ+hrJAGSX2qcNw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz", + "integrity": "sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.7" } }, "@babel/plugin-transform-unicode-property-regex": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.1.tgz", - "integrity": "sha512-Ss4VvlfYV5huWApFsF8/Sq0oXnGO+jB+rijFEFugTd3cwSObUSnUi88djgR5528Csl0uKlrI331kRqe56Ov2Ng==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz", + "integrity": "sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" } }, "@babel/plugin-transform-unicode-regex": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.1.tgz", - "integrity": "sha512-2A/94wgZgxfTsiLaQ2E36XAOdcZmGAaEEgVmxQWwZXWkGhvoHbaqXcKnU8zny4ycpu3vNqg0L/PcCiYtHtA13g==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz", + "integrity": "sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" } }, "@babel/plugin-transform-unicode-sets-regex": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.1.tgz", - "integrity": "sha512-fqj4WuzzS+ukpgerpAoOnMfQXwUHFxXUZUE84oL2Kao2N8uSlvcpnAidKASgsNgzZHBsHWvcm8s9FPWUhAb8fA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.7.tgz", + "integrity": "sha512-2G8aAvF4wy1w/AGZkemprdGMRg5o6zPNhbHVImRz3lss55TYCBd6xStN19rt8XJHq20sqV0JbyWjOWwQRwV/wg==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" } }, "@babel/preset-env": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.5.tgz", - "integrity": "sha512-UGK2ifKtcC8i5AI4cH+sbLLuLc2ktYSFJgBAXorKAsHUZmrQ1q6aQ6i3BvU24wWs2AAKqQB6kq3N9V9Gw1HiMQ==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.24.4", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-plugin-utils": "^7.24.5", - "@babel/helper-validator-option": "^7.23.5", - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.24.5", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.24.1", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.1", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.24.1", + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.3.tgz", + "integrity": "sha512-QsYW7UeAaXvLPX9tdVliMJE7MD7M6MLYVTovRTIwhoYQVFHR1rM4wO8wqAezYi3/BpSD+NzVCZ69R6smWiIi8g==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.25.2", + "@babel/helper-compilation-targets": "^7.25.2", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-validator-option": "^7.24.8", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.3", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.0", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.0", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.7", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.0", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-syntax-class-static-block": "^7.14.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.24.1", - "@babel/plugin-syntax-import-attributes": "^7.24.1", + "@babel/plugin-syntax-import-assertions": "^7.24.7", + "@babel/plugin-syntax-import-attributes": "^7.24.7", "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", @@ -29624,59 +29623,60 @@ "@babel/plugin-syntax-private-property-in-object": "^7.14.5", "@babel/plugin-syntax-top-level-await": "^7.14.5", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.24.1", - "@babel/plugin-transform-async-generator-functions": "^7.24.3", - "@babel/plugin-transform-async-to-generator": "^7.24.1", - "@babel/plugin-transform-block-scoped-functions": "^7.24.1", - "@babel/plugin-transform-block-scoping": "^7.24.5", - "@babel/plugin-transform-class-properties": "^7.24.1", - "@babel/plugin-transform-class-static-block": "^7.24.4", - "@babel/plugin-transform-classes": "^7.24.5", - "@babel/plugin-transform-computed-properties": "^7.24.1", - "@babel/plugin-transform-destructuring": "^7.24.5", - "@babel/plugin-transform-dotall-regex": "^7.24.1", - "@babel/plugin-transform-duplicate-keys": "^7.24.1", - "@babel/plugin-transform-dynamic-import": "^7.24.1", - "@babel/plugin-transform-exponentiation-operator": "^7.24.1", - "@babel/plugin-transform-export-namespace-from": "^7.24.1", - "@babel/plugin-transform-for-of": "^7.24.1", - "@babel/plugin-transform-function-name": "^7.24.1", - "@babel/plugin-transform-json-strings": "^7.24.1", - "@babel/plugin-transform-literals": "^7.24.1", - "@babel/plugin-transform-logical-assignment-operators": "^7.24.1", - "@babel/plugin-transform-member-expression-literals": "^7.24.1", - "@babel/plugin-transform-modules-amd": "^7.24.1", - "@babel/plugin-transform-modules-commonjs": "^7.24.1", - "@babel/plugin-transform-modules-systemjs": "^7.24.1", - "@babel/plugin-transform-modules-umd": "^7.24.1", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", - "@babel/plugin-transform-new-target": "^7.24.1", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.1", - "@babel/plugin-transform-numeric-separator": "^7.24.1", - "@babel/plugin-transform-object-rest-spread": "^7.24.5", - "@babel/plugin-transform-object-super": "^7.24.1", - "@babel/plugin-transform-optional-catch-binding": "^7.24.1", - "@babel/plugin-transform-optional-chaining": "^7.24.5", - "@babel/plugin-transform-parameters": "^7.24.5", - "@babel/plugin-transform-private-methods": "^7.24.1", - "@babel/plugin-transform-private-property-in-object": "^7.24.5", - "@babel/plugin-transform-property-literals": "^7.24.1", - "@babel/plugin-transform-regenerator": "^7.24.1", - "@babel/plugin-transform-reserved-words": "^7.24.1", - "@babel/plugin-transform-shorthand-properties": "^7.24.1", - "@babel/plugin-transform-spread": "^7.24.1", - "@babel/plugin-transform-sticky-regex": "^7.24.1", - "@babel/plugin-transform-template-literals": "^7.24.1", - "@babel/plugin-transform-typeof-symbol": "^7.24.5", - "@babel/plugin-transform-unicode-escapes": "^7.24.1", - "@babel/plugin-transform-unicode-property-regex": "^7.24.1", - "@babel/plugin-transform-unicode-regex": "^7.24.1", - "@babel/plugin-transform-unicode-sets-regex": "^7.24.1", + "@babel/plugin-transform-arrow-functions": "^7.24.7", + "@babel/plugin-transform-async-generator-functions": "^7.25.0", + "@babel/plugin-transform-async-to-generator": "^7.24.7", + "@babel/plugin-transform-block-scoped-functions": "^7.24.7", + "@babel/plugin-transform-block-scoping": "^7.25.0", + "@babel/plugin-transform-class-properties": "^7.24.7", + "@babel/plugin-transform-class-static-block": "^7.24.7", + "@babel/plugin-transform-classes": "^7.25.0", + "@babel/plugin-transform-computed-properties": "^7.24.7", + "@babel/plugin-transform-destructuring": "^7.24.8", + "@babel/plugin-transform-dotall-regex": "^7.24.7", + "@babel/plugin-transform-duplicate-keys": "^7.24.7", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.0", + "@babel/plugin-transform-dynamic-import": "^7.24.7", + "@babel/plugin-transform-exponentiation-operator": "^7.24.7", + "@babel/plugin-transform-export-namespace-from": "^7.24.7", + "@babel/plugin-transform-for-of": "^7.24.7", + "@babel/plugin-transform-function-name": "^7.25.1", + "@babel/plugin-transform-json-strings": "^7.24.7", + "@babel/plugin-transform-literals": "^7.25.2", + "@babel/plugin-transform-logical-assignment-operators": "^7.24.7", + "@babel/plugin-transform-member-expression-literals": "^7.24.7", + "@babel/plugin-transform-modules-amd": "^7.24.7", + "@babel/plugin-transform-modules-commonjs": "^7.24.8", + "@babel/plugin-transform-modules-systemjs": "^7.25.0", + "@babel/plugin-transform-modules-umd": "^7.24.7", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7", + "@babel/plugin-transform-new-target": "^7.24.7", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7", + "@babel/plugin-transform-numeric-separator": "^7.24.7", + "@babel/plugin-transform-object-rest-spread": "^7.24.7", + "@babel/plugin-transform-object-super": "^7.24.7", + "@babel/plugin-transform-optional-catch-binding": "^7.24.7", + "@babel/plugin-transform-optional-chaining": "^7.24.8", + "@babel/plugin-transform-parameters": "^7.24.7", + "@babel/plugin-transform-private-methods": "^7.24.7", + "@babel/plugin-transform-private-property-in-object": "^7.24.7", + "@babel/plugin-transform-property-literals": "^7.24.7", + "@babel/plugin-transform-regenerator": "^7.24.7", + "@babel/plugin-transform-reserved-words": "^7.24.7", + "@babel/plugin-transform-shorthand-properties": "^7.24.7", + "@babel/plugin-transform-spread": "^7.24.7", + "@babel/plugin-transform-sticky-regex": "^7.24.7", + "@babel/plugin-transform-template-literals": "^7.24.7", + "@babel/plugin-transform-typeof-symbol": "^7.24.8", + "@babel/plugin-transform-unicode-escapes": "^7.24.7", + "@babel/plugin-transform-unicode-property-regex": "^7.24.7", + "@babel/plugin-transform-unicode-regex": "^7.24.7", + "@babel/plugin-transform-unicode-sets-regex": "^7.24.7", "@babel/preset-modules": "0.1.6-no-external-plugins", "babel-plugin-polyfill-corejs2": "^0.4.10", "babel-plugin-polyfill-corejs3": "^0.10.4", "babel-plugin-polyfill-regenerator": "^0.6.1", - "core-js-compat": "^3.31.0", + "core-js-compat": "^3.37.1", "semver": "^6.3.1" }, "dependencies": { @@ -29773,38 +29773,35 @@ } }, "@babel/template": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.7.tgz", - "integrity": "sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==", + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", + "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", "requires": { "@babel/code-frame": "^7.24.7", - "@babel/parser": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/parser": "^7.25.0", + "@babel/types": "^7.25.0" } }, "@babel/traverse": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.7.tgz", - "integrity": "sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==", + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.3.tgz", + "integrity": "sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==", "requires": { "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.24.7", - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-function-name": "^7.24.7", - "@babel/helper-hoist-variables": "^7.24.7", - "@babel/helper-split-export-declaration": "^7.24.7", - "@babel/parser": "^7.24.7", - "@babel/types": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/parser": "^7.25.3", + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.2", "debug": "^4.3.1", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.7.tgz", - "integrity": "sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==", + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz", + "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==", "requires": { - "@babel/helper-string-parser": "^7.24.7", + "@babel/helper-string-parser": "^7.24.8", "@babel/helper-validator-identifier": "^7.24.7", "to-fast-properties": "^2.0.0" } @@ -34015,14 +34012,14 @@ "dev": true }, "browserslist": { - "version": "4.23.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", - "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", + "version": "4.23.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", + "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", "requires": { - "caniuse-lite": "^1.0.30001587", - "electron-to-chromium": "^1.4.668", - "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.13" + "caniuse-lite": "^1.0.30001646", + "electron-to-chromium": "^1.5.4", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.0" } }, "bs-logger": { @@ -34136,9 +34133,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001615", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001615.tgz", - "integrity": "sha512-1IpazM5G3r38meiae0bHRnPhz+CBQ3ZLqbQMtrg+AsTPKAXgW38JNsXkyZ+v8waCsDmPq87lmfun5Q2AGysNEQ==" + "version": "1.0.30001651", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001651.tgz", + "integrity": "sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg==" }, "canvas": { "version": "2.11.2", @@ -34522,12 +34519,12 @@ "dev": true }, "core-js-compat": { - "version": "3.37.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.0.tgz", - "integrity": "sha512-vYq4L+T8aS5UuFg4UwDhc7YNRWVeVZwltad9C/jV3R2LgVOpS9BDr7l/WL6BN0dbV3k1XejPTHqqEzJgsa0frA==", + "version": "3.38.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.0.tgz", + "integrity": "sha512-75LAicdLa4OJVwFxFbQR3NdnZjNgX6ILpVcVzcC4T2smerB5lELMrJQQQoWV6TiuC/vlaFqgU2tKQx9w5s0e0A==", "dev": true, "requires": { - "browserslist": "^4.23.0" + "browserslist": "^4.23.3" } }, "core-util-is": { @@ -35306,9 +35303,9 @@ } }, "electron-to-chromium": { - "version": "1.4.754", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.754.tgz", - "integrity": "sha512-7Kr5jUdns5rL/M9wFFmMZAgFDuL2YOnanFH4OI4iFzUqyh3XOL7nAGbSlSMZdzKMIyyTpNSbqZsWG9odwLeKvA==" + "version": "1.5.11", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.11.tgz", + "integrity": "sha512-R1CccCDYqndR25CaXFd6hp/u9RaaMcftMkphmvuepXr5b1vfLkRml6aWVeBhXJ7rbevHkKEMJtz8XqPf7ffmew==" }, "emittery": { "version": "0.7.2", @@ -35666,7 +35663,9 @@ } }, "escalade": { - "version": "3.1.1" + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==" }, "escape-html": { "version": "1.0.3" @@ -43491,9 +43490,9 @@ } }, "node-releases": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==" + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==" }, "nodemon": { "version": "3.1.4", @@ -43882,7 +43881,9 @@ "dev": true }, "picocolors": { - "version": "1.0.0" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==" }, "picomatch": { "version": "2.3.1" @@ -46722,12 +46723,12 @@ } }, "update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "escalade": "^3.1.2", + "picocolors": "^1.0.1" } }, "uri-js": { diff --git a/package.json b/package.json index e781f96de..d9c996a62 100644 --- a/package.json +++ b/package.json @@ -58,7 +58,7 @@ }, "devDependencies": { "@babel/eslint-parser": "^7.22.6", - "@babel/preset-env": "^7.24.5", + "@babel/preset-env": "^7.25.3", "@babel/preset-react": "^7.24.7", "@types/create-hash": "^1.2.2", "@types/enzyme": "^3.10.12", From 3b83056236d06e6f123e92e22e9acb83b1328648 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 Aug 2024 13:47:43 +0000 Subject: [PATCH 32/79] chore(deps): bump d3 from 7.8.5 to 7.9.0 (#1025) --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index ff556be9c..d4774ed93 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,7 +22,7 @@ "bunyan": "^1.8.15", "classnames": "^2.5.1", "compression": "^1.7.4", - "d3": "^7.8.5", + "d3": "^7.9.0", "d3-geo": "^3.1.0", "d3-hexbin": "^0.2.2", "d3-scale": "^4.0.2", @@ -9425,9 +9425,9 @@ } }, "node_modules/d3": { - "version": "7.8.5", - "resolved": "https://registry.npmjs.org/d3/-/d3-7.8.5.tgz", - "integrity": "sha512-JgoahDG51ncUfJu6wX/1vWQEqOflgXyl4MaHqlcSruTez7yhaRKR9i8VjjcQGeS2en/jnFivXuaIMnseMMt0XA==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/d3/-/d3-7.9.0.tgz", + "integrity": "sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==", "dependencies": { "d3-array": "3", "d3-axis": "3", @@ -34621,9 +34621,9 @@ } }, "d3": { - "version": "7.8.5", - "resolved": "https://registry.npmjs.org/d3/-/d3-7.8.5.tgz", - "integrity": "sha512-JgoahDG51ncUfJu6wX/1vWQEqOflgXyl4MaHqlcSruTez7yhaRKR9i8VjjcQGeS2en/jnFivXuaIMnseMMt0XA==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/d3/-/d3-7.9.0.tgz", + "integrity": "sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==", "requires": { "d3-array": "3", "d3-axis": "3", diff --git a/package.json b/package.json index d9c996a62..166d2dd5a 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "bunyan": "^1.8.15", "classnames": "^2.5.1", "compression": "^1.7.4", - "d3": "^7.8.5", + "d3": "^7.9.0", "d3-geo": "^3.1.0", "d3-hexbin": "^0.2.2", "d3-scale": "^4.0.2", From 1e808ad9187e27207a3f42b1b63ea00c05a01acd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 20 Aug 2024 20:42:18 +0000 Subject: [PATCH 33/79] chore(deps): bump react-router-dom from 6.24.0 to 6.26.1 (#1031) --- package-lock.json | 50 +++++++++++++++++++++++------------------------ package.json | 2 +- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/package-lock.json b/package-lock.json index d4774ed93..958b176c2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -45,7 +45,7 @@ "react-query": "^3.39.3", "react-redux": "^8.1.3", "react-router": "^6.12.1", - "react-router-dom": "^6.24.0", + "react-router-dom": "^6.26.1", "react18-json-view": "^0.2.7", "recharts": "^2.12.6", "redux": "^5.0.1", @@ -5472,9 +5472,9 @@ } }, "node_modules/@remix-run/router": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.17.0.tgz", - "integrity": "sha512-2D6XaHEVvkCn682XBnipbJjgZUU7xjLtA4dGJRBVUKpEaDYOZMENZoZjAOSb7qirxt5RupjzZxz4fK2FO+EFPw==", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.19.1.tgz", + "integrity": "sha512-S45oynt/WH19bHbIXjtli6QmwNYvaz+vtnubvNpNDvUOoA/OWh6j1OikIP3G+v5GHdxyC6EXoChG3HgYGEUfcg==", "engines": { "node": ">=14.0.0" } @@ -23507,11 +23507,11 @@ "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" }, "node_modules/react-router": { - "version": "6.24.0", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.24.0.tgz", - "integrity": "sha512-sQrgJ5bXk7vbcC4BxQxeNa5UmboFm35we1AFK0VvQaz9g0LzxEIuLOhHIoZ8rnu9BO21ishGeL9no1WB76W/eg==", + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.26.1.tgz", + "integrity": "sha512-kIwJveZNwp7teQRI5QmwWo39A5bXRyqpH0COKKmPnyD2vBvDwgFXSqDUYtt1h+FEyfnE8eXr7oe0MxRzVwCcvQ==", "dependencies": { - "@remix-run/router": "1.17.0" + "@remix-run/router": "1.19.1" }, "engines": { "node": ">=14.0.0" @@ -23521,12 +23521,12 @@ } }, "node_modules/react-router-dom": { - "version": "6.24.0", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.24.0.tgz", - "integrity": "sha512-960sKuau6/yEwS8e+NVEidYQb1hNjAYM327gjEyXlc6r3Skf2vtwuJ2l7lssdegD2YjoKG5l8MsVyeTDlVeY8g==", + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.26.1.tgz", + "integrity": "sha512-veut7m41S1fLql4pLhxeSW3jlqs+4MtjRLj0xvuCEXsxusJCbs6I8yn9BxzzDX2XDgafrccY6hwjmd/bL54tFw==", "dependencies": { - "@remix-run/router": "1.17.0", - "react-router": "6.24.0" + "@remix-run/router": "1.19.1", + "react-router": "6.26.1" }, "engines": { "node": ">=14.0.0" @@ -31894,9 +31894,9 @@ } }, "@remix-run/router": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.17.0.tgz", - "integrity": "sha512-2D6XaHEVvkCn682XBnipbJjgZUU7xjLtA4dGJRBVUKpEaDYOZMENZoZjAOSb7qirxt5RupjzZxz4fK2FO+EFPw==" + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.19.1.tgz", + "integrity": "sha512-S45oynt/WH19bHbIXjtli6QmwNYvaz+vtnubvNpNDvUOoA/OWh6j1OikIP3G+v5GHdxyC6EXoChG3HgYGEUfcg==" }, "@rollup/plugin-inject": { "version": "5.0.5", @@ -44256,20 +44256,20 @@ } }, "react-router": { - "version": "6.24.0", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.24.0.tgz", - "integrity": "sha512-sQrgJ5bXk7vbcC4BxQxeNa5UmboFm35we1AFK0VvQaz9g0LzxEIuLOhHIoZ8rnu9BO21ishGeL9no1WB76W/eg==", + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.26.1.tgz", + "integrity": "sha512-kIwJveZNwp7teQRI5QmwWo39A5bXRyqpH0COKKmPnyD2vBvDwgFXSqDUYtt1h+FEyfnE8eXr7oe0MxRzVwCcvQ==", "requires": { - "@remix-run/router": "1.17.0" + "@remix-run/router": "1.19.1" } }, "react-router-dom": { - "version": "6.24.0", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.24.0.tgz", - "integrity": "sha512-960sKuau6/yEwS8e+NVEidYQb1hNjAYM327gjEyXlc6r3Skf2vtwuJ2l7lssdegD2YjoKG5l8MsVyeTDlVeY8g==", + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.26.1.tgz", + "integrity": "sha512-veut7m41S1fLql4pLhxeSW3jlqs+4MtjRLj0xvuCEXsxusJCbs6I8yn9BxzzDX2XDgafrccY6hwjmd/bL54tFw==", "requires": { - "@remix-run/router": "1.17.0", - "react-router": "6.24.0" + "@remix-run/router": "1.19.1", + "react-router": "6.26.1" } }, "react-shallow-renderer": { diff --git a/package.json b/package.json index 166d2dd5a..dd3c0ee27 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "react-query": "^3.39.3", "react-redux": "^8.1.3", "react-router": "^6.12.1", - "react-router-dom": "^6.24.0", + "react-router-dom": "^6.26.1", "react18-json-view": "^0.2.7", "recharts": "^2.12.6", "redux": "^5.0.1", From 6dd21e510a5a5b2662f2f90ad4322aee7100bf84 Mon Sep 17 00:00:00 2001 From: pdp2121 <71317875+pdp2121@users.noreply.github.com> Date: Tue, 27 Aug 2024 11:46:11 -0400 Subject: [PATCH 34/79] fix: raw tab on transaction pages should show `tx` response from `rippled` (#1033) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## High Level Overview of Change <!-- Please include a summary/list of the changes. If too broad, please consider splitting into multiple PRs. --> Resolve https://github.com/ripple/explorer/issues/358 ### Type of Change <!-- Please check relevant options, delete irrelevant ones. --> - [x] Bug fix (non-breaking change which fixes an issue) - [ ] New feature (non-breaking change which adds functionality) - [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected) - [ ] Refactor (non-breaking change that only restructures code) - [ ] Tests (You added tests for code that already exists, or your new feature included in this PR) - [ ] Documentation Updates - [ ] Translation Updates - [ ] Release ## Before / After <!-- If just refactoring / back-end changes, this can be just an in-English description of the change at a technical level. If a UI change, screenshots should be included. --> ### Before  ### After  --- src/containers/App/test/App.test.jsx | 2 +- src/containers/Transactions/SimpleTab.tsx | 20 +++++++------- src/containers/Transactions/index.tsx | 26 +++++++++---------- .../Transactions/test/SimpleTab.test.tsx | 2 +- .../Transactions/test/Transaction.test.tsx | 2 +- .../UNLModify/test/UNLModifySimple.test.tsx | 2 +- src/rippled/transactions.js | 13 ++++++---- 7 files changed, 35 insertions(+), 32 deletions(-) diff --git a/src/containers/App/test/App.test.jsx b/src/containers/App/test/App.test.jsx index 29347e8c0..886d08a59 100644 --- a/src/containers/App/test/App.test.jsx +++ b/src/containers/App/test/App.test.jsx @@ -43,7 +43,7 @@ jest.mock('../../../rippled', () => { ...originalModule, getTransaction: () => Promise.resolve({ - raw: formatTransaction({ + processed: formatTransaction({ TransactionType: 'OfferCreate', meta: { TransactionResult: 'tecKILLED', diff --git a/src/containers/Transactions/SimpleTab.tsx b/src/containers/Transactions/SimpleTab.tsx index e183bb6d8..6f22553e3 100644 --- a/src/containers/Transactions/SimpleTab.tsx +++ b/src/containers/Transactions/SimpleTab.tsx @@ -72,13 +72,13 @@ export const SimpleTab: FC<{ data: any; width: number }> = ({ </> ) - const { raw } = data + const { processed } = data const numberOptions = { ...CURRENCY_OPTIONS, currency: 'XRP' } - const time = localizeDate(new Date(raw.date), language, DATE_OPTIONS) - const ledgerIndex = raw.ledger_index - const fee = raw.tx.Fee + const time = localizeDate(new Date(processed.date), language, DATE_OPTIONS) + const ledgerIndex = processed.ledger_index + const fee = processed.tx.Fee ? localizeNumber( - Number.parseFloat(raw.tx.Fee) / XRP_BASE, + Number.parseFloat(processed.tx.Fee) / XRP_BASE, language, numberOptions, ) @@ -88,16 +88,16 @@ export const SimpleTab: FC<{ data: any; width: number }> = ({ time, ledgerIndex, fee, - raw.tx.Account, - raw.tx.Sequence, - raw.tx.TicketSequence, - !!raw.tx.EmitDetails, + processed.tx.Account, + processed.tx.Sequence, + processed.tx.TicketSequence, + !!processed.tx.EmitDetails, ) return ( <div className="simple-body simple-body-tx"> <div className="rows"> - <Simple type={raw.tx.TransactionType} data={data.summary} /> + <Simple type={processed.tx.TransactionType} data={data.summary} /> {width < BREAKPOINTS.landscape && rowIndex} </div> {width >= BREAKPOINTS.landscape && ( diff --git a/src/containers/Transactions/index.tsx b/src/containers/Transactions/index.tsx index b5de8319f..fa34e0e4f 100644 --- a/src/containers/Transactions/index.tsx +++ b/src/containers/Transactions/index.tsx @@ -75,10 +75,10 @@ export const Transaction = () => { const { width } = useWindowSize() useEffect(() => { - if (!data?.raw) return + if (!data?.processed) return - const type = data?.raw.tx.TransactionType - const status = data?.raw.meta.TransactionResult + const type = data?.processed.tx.TransactionType + const status = data?.processed.meta.TransactionResult const transactionProperties: AnalyticsFields = { transaction_action: getAction(type), @@ -91,22 +91,22 @@ export const Transaction = () => { } trackScreenLoaded(transactionProperties) - }, [identifier, data?.raw, tab, trackScreenLoaded]) + }, [identifier, data?.processed, tab, trackScreenLoaded]) function renderSummary() { - const type = data?.raw.tx.TransactionType + const type = data?.processed.tx.TransactionType return ( <div className="summary"> <div className="type">{type}</div> - <TxStatus status={data?.raw.meta.TransactionResult} /> - <div className="txid" title={data?.raw.hash}> + <TxStatus status={data?.processed.meta.TransactionResult} /> + <div className="txid" title={data?.processed.hash}> <div className="title">{t('hash')}: </div> - {data?.raw.hash} + {data?.processed.hash} </div> - {data?.raw.tx.ctid && ( - <div className="txid" title={data.raw.tx.ctid}> + {data?.processed.tx.ctid && ( + <div className="txid" title={data.processed.tx.ctid}> <div className="title">CTID: </div> - {data.raw.tx.ctid} + {data.processed.tx.ctid} </div> )} </div> @@ -126,7 +126,7 @@ export const Transaction = () => { switch (tab) { case 'detailed': - body = <DetailTab data={data.raw} /> + body = <DetailTab data={data.processed} /> break case 'raw': body = <JsonView data={data.raw} /> @@ -149,7 +149,7 @@ export const Transaction = () => { if (isError) { const message = getErrorMessage(error) body = <NoMatch title={message.title} hints={message.hints} /> - } else if (data?.raw && data?.raw.hash) { + } else if (data?.processed && data?.processed.hash) { body = renderTransaction() } else if (!identifier) { body = ( diff --git a/src/containers/Transactions/test/SimpleTab.test.tsx b/src/containers/Transactions/test/SimpleTab.test.tsx index 5b983ebd6..8fe7794eb 100644 --- a/src/containers/Transactions/test/SimpleTab.test.tsx +++ b/src/containers/Transactions/test/SimpleTab.test.tsx @@ -15,7 +15,7 @@ describe('SimpleTab container', () => { <Router> <I18nextProvider i18n={i18n}> <SimpleTab - data={{ raw: tx, summary: summarize(tx, true).details }} + data={{ processed: tx, summary: summarize(tx, true).details }} width={width} /> </I18nextProvider> diff --git a/src/containers/Transactions/test/Transaction.test.tsx b/src/containers/Transactions/test/Transaction.test.tsx index 774d3da56..e4b471e95 100644 --- a/src/containers/Transactions/test/Transaction.test.tsx +++ b/src/containers/Transactions/test/Transaction.test.tsx @@ -104,7 +104,7 @@ describe('Transaction container', () => { beforeEach(async () => { const transaction = { - raw: mockTransaction, + processed: mockTransaction, summary: mockTransactionSummary, } diff --git a/src/containers/shared/components/Transaction/UNLModify/test/UNLModifySimple.test.tsx b/src/containers/shared/components/Transaction/UNLModify/test/UNLModifySimple.test.tsx index f3558c8ef..89cab8f69 100644 --- a/src/containers/shared/components/Transaction/UNLModify/test/UNLModifySimple.test.tsx +++ b/src/containers/shared/components/Transaction/UNLModify/test/UNLModifySimple.test.tsx @@ -44,7 +44,7 @@ describe('UNLModify: Simple', () => { <QuickHarness i18n={i18n}> <SimpleTab data={{ - raw: mockUNLModifyDisable, + processed: mockUNLModifyDisable, summary: summarizeTransaction(mockUNLModifyDisable, true).details, }} width={800} diff --git a/src/rippled/transactions.js b/src/rippled/transactions.js index ed2e6835b..0dc60f1a6 100644 --- a/src/rippled/transactions.js +++ b/src/rippled/transactions.js @@ -8,11 +8,14 @@ const log = logger({ name: 'transactions' }) const getTransaction = (transactionId, rippledSocket) => { log.info(`get tx: ${transactionId}`) return getRippledTransaction(rippledSocket, transactionId) - .then((response) => formatTransaction(response)) - .then((data) => ({ - summary: summarizeTransaction(data, true).details, - raw: data, - })) + .then((data) => { + const formattedTransaction = formatTransaction(data) + return { + summary: summarizeTransaction(formattedTransaction, true).details, + processed: formattedTransaction, + raw: data, + } + }) .catch((error) => { log.error(error.toString()) throw error From a51c1538ce8796705ab237350197065aff834ae8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 3 Sep 2024 22:36:40 +0000 Subject: [PATCH 35/79] chore(deps-dev): bump eslint-plugin-jsx-a11y from 6.7.1 to 6.9.0 (#1040) --- package-lock.json | 169 +++++++++++++++++++++++++++------------------- package.json | 2 +- 2 files changed, 99 insertions(+), 72 deletions(-) diff --git a/package-lock.json b/package-lock.json index 958b176c2..77ad86490 100644 --- a/package-lock.json +++ b/package-lock.json @@ -85,7 +85,7 @@ "eslint-config-react-app": "^7.0.1", "eslint-plugin-flowtype": "^8.0.3", "eslint-plugin-import": "^2.29.1", - "eslint-plugin-jsx-a11y": "^6.7.1", + "eslint-plugin-jsx-a11y": "^6.9.0", "eslint-plugin-prettier": "^5.1.3", "eslint-plugin-react": "^7.34.2", "eslint-plugin-react-hooks": "^4.6.0", @@ -7421,9 +7421,10 @@ } }, "node_modules/ast-types-flow": { - "version": "0.0.7", - "dev": true, - "license": "ISC" + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", + "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", + "dev": true }, "node_modules/astral-regex": { "version": "2.0.0", @@ -7517,9 +7518,9 @@ "license": "MIT" }, "node_modules/axe-core": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.2.tgz", - "integrity": "sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g==", + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.0.tgz", + "integrity": "sha512-Mr2ZakwQ7XUAjp7pAwQWRhhK8mQQ6JAaNWSjmjxil0R8BPioMtQsTLOolGYkji1rcL++3dCqZA3zWqpT+9Ew6g==", "dev": true, "engines": { "node": ">=4" @@ -11354,27 +11355,27 @@ } }, "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz", - "integrity": "sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==", + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.9.0.tgz", + "integrity": "sha512-nOFOCaJG2pYqORjK19lqPqxMO/JpvdCZdPtNdxY3kvom3jTvkAbOvQvD8wuD0G8BYR0IGAGYDlzqWJOh/ybn2g==", "dev": true, "dependencies": { - "@babel/runtime": "^7.20.7", - "aria-query": "^5.1.3", - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "ast-types-flow": "^0.0.7", - "axe-core": "^4.6.2", - "axobject-query": "^3.1.1", + "aria-query": "~5.1.3", + "array-includes": "^3.1.8", + "array.prototype.flatmap": "^1.3.2", + "ast-types-flow": "^0.0.8", + "axe-core": "^4.9.1", + "axobject-query": "~3.1.1", "damerau-levenshtein": "^1.0.8", "emoji-regex": "^9.2.2", - "has": "^1.0.3", - "jsx-ast-utils": "^3.3.3", - "language-tags": "=1.0.5", + "es-iterator-helpers": "^1.0.19", + "hasown": "^2.0.2", + "jsx-ast-utils": "^3.3.5", + "language-tags": "^1.0.9", "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "semver": "^6.3.0" + "object.fromentries": "^2.0.8", + "safe-regex-test": "^1.0.3", + "string.prototype.includes": "^2.0.0" }, "engines": { "node": ">=4.0" @@ -11388,14 +11389,6 @@ "dev": true, "license": "MIT" }, - "node_modules/eslint-plugin-jsx-a11y/node_modules/semver": { - "version": "6.3.0", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/eslint-plugin-prettier": { "version": "5.1.3", "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz", @@ -20685,12 +20678,15 @@ } }, "node_modules/jsx-ast-utils": { - "version": "3.3.3", + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", "dev": true, - "license": "MIT", "dependencies": { - "array-includes": "^3.1.5", - "object.assign": "^4.1.3" + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" }, "engines": { "node": ">=4.0" @@ -20748,16 +20744,21 @@ "dev": true }, "node_modules/language-subtag-registry": { - "version": "0.3.21", - "dev": true, - "license": "ODC-By-1.0" + "version": "0.3.23", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", + "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", + "dev": true }, "node_modules/language-tags": { - "version": "1.0.5", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", + "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", "dev": true, - "license": "MIT", "dependencies": { - "language-subtag-registry": "~0.3.2" + "language-subtag-registry": "^0.3.20" + }, + "engines": { + "node": ">=0.10" } }, "node_modules/left-pad": { @@ -25283,6 +25284,16 @@ "node": ">=0.10.0" } }, + "node_modules/string.prototype.includes": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.0.tgz", + "integrity": "sha512-E34CkBgyeqNDcrbU76cDjL5JLcVrtSdYq0MEh/B10r17pRP4ciHLwTgnuLV8Ay6cgEMLkcBkFCKyFZ43YldYzg==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, "node_modules/string.prototype.matchall": { "version": "4.0.11", "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", @@ -33226,7 +33237,9 @@ "dev": true }, "ast-types-flow": { - "version": "0.0.7", + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", + "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", "dev": true }, "astral-regex": { @@ -33274,9 +33287,9 @@ "dev": true }, "axe-core": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.2.tgz", - "integrity": "sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g==", + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.0.tgz", + "integrity": "sha512-Mr2ZakwQ7XUAjp7pAwQWRhhK8mQQ6JAaNWSjmjxil0R8BPioMtQsTLOolGYkji1rcL++3dCqZA3zWqpT+9Ew6g==", "dev": true }, "axios": { @@ -36215,36 +36228,32 @@ } }, "eslint-plugin-jsx-a11y": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz", - "integrity": "sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==", + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.9.0.tgz", + "integrity": "sha512-nOFOCaJG2pYqORjK19lqPqxMO/JpvdCZdPtNdxY3kvom3jTvkAbOvQvD8wuD0G8BYR0IGAGYDlzqWJOh/ybn2g==", "dev": true, "requires": { - "@babel/runtime": "^7.20.7", - "aria-query": "^5.1.3", - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "ast-types-flow": "^0.0.7", - "axe-core": "^4.6.2", - "axobject-query": "^3.1.1", + "aria-query": "~5.1.3", + "array-includes": "^3.1.8", + "array.prototype.flatmap": "^1.3.2", + "ast-types-flow": "^0.0.8", + "axe-core": "^4.9.1", + "axobject-query": "~3.1.1", "damerau-levenshtein": "^1.0.8", "emoji-regex": "^9.2.2", - "has": "^1.0.3", - "jsx-ast-utils": "^3.3.3", - "language-tags": "=1.0.5", + "es-iterator-helpers": "^1.0.19", + "hasown": "^2.0.2", + "jsx-ast-utils": "^3.3.5", + "language-tags": "^1.0.9", "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "semver": "^6.3.0" + "object.fromentries": "^2.0.8", + "safe-regex-test": "^1.0.3", + "string.prototype.includes": "^2.0.0" }, "dependencies": { "emoji-regex": { "version": "9.2.2", "dev": true - }, - "semver": { - "version": "6.3.0", - "dev": true } } }, @@ -42421,11 +42430,15 @@ } }, "jsx-ast-utils": { - "version": "3.3.3", + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", "dev": true, "requires": { - "array-includes": "^3.1.5", - "object.assign": "^4.1.3" + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" } }, "jwa": { @@ -42472,14 +42485,18 @@ "dev": true }, "language-subtag-registry": { - "version": "0.3.21", + "version": "0.3.23", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", + "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", "dev": true }, "language-tags": { - "version": "1.0.5", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", + "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", "dev": true, "requires": { - "language-subtag-registry": "~0.3.2" + "language-subtag-registry": "^0.3.20" } }, "left-pad": { @@ -45486,6 +45503,16 @@ "strip-ansi": "^3.0.0" } }, + "string.prototype.includes": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.0.tgz", + "integrity": "sha512-E34CkBgyeqNDcrbU76cDjL5JLcVrtSdYq0MEh/B10r17pRP4ciHLwTgnuLV8Ay6cgEMLkcBkFCKyFZ43YldYzg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, "string.prototype.matchall": { "version": "4.0.11", "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", diff --git a/package.json b/package.json index dd3c0ee27..0f28ff3c1 100644 --- a/package.json +++ b/package.json @@ -80,7 +80,7 @@ "eslint-config-react-app": "^7.0.1", "eslint-plugin-flowtype": "^8.0.3", "eslint-plugin-import": "^2.29.1", - "eslint-plugin-jsx-a11y": "^6.7.1", + "eslint-plugin-jsx-a11y": "^6.9.0", "eslint-plugin-prettier": "^5.1.3", "eslint-plugin-react": "^7.34.2", "eslint-plugin-react-hooks": "^4.6.0", From 59931c3daf4518bd81205773861e0a81e92faa13 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 3 Sep 2024 22:42:07 +0000 Subject: [PATCH 36/79] chore(deps): bump react18-json-view from 0.2.7 to 0.2.8 (#1039) --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 77ad86490..96073d6cb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -46,7 +46,7 @@ "react-redux": "^8.1.3", "react-router": "^6.12.1", "react-router-dom": "^6.26.1", - "react18-json-view": "^0.2.7", + "react18-json-view": "^0.2.8", "recharts": "^2.12.6", "redux": "^5.0.1", "redux-logger": "^3.0.6", @@ -23598,9 +23598,9 @@ } }, "node_modules/react18-json-view": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/react18-json-view/-/react18-json-view-0.2.7.tgz", - "integrity": "sha512-u1H0ZrjrYZUuXEyjcMU+/lVbFi890SNacTcYQT+e7/TI7OeczHyLwcngY4JbtZgfhwjIU078O1+NKh97IVVwZw==", + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/react18-json-view/-/react18-json-view-0.2.8.tgz", + "integrity": "sha512-uJlcf5PEDaba6yTqfcDAcMSYECZ15SLcpP94mLFTa/+fa1kZANjERqKzS7YxxsrGP4+jDxt6sIaglR0PbQcKPw==", "peerDependencies": { "react": ">=16.8.0" } @@ -44335,9 +44335,9 @@ } }, "react18-json-view": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/react18-json-view/-/react18-json-view-0.2.7.tgz", - "integrity": "sha512-u1H0ZrjrYZUuXEyjcMU+/lVbFi890SNacTcYQT+e7/TI7OeczHyLwcngY4JbtZgfhwjIU078O1+NKh97IVVwZw==", + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/react18-json-view/-/react18-json-view-0.2.8.tgz", + "integrity": "sha512-uJlcf5PEDaba6yTqfcDAcMSYECZ15SLcpP94mLFTa/+fa1kZANjERqKzS7YxxsrGP4+jDxt6sIaglR0PbQcKPw==", "requires": {} }, "read-pkg": { diff --git a/package.json b/package.json index 0f28ff3c1..f949fb19b 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ "react-redux": "^8.1.3", "react-router": "^6.12.1", "react-router-dom": "^6.26.1", - "react18-json-view": "^0.2.7", + "react18-json-view": "^0.2.8", "recharts": "^2.12.6", "redux": "^5.0.1", "redux-logger": "^3.0.6", From 0b38486ffe363e34a345fd4b12b080385f38c24c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 3 Sep 2024 22:47:40 +0000 Subject: [PATCH 37/79] chore(deps): bump @google-cloud/bigquery from 7.6.1 to 7.9.0 (#1036) --- package-lock.json | 30 +++++++++++++++--------------- package.json | 2 +- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/package-lock.json b/package-lock.json index 96073d6cb..195d78093 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,7 +8,7 @@ "name": "explorer", "version": "1.5.0", "dependencies": { - "@google-cloud/bigquery": "^7.6.1", + "@google-cloud/bigquery": "^7.9.0", "@paystring/utils": "^2.0.0", "@redux-devtools/extension": "^3.3.0", "@rollup/plugin-inject": "^5.0.5", @@ -2866,12 +2866,12 @@ } }, "node_modules/@google-cloud/bigquery": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/@google-cloud/bigquery/-/bigquery-7.6.1.tgz", - "integrity": "sha512-rxggrY6gBR2lijWfb37nXNg1vnCnpf01khihMIZ+497J2aY4/Y5hMLNkQe4aFw5owCjrXvqqLqBhOVzjh9kWJA==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@google-cloud/bigquery/-/bigquery-7.9.0.tgz", + "integrity": "sha512-KJTimGLDlAR1IfZ4Y8xhIVfoZ+XBXd0GGuJttLSXxtR0g+4vNsUt0xS33PRVa5TXey97374yU+uWNlCb5bHwBw==", "dependencies": { "@google-cloud/common": "^5.0.0", - "@google-cloud/paginator": "^5.0.0", + "@google-cloud/paginator": "^5.0.2", "@google-cloud/precise-date": "^4.0.0", "@google-cloud/promisify": "^4.0.0", "arrify": "^2.0.1", @@ -2918,9 +2918,9 @@ } }, "node_modules/@google-cloud/paginator": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-5.0.0.tgz", - "integrity": "sha512-87aeg6QQcEPxGCOthnpUjvw4xAZ57G7pL8FS0C4e/81fr3FjkpUpibf1s2v5XGyGhUVGF4Jfg7yEcxqn2iUw1w==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-5.0.2.tgz", + "integrity": "sha512-DJS3s0OVH4zFDB1PzjxAsHqJT6sKVbRwwML0ZBP9PbU7Yebtu/7SWMRzvO2J3nUi9pRNITCfu4LJeooM2w4pjg==", "dependencies": { "arrify": "^2.0.0", "extend": "^3.0.2" @@ -30087,12 +30087,12 @@ "dev": true }, "@google-cloud/bigquery": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/@google-cloud/bigquery/-/bigquery-7.6.1.tgz", - "integrity": "sha512-rxggrY6gBR2lijWfb37nXNg1vnCnpf01khihMIZ+497J2aY4/Y5hMLNkQe4aFw5owCjrXvqqLqBhOVzjh9kWJA==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@google-cloud/bigquery/-/bigquery-7.9.0.tgz", + "integrity": "sha512-KJTimGLDlAR1IfZ4Y8xhIVfoZ+XBXd0GGuJttLSXxtR0g+4vNsUt0xS33PRVa5TXey97374yU+uWNlCb5bHwBw==", "requires": { "@google-cloud/common": "^5.0.0", - "@google-cloud/paginator": "^5.0.0", + "@google-cloud/paginator": "^5.0.2", "@google-cloud/precise-date": "^4.0.0", "@google-cloud/promisify": "^4.0.0", "arrify": "^2.0.1", @@ -30128,9 +30128,9 @@ } }, "@google-cloud/paginator": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-5.0.0.tgz", - "integrity": "sha512-87aeg6QQcEPxGCOthnpUjvw4xAZ57G7pL8FS0C4e/81fr3FjkpUpibf1s2v5XGyGhUVGF4Jfg7yEcxqn2iUw1w==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-5.0.2.tgz", + "integrity": "sha512-DJS3s0OVH4zFDB1PzjxAsHqJT6sKVbRwwML0ZBP9PbU7Yebtu/7SWMRzvO2J3nUi9pRNITCfu4LJeooM2w4pjg==", "requires": { "arrify": "^2.0.0", "extend": "^3.0.2" diff --git a/package.json b/package.json index f949fb19b..d0e15cb72 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "description": "XRPL Data Visualization", "version": "1.5.0", "dependencies": { - "@google-cloud/bigquery": "^7.6.1", + "@google-cloud/bigquery": "^7.9.0", "@paystring/utils": "^2.0.0", "@redux-devtools/extension": "^3.3.0", "@rollup/plugin-inject": "^5.0.5", From 8cb5fc91d2cd6d72f56c57dd6a6b10d6516eb619 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 3 Sep 2024 23:07:21 +0000 Subject: [PATCH 38/79] chore(deps-dev): bump @types/create-hash from 1.2.2 to 1.2.6 (#1038) --- package-lock.json | 11 +++++++---- package.json | 2 +- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 195d78093..ffe24019a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -65,7 +65,7 @@ "@babel/eslint-parser": "^7.22.6", "@babel/preset-env": "^7.25.3", "@babel/preset-react": "^7.24.7", - "@types/create-hash": "^1.2.2", + "@types/create-hash": "^1.2.6", "@types/enzyme": "^3.10.12", "@types/jest": "^26.0.24", "@types/lodash": "^4.17.6", @@ -5972,9 +5972,10 @@ } }, "node_modules/@types/create-hash": { - "version": "1.2.2", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@types/create-hash/-/create-hash-1.2.6.tgz", + "integrity": "sha512-/VIViZZAK3rAFvfGbWmcLaxwKfmU213W/XL2cr5VE0ac44jE5ky7+sHl54OJhd+bTz7sqi+Ev//8RU1F/S/ZJQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*" } @@ -32221,7 +32222,9 @@ } }, "@types/create-hash": { - "version": "1.2.2", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@types/create-hash/-/create-hash-1.2.6.tgz", + "integrity": "sha512-/VIViZZAK3rAFvfGbWmcLaxwKfmU213W/XL2cr5VE0ac44jE5ky7+sHl54OJhd+bTz7sqi+Ev//8RU1F/S/ZJQ==", "dev": true, "requires": { "@types/node": "*" diff --git a/package.json b/package.json index d0e15cb72..2bedf9b0d 100644 --- a/package.json +++ b/package.json @@ -60,7 +60,7 @@ "@babel/eslint-parser": "^7.22.6", "@babel/preset-env": "^7.25.3", "@babel/preset-react": "^7.24.7", - "@types/create-hash": "^1.2.2", + "@types/create-hash": "^1.2.6", "@types/enzyme": "^3.10.12", "@types/jest": "^26.0.24", "@types/lodash": "^4.17.6", From 222a00333408ff6b3269e8deca351b6eaac1123b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 3 Sep 2024 23:12:36 +0000 Subject: [PATCH 39/79] chore(deps-dev): bump lint-staged from 15.2.5 to 15.2.10 (#1037) --- package-lock.json | 344 +++++++++++++++++++++++++++++----------------- package.json | 2 +- 2 files changed, 218 insertions(+), 128 deletions(-) diff --git a/package-lock.json b/package-lock.json index ffe24019a..3d1f95dee 100644 --- a/package-lock.json +++ b/package-lock.json @@ -91,7 +91,7 @@ "eslint-plugin-react-hooks": "^4.6.0", "jest-enzyme": "^7.1.0", "jest-websocket-mock": "^2.5.0", - "lint-staged": "^15.2.5", + "lint-staged": "^15.2.10", "mock-socket": "^9.1.5", "moxios": "^0.4.0", "nodemon": "^3.1.4", @@ -8955,15 +8955,15 @@ "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==" }, "node_modules/cli-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", - "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", "dev": true, "dependencies": { - "restore-cursor": "^4.0.0" + "restore-cursor": "^5.0.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -9010,9 +9010,9 @@ } }, "node_modules/cli-truncate/node_modules/emoji-regex": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", - "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", "dev": true }, "node_modules/cli-truncate/node_modules/is-fullwidth-code-point": { @@ -9044,9 +9044,9 @@ } }, "node_modules/cli-truncate/node_modules/string-width": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", - "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, "dependencies": { "emoji-regex": "^10.3.0", @@ -10435,6 +10435,18 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, + "node_modules/environment": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/enzyme": { "version": "3.11.0", "dev": true, @@ -20789,9 +20801,9 @@ } }, "node_modules/lilconfig": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.1.tgz", - "integrity": "sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", + "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", "dev": true, "engines": { "node": ">=14" @@ -20805,21 +20817,21 @@ "license": "MIT" }, "node_modules/lint-staged": { - "version": "15.2.5", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.5.tgz", - "integrity": "sha512-j+DfX7W9YUvdzEZl3Rk47FhDF6xwDBV5wwsCPw6BwWZVPYJemusQmvb9bRsW23Sqsaa+vRloAWogbK4BUuU2zA==", + "version": "15.2.10", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.10.tgz", + "integrity": "sha512-5dY5t743e1byO19P9I4b3x8HJwalIznL5E1FWYnU6OWw33KxNBSLAc6Cy7F2PsFEO8FKnLwjwm5hx7aMF0jzZg==", "dev": true, "dependencies": { "chalk": "~5.3.0", "commander": "~12.1.0", - "debug": "~4.3.4", + "debug": "~4.3.6", "execa": "~8.0.1", - "lilconfig": "~3.1.1", - "listr2": "~8.2.1", - "micromatch": "~4.0.7", + "lilconfig": "~3.1.2", + "listr2": "~8.2.4", + "micromatch": "~4.0.8", "pidtree": "~0.6.0", "string-argv": "~0.3.2", - "yaml": "~2.4.2" + "yaml": "~2.5.0" }, "bin": { "lint-staged": "bin/lint-staged.js" @@ -20956,9 +20968,9 @@ } }, "node_modules/lint-staged/node_modules/micromatch": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", - "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, "dependencies": { "braces": "^3.0.3", @@ -21115,9 +21127,9 @@ } }, "node_modules/lint-staged/node_modules/yaml": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.2.tgz", - "integrity": "sha512-B3VqDZ+JAg1nZpaEmWtTXUlBneoGx6CPM9b0TENK6aoSu5t73dItudwdgmi6tHlIZZId4dZ9skcAQ2UbcyAeVA==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.0.tgz", + "integrity": "sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==", "dev": true, "bin": { "yaml": "bin.mjs" @@ -21127,16 +21139,16 @@ } }, "node_modules/listr2": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.2.1.tgz", - "integrity": "sha512-irTfvpib/rNiD637xeevjO2l3Z5loZmuaRi0L0YE5LfijwVY96oyVn0DFD3o/teAok7nfobMG1THvvcHh/BP6g==", + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.2.4.tgz", + "integrity": "sha512-opevsywziHd3zHCVQGAj8zu+Z3yHNkkoYhWIGnq54RrCVwLz0MozotJEDnKsIBLvkfLGN6BLOyAeRrYI0pKA4g==", "dev": true, "dependencies": { "cli-truncate": "^4.0.0", "colorette": "^2.0.20", "eventemitter3": "^5.0.1", - "log-update": "^6.0.0", - "rfdc": "^1.3.1", + "log-update": "^6.1.0", + "rfdc": "^1.4.1", "wrap-ansi": "^9.0.0" }, "engines": { @@ -21168,9 +21180,9 @@ } }, "node_modules/listr2/node_modules/emoji-regex": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", - "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", "dev": true }, "node_modules/listr2/node_modules/eventemitter3": { @@ -21180,9 +21192,9 @@ "dev": true }, "node_modules/listr2/node_modules/string-width": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", - "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, "dependencies": { "emoji-regex": "^10.3.0", @@ -21344,14 +21356,14 @@ "license": "MIT" }, "node_modules/log-update": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.0.0.tgz", - "integrity": "sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", + "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", "dev": true, "dependencies": { - "ansi-escapes": "^6.2.0", - "cli-cursor": "^4.0.0", - "slice-ansi": "^7.0.0", + "ansi-escapes": "^7.0.0", + "cli-cursor": "^5.0.0", + "slice-ansi": "^7.1.0", "strip-ansi": "^7.1.0", "wrap-ansi": "^9.0.0" }, @@ -21363,12 +21375,15 @@ } }, "node_modules/log-update/node_modules/ansi-escapes": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.1.tgz", - "integrity": "sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.0.0.tgz", + "integrity": "sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==", "dev": true, + "dependencies": { + "environment": "^1.0.0" + }, "engines": { - "node": ">=14.16" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -21399,9 +21414,9 @@ } }, "node_modules/log-update/node_modules/emoji-regex": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", - "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", "dev": true }, "node_modules/log-update/node_modules/is-fullwidth-code-point": { @@ -21436,9 +21451,9 @@ } }, "node_modules/log-update/node_modules/string-width": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", - "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, "dependencies": { "emoji-regex": "^10.3.0", @@ -21890,10 +21905,23 @@ "version": "2.1.0", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=6" } }, + "node_modules/mimic-function": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", + "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/mimic-response": { "version": "2.1.0", "dev": true, @@ -22667,6 +22695,7 @@ "version": "5.1.2", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "mimic-fn": "^2.1.0" }, @@ -24040,21 +24069,48 @@ "license": "MIT" }, "node_modules/restore-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", - "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", "dev": true, "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/restore-cursor/node_modules/onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "dev": true, + "dependencies": { + "mimic-function": "^5.0.0" + }, + "engines": { + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/restore-cursor/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/ret": { "version": "0.1.15", "dev": true, @@ -24084,9 +24140,9 @@ } }, "node_modules/rfdc": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.1.tgz", - "integrity": "sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", "dev": true }, "node_modules/rimraf": { @@ -34312,12 +34368,12 @@ "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==" }, "cli-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", - "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", "dev": true, "requires": { - "restore-cursor": "^4.0.0" + "restore-cursor": "^5.0.0" } }, "cli-truncate": { @@ -34343,9 +34399,9 @@ "dev": true }, "emoji-regex": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", - "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", "dev": true }, "is-fullwidth-code-point": { @@ -34365,9 +34421,9 @@ } }, "string-width": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", - "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, "requires": { "emoji-regex": "^10.3.0", @@ -35351,6 +35407,12 @@ "entities": { "version": "2.2.0" }, + "environment": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "dev": true + }, "enzyme": { "version": "3.11.0", "dev": true, @@ -42520,30 +42582,30 @@ } }, "lilconfig": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.1.tgz", - "integrity": "sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", + "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", "dev": true }, "lines-and-columns": { "version": "1.1.6" }, "lint-staged": { - "version": "15.2.5", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.5.tgz", - "integrity": "sha512-j+DfX7W9YUvdzEZl3Rk47FhDF6xwDBV5wwsCPw6BwWZVPYJemusQmvb9bRsW23Sqsaa+vRloAWogbK4BUuU2zA==", + "version": "15.2.10", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.10.tgz", + "integrity": "sha512-5dY5t743e1byO19P9I4b3x8HJwalIznL5E1FWYnU6OWw33KxNBSLAc6Cy7F2PsFEO8FKnLwjwm5hx7aMF0jzZg==", "dev": true, "requires": { "chalk": "~5.3.0", "commander": "~12.1.0", - "debug": "~4.3.4", + "debug": "~4.3.6", "execa": "~8.0.1", - "lilconfig": "~3.1.1", - "listr2": "~8.2.1", - "micromatch": "~4.0.7", + "lilconfig": "~3.1.2", + "listr2": "~8.2.4", + "micromatch": "~4.0.8", "pidtree": "~0.6.0", "string-argv": "~0.3.2", - "yaml": "~2.4.2" + "yaml": "~2.5.0" }, "dependencies": { "braces": { @@ -42629,9 +42691,9 @@ "dev": true }, "micromatch": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", - "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, "requires": { "braces": "^3.0.3", @@ -42726,24 +42788,24 @@ } }, "yaml": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.2.tgz", - "integrity": "sha512-B3VqDZ+JAg1nZpaEmWtTXUlBneoGx6CPM9b0TENK6aoSu5t73dItudwdgmi6tHlIZZId4dZ9skcAQ2UbcyAeVA==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.0.tgz", + "integrity": "sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==", "dev": true } } }, "listr2": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.2.1.tgz", - "integrity": "sha512-irTfvpib/rNiD637xeevjO2l3Z5loZmuaRi0L0YE5LfijwVY96oyVn0DFD3o/teAok7nfobMG1THvvcHh/BP6g==", + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.2.4.tgz", + "integrity": "sha512-opevsywziHd3zHCVQGAj8zu+Z3yHNkkoYhWIGnq54RrCVwLz0MozotJEDnKsIBLvkfLGN6BLOyAeRrYI0pKA4g==", "dev": true, "requires": { "cli-truncate": "^4.0.0", "colorette": "^2.0.20", "eventemitter3": "^5.0.1", - "log-update": "^6.0.0", - "rfdc": "^1.3.1", + "log-update": "^6.1.0", + "rfdc": "^1.4.1", "wrap-ansi": "^9.0.0" }, "dependencies": { @@ -42760,9 +42822,9 @@ "dev": true }, "emoji-regex": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", - "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", "dev": true }, "eventemitter3": { @@ -42772,9 +42834,9 @@ "dev": true }, "string-width": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", - "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, "requires": { "emoji-regex": "^10.3.0", @@ -42897,23 +42959,26 @@ "dev": true }, "log-update": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.0.0.tgz", - "integrity": "sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", + "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", "dev": true, "requires": { - "ansi-escapes": "^6.2.0", - "cli-cursor": "^4.0.0", - "slice-ansi": "^7.0.0", + "ansi-escapes": "^7.0.0", + "cli-cursor": "^5.0.0", + "slice-ansi": "^7.1.0", "strip-ansi": "^7.1.0", "wrap-ansi": "^9.0.0" }, "dependencies": { "ansi-escapes": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.1.tgz", - "integrity": "sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==", - "dev": true + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.0.0.tgz", + "integrity": "sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==", + "dev": true, + "requires": { + "environment": "^1.0.0" + } }, "ansi-regex": { "version": "6.0.1", @@ -42928,9 +42993,9 @@ "dev": true }, "emoji-regex": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", - "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", "dev": true }, "is-fullwidth-code-point": { @@ -42953,9 +43018,9 @@ } }, "string-width": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", - "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, "requires": { "emoji-regex": "^10.3.0", @@ -43250,6 +43315,13 @@ }, "mimic-fn": { "version": "2.1.0", + "dev": true, + "peer": true + }, + "mimic-function": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", + "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", "dev": true }, "mimic-response": { @@ -43770,6 +43842,7 @@ "onetime": { "version": "5.1.2", "dev": true, + "peer": true, "requires": { "mimic-fn": "^2.1.0" } @@ -44650,13 +44723,30 @@ "dev": true }, "restore-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", - "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", "dev": true, "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" + }, + "dependencies": { + "onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "dev": true, + "requires": { + "mimic-function": "^5.0.0" + } + }, + "signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true + } } }, "ret": { @@ -44676,9 +44766,9 @@ "version": "1.0.4" }, "rfdc": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.1.tgz", - "integrity": "sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", "dev": true }, "rimraf": { diff --git a/package.json b/package.json index 2bedf9b0d..f9aeef9c5 100644 --- a/package.json +++ b/package.json @@ -86,7 +86,7 @@ "eslint-plugin-react-hooks": "^4.6.0", "jest-enzyme": "^7.1.0", "jest-websocket-mock": "^2.5.0", - "lint-staged": "^15.2.5", + "lint-staged": "^15.2.10", "mock-socket": "^9.1.5", "moxios": "^0.4.0", "nodemon": "^3.1.4", From 1018f056d6a7c894916969751a5a53ac2c8106aa Mon Sep 17 00:00:00 2001 From: pdp2121 <71317875+pdp2121@users.noreply.github.com> Date: Wed, 4 Sep 2024 16:02:16 -0400 Subject: [PATCH 40/79] fix: Upgrade Status renders on data error (#1000) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## High Level Overview of Change <!-- Please include a summary/list of the changes. If too broad, please consider splitting into multiple PRs. --> The VHS is experiencing an intermittent issue with CORS header that causes occasional disruption in data fetching for the Upgrade Status chart. This PR will add checks so to ensure the chart renders even when there's a disruption. <img width="1725" alt="Screenshot 2024-06-12 at 4 13 54 PM" src="https://github.com/ripple/explorer/assets/71317875/f5120024-4954-4d26-8c77-5ede6326d265"> ### Type of Change <!-- Please check relevant options, delete irrelevant ones. --> - [x] Bug fix (non-breaking change which fixes an issue) - [ ] New feature (non-breaking change which adds functionality) - [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected) - [ ] Refactor (non-breaking change that only restructures code) - [ ] Tests (You added tests for code that already exists, or your new feature included in this PR) - [ ] Documentation Updates - [ ] Translation Updates - [ ] Release --- public/locales/ca-CA/translations.json | 4 +- public/locales/en-US/translations.json | 4 +- public/locales/es-ES/translations.json | 4 +- public/locales/fr-FR/translations.json | 4 +- public/locales/ja-JP/translations.json | 4 +- public/locales/ko-KR/translations.json | 4 +- src/containers/Network/BarChartVersion.tsx | 12 +- src/containers/Network/UpgradeStatus.tsx | 138 +++++++---- .../Network/test/upgradeStatus.test.js | 218 ++++++++++++------ 9 files changed, 262 insertions(+), 130 deletions(-) diff --git a/public/locales/ca-CA/translations.json b/public/locales/ca-CA/translations.json index a4b62daf5..d5e305960 100644 --- a/public/locales/ca-CA/translations.json +++ b/public/locales/ca-CA/translations.json @@ -445,8 +445,8 @@ "other_chain_destination": "Destinació a una altra xarxa", "%_of_total_nodes_validators": "% total de nodes i validadors", "version_display": "Versió: {{version}}", - "validators_count": "# de Validadors: {{vals_count}}", - "nodes_count": "# de Nodes: {{nodes_count}}", + "validator_count": "# de Validadors: {{val_count}}", + "node_count": "# de Nodes: {{node_count}}", "current_stable_version": "Versió estable actual", "stable_version": "{{stableVersion}}", "nftoken_minter": "Encunyador NFT", diff --git a/public/locales/en-US/translations.json b/public/locales/en-US/translations.json index c7e8e0642..369edfa7a 100644 --- a/public/locales/en-US/translations.json +++ b/public/locales/en-US/translations.json @@ -445,8 +445,8 @@ "other_chain_destination": "Other Chain Destination", "%_of_total_nodes_validators": "% of Total Nodes & Validators", "version_display": "Version: {{version}}", - "validators_count": "# of Validators: {{vals_count}}", - "nodes_count": "# of Nodes: {{nodes_count}}", + "validator_count": "# of Validators: {{val_count}}", + "node_count": "# of Nodes: {{node_count}}", "current_stable_version": "Current Stable Version", "stable_version": "{{stableVersion}}", "nftoken_minter": "NFT Minter", diff --git a/public/locales/es-ES/translations.json b/public/locales/es-ES/translations.json index 4245651b0..bde04d337 100644 --- a/public/locales/es-ES/translations.json +++ b/public/locales/es-ES/translations.json @@ -441,8 +441,8 @@ "other_chain_destination": "Otro Destino de Cadena", "%_of_total_nodes_validators": "% Total de Nodos y Validadores", "version_display": "Versión: {{version}}", - "validators_count": "# de Validadores: {{vals_count}}", - "nodes_count": "# de Nodos: {{nodes_count}}", + "validator_count": "# de Validadores: {{val_count}}", + "node_count": "# de Nodos: {{node_count}}", "current_stable_version": "Versión Estable Actual", "stable_version": "{{stableVersion}}", "nftoken_minter": "Acuñador NFT", diff --git a/public/locales/fr-FR/translations.json b/public/locales/fr-FR/translations.json index 3265e919e..9cbdc4293 100644 --- a/public/locales/fr-FR/translations.json +++ b/public/locales/fr-FR/translations.json @@ -443,8 +443,8 @@ "other_chain_destination": "Autre destination de chaîne", "%_of_total_nodes_validators": "% des nœuds et des validateurs", "version_display": "Version: {{version}}", - "validators_count": "nb de Validateurs: {{vals_count}}", - "nodes_count": "nb de Nœuds: {{nodes_count}}", + "validator_count": "nb de Validateurs: {{val_count}}", + "node_count": "nb de Nœuds: {{node_count}}", "current_stable_version": "Version Stable Actuelle", "stable_version": "{{stableVersion}}", "nftoken_minter": "Créateur du NFT", diff --git a/public/locales/ja-JP/translations.json b/public/locales/ja-JP/translations.json index 76c396048..953a54eba 100644 --- a/public/locales/ja-JP/translations.json +++ b/public/locales/ja-JP/translations.json @@ -443,8 +443,8 @@ "other_chain_destination": null, "%_of_total_nodes_validators": null, "version_display": "バージョン: {{version}}", - "validators_count": "バリデータの数: {{vals_count}}", - "nodes_count": "ノードの数: {{nodes_count}}", + "validator_count": "バリデータの数: {{val_count}}", + "node_count": "ノードの数: {{node_count}}", "current_stable_version": "現在の安定バージョン", "stable_version": null, "nftoken_minter": "NFT発行者", diff --git a/public/locales/ko-KR/translations.json b/public/locales/ko-KR/translations.json index 73951775e..2094a1fe5 100644 --- a/public/locales/ko-KR/translations.json +++ b/public/locales/ko-KR/translations.json @@ -441,8 +441,8 @@ "other_chain_destination": "다른 체인의 목적지", "%_of_total_nodes_validators": "노드와 검증자의 총 비율", "version_display": "버전: {{version}}", - "validators_count": "검증자 수: {{vals_count}}", - "nodes_count": "노드 수: {{nodes_count}}", + "validator_count": "검증자 수: {{val_count}}", + "node_count": "노드 수: {{node_count}}", "current_stable_version": "현재 안정적인 버전", "stable_version": "{{stableVersion}}", "nftoken_minter": "NFT 발행자", diff --git a/src/containers/Network/BarChartVersion.tsx b/src/containers/Network/BarChartVersion.tsx index b9f63f6c4..b49b0ad13 100644 --- a/src/containers/Network/BarChartVersion.tsx +++ b/src/containers/Network/BarChartVersion.tsx @@ -51,13 +51,13 @@ const CustomTooltip = ({ <div className="custom-tooltip"> <p className="label">{t('version_display', { version: label })}</p> <p className="value"> - {t('validators_count', { - vals_count: payload ? payload[0].payload.validatorsCount : 0, + {t('validator_count', { + val_count: payload?.[0]?.payload?.validatorCount ?? 0, })} </p> <p className="value"> - {t('nodes_count', { - nodes_count: payload ? payload[0].payload.nodesCount : 0, + {t('node_count', { + node_count: payload?.[0]?.payload?.nodeCount ?? 0, })} </p> </div> @@ -162,7 +162,7 @@ const BarChartVersion = (props: Props) => { /> </YAxis> <Bar - dataKey="validatorsPercent" + dataKey="validatorPercent" barSize={30} fill={PURPLE} radius={[4, 4, 0, 0]} @@ -183,7 +183,7 @@ const BarChartVersion = (props: Props) => { ))} </Bar> <Bar - dataKey="nodesPercent" + dataKey="nodePercent" barSize={30} fill={PURPLE} radius={[4, 4, 0, 0]} diff --git a/src/containers/Network/UpgradeStatus.tsx b/src/containers/Network/UpgradeStatus.tsx index 22e2f0fd1..cdd599790 100644 --- a/src/containers/Network/UpgradeStatus.tsx +++ b/src/containers/Network/UpgradeStatus.tsx @@ -22,63 +22,108 @@ import { } from '../shared/vhsTypes' import NetworkContext from '../shared/NetworkContext' import { ledgerCompare } from './Nodes' +import { Loader } from '../shared/components/Loader' -interface DataAggregation { - label: string - validatorsPercent: number - validatorsCount: number - nodesPercent: number - nodesCount: number +interface NodeStats { + nodePercent: number + nodeCount: number } -export const aggregateData = ( - validators: ValidatorResponse[], - nodes: NodeResponse[], -): DataAggregation[] => { - if (!validators) { - return [] - } +interface ValidatorStats { + validatorPercent: number + validatorCount: number +} - let totalVals = 0 - let totalNodes = 0 - interface aggregationTypes { - validatorsCount: number - nodesCount: number - } +interface ValidatorAggregation { + [label: string]: ValidatorStats +} - const aggregation: Record<string, aggregationTypes> = {} +interface NodeAggregation { + [label: string]: NodeStats +} + +interface DataAggregation extends ValidatorStats, NodeStats { + label: string +} + +export const aggregateValidators = (validators: ValidatorResponse[]) => { + let totalVals = 0 + const aggregation: ValidatorAggregation = {} validators?.forEach((validator) => { if (!validator.signing_key) return const version = validator.server_version totalVals += 1 if (version) { if (!aggregation[version]) { - aggregation[version] = { validatorsCount: 0, nodesCount: 0 } + aggregation[version] = { validatorCount: 0, validatorPercent: 0 } } - aggregation[version].validatorsCount += 1 + aggregation[version].validatorCount += 1 } }) + for (const label of Object.keys(aggregation)) { + aggregation[label].validatorPercent = + totalVals > 0 ? (aggregation[label].validatorCount / totalVals) * 100 : 0 + } + + return aggregation +} +export const aggregateNodes = (nodes: NodeResponse[]) => { + let totalNodes = 0 + const aggregation: NodeAggregation = {} nodes?.forEach((node) => { const { version } = node if (!node.node_public_key) return totalNodes += 1 if (version) { if (!aggregation[version]) { - aggregation[version] = { validatorsCount: 0, nodesCount: 0 } + aggregation[version] = { nodeCount: 0, nodePercent: 0 } } - aggregation[version].nodesCount += 1 + aggregation[version].nodeCount += 1 } }) + for (const label of Object.keys(aggregation)) { + aggregation[label].nodePercent = + totalNodes > 0 ? (aggregation[label].nodeCount / totalNodes) * 100 : 0 + } + + return aggregation +} - return Object.entries(aggregation) - .map(([version, counts]) => ({ - label: version ? version.trim() : 'N/A', - validatorsPercent: - totalVals > 0 ? (counts.validatorsCount * 100) / totalVals : 0, - validatorsCount: counts.validatorsCount, - nodesPercent: totalNodes > 0 ? (counts.nodesCount * 100) / totalNodes : 0, - nodesCount: counts.nodesCount, +export const aggregateData = ( + validatorAggregation: ValidatorAggregation, + nodeAggregation: NodeAggregation, +): DataAggregation[] => { + const combinedAggregation: { [label: string]: ValidatorStats & NodeStats } = + {} + for (const label of Object.keys(validatorAggregation)) { + combinedAggregation[label] = { + validatorPercent: validatorAggregation[label].validatorPercent, + validatorCount: validatorAggregation[label].validatorCount, + nodePercent: 0, + nodeCount: 0, + } + } + + for (const label of Object.keys(nodeAggregation)) { + if (!combinedAggregation[label]) { + combinedAggregation[label] = { + validatorPercent: 0, + validatorCount: 0, + nodePercent: nodeAggregation[label].nodePercent, + nodeCount: nodeAggregation[label].nodeCount, + } + } else { + combinedAggregation[label].nodePercent = + nodeAggregation[label].nodePercent + combinedAggregation[label].nodeCount = nodeAggregation[label].nodeCount + } + } + + return Object.entries(combinedAggregation) + .map(([label, stats]) => ({ + label, + ...stats, })) .sort((a, b) => (isEarlierVersion(a.label, b.label) ? -1 : 1)) } @@ -110,7 +155,9 @@ export const UpgradeStatus = () => { const [vList, setVList] = useState<Record<string, ValidatorResponse>>({}) const [validations, setValidations] = useState<ValidatorResponse[]>([]) const [unlCount, setUnlCount] = useState(0) - const [aggregated, setAggregated] = useState<DataAggregation[]>([]) + const [validatorAggregation, setValidatorAggregation] = + useState<ValidatorAggregation>({}) + const [nodeAggregation, setNodeAggregation] = useState<NodeAggregation>({}) const { t } = useTranslation() const language = useLanguage() const network = useContext(NetworkContext) @@ -145,7 +192,7 @@ export const UpgradeStatus = () => { ) const fetchData = () => { - const validatorsReq = axios + axios .get(`${process.env.VITE_DATA_URL}/validators/${network}`) .then((resp) => resp.data.validators) .then((validators: ValidatorResponse[]) => { @@ -153,16 +200,16 @@ export const UpgradeStatus = () => { validators.forEach((validator) => { newValidatorList[validator.signing_key] = validator }) - setVList(newValidatorList) setUnlCount( validators.filter((validator) => Boolean(validator.unl)).length, ) + setValidatorAggregation(aggregateValidators(validators)) return Object.values(newValidatorList) }) .catch((e) => Log.error(e)) - const nodesReq = axios + axios .get(`${process.env.VITE_DATA_URL}/topology/nodes/${network}`) .then((resp) => resp.data.nodes) .then((allNodes) => { @@ -188,12 +235,11 @@ export const UpgradeStatus = () => { } return 1 }) + + setNodeAggregation(aggregateNodes(nodes)) return nodes }) .catch((e) => Log.error(e)) - Promise.all([validatorsReq, nodesReq]).then(([validators, nodes]) => { - setAggregated(aggregateData(validators, nodes)) - }) } const fetchStableVersion = () => { @@ -250,9 +296,17 @@ export const UpgradeStatus = () => { </div> <div className="wrap"> <NetworkTabs selected="upgrade-status" /> - <div className="upgrade_status"> - <BarChartVersion data={aggregated} stableVersion={stableVersion} /> - </div> + {Object.keys(validatorAggregation).length > 0 || + Object.keys(nodeAggregation).length > 0 ? ( + <div className="upgrade_status"> + <BarChartVersion + data={aggregateData(validatorAggregation, nodeAggregation)} + stableVersion={stableVersion} + /> + </div> + ) : ( + <Loader /> + )} </div> </div> ) diff --git a/src/containers/Network/test/upgradeStatus.test.js b/src/containers/Network/test/upgradeStatus.test.js index 79d15a0d4..28d43d480 100644 --- a/src/containers/Network/test/upgradeStatus.test.js +++ b/src/containers/Network/test/upgradeStatus.test.js @@ -1,84 +1,162 @@ -import { aggregateData } from '../UpgradeStatus' +import { mount } from 'enzyme' +import moxios from 'moxios' +import WS from 'jest-websocket-mock' +import { Route } from 'react-router' +import i18n from '../../../i18n/testConfig' +import { Network } from '../index' +import SocketContext from '../../shared/SocketContext' +import MockWsClient from '../../test/mockWsClient' +import { QuickHarness } from '../../test/utils' +import { NETWORK_ROUTE } from '../../App/routes' +import { + aggregateData, + aggregateNodes, + aggregateValidators, +} from '../UpgradeStatus' -describe('UpgradeStatus test functions', () => { - const undefinedValidatorsData = [ - { - ledger_index: 74661353, - ledger_hash: - '613E298A8C0AEB816D16AA61952E0834BBD9B5E5677EA3E9A2413118EE074363', +const undefinedValidatorsData = [ + { + ledger_index: 74661353, + ledger_hash: + '613E298A8C0AEB816D16AA61952E0834BBD9B5E5677EA3E9A2413118EE074363', + }, + { + master_key: 'nHUakYHufAvdx5XqTS2F4Pu7i8fQqDqpKqXN2kUGHhBFcG38GNqL', + signing_key: 'n9M38x7Sf7epp3gaxgcFxEtwkSc4w2ePb1SgfLiz9bVCr5Lvzrm8', + unl: false, + domain: 'gerty.one', + ledger_index: 74554449, + server_version: '1.9.4', + agreement_1hour: { + missed: 936, + total: 936, + score: '0.00000', + incomplete: false, }, - { - master_key: 'nHUakYHufAvdx5XqTS2F4Pu7i8fQqDqpKqXN2kUGHhBFcG38GNqL', - signing_key: 'n9M38x7Sf7epp3gaxgcFxEtwkSc4w2ePb1SgfLiz9bVCr5Lvzrm8', - unl: false, - domain: 'gerty.one', - ledger_index: 74554449, - server_version: '1.9.4', - agreement_1hour: { - missed: 936, - total: 936, - score: '0.00000', - incomplete: false, - }, - agreement_24hour: { - missed: 22338, - total: 22338, - score: '0.00000', - incomplete: false, - }, - agreement_30day: { - missed: 263139, - total: 535427, - score: '0.50854', - incomplete: false, - }, - chain: 'chain.4', - partial: false, + agreement_24hour: { + missed: 22338, + total: 22338, + score: '0.00000', + incomplete: false, }, - ] - - const nodesData = [ - { - node_public_key: 'n9JoeT8XKeBSR8y4D9aDz2PL1DD1j6LQwkRTbH2eFqeRmWYHj2Nw', - networks: 'dev', - complete_ledgers: '22085270-29882772', - ip: '34.208.12.148', - port: 2459, - uptime: 1257336, - version: '1.11.0-rc3', - server_state: 'full', - io_latency_ms: 1, - load_factor_server: '256', - inbound_count: 4, - outbound_count: 9, - lat: '45.82', - long: '-119.73', - country_code: 'US', - country: 'United States', - region: 'Oregon', - region_code: 'OR', - city: 'Boardman', - postal_code: '97818', - timezone: 'America/Los_Angeles', + agreement_30day: { + missed: 263139, + total: 535427, + score: '0.50854', + incomplete: false, }, - ] + chain: 'chain.4', + partial: false, + }, +] - it('aggregateData handle edge case', () => { - expect(aggregateData(undefinedValidatorsData, nodesData)).toEqual([ +const nodesData = [ + { + node_public_key: 'n9JoeT8XKeBSR8y4D9aDz2PL1DD1j6LQwkRTbH2eFqeRmWYHj2Nw', + networks: 'dev', + complete_ledgers: '22085270-29882772', + ip: '34.208.12.148', + port: 2459, + uptime: 1257336, + version: '1.11.0-rc3', + server_state: 'full', + io_latency_ms: 1, + load_factor_server: '256', + inbound_count: 4, + outbound_count: 9, + lat: '45.82', + long: '-119.73', + country_code: 'US', + country: 'United States', + region: 'Oregon', + region_code: 'OR', + city: 'Boardman', + postal_code: '97818', + timezone: 'America/Los_Angeles', + }, +] + +describe('UpgradeStatus test functions', () => { + it('aggregate data works with validators without keys', () => { + const validatorAggregate = aggregateValidators(undefinedValidatorsData) + expect(validatorAggregate).toEqual({ + '1.9.4': { validatorCount: 1, validatorPercent: 100 }, + }) + const nodeAggregate = aggregateNodes(nodesData) + expect(nodeAggregate).toEqual({ + '1.11.0-rc3': { nodeCount: 1, nodePercent: 100 }, + }) + expect(aggregateData(validatorAggregate, nodeAggregate)).toEqual([ { label: '1.9.4', - validatorsCount: 1, - validatorsPercent: 100, - nodesCount: 0, - nodesPercent: 0, + validatorCount: 1, + validatorPercent: 100, + nodeCount: 0, + nodePercent: 0, }, { label: '1.11.0-rc3', - validatorsCount: 0, - validatorsPercent: 0, - nodesCount: 1, - nodesPercent: 100, + validatorCount: 0, + validatorPercent: 0, + nodeCount: 1, + nodePercent: 100, }, ]) }) }) + +describe('UpgradeStatus renders', () => { + let server + let client + const WS_URL = 'ws://localhost:1234' + const createWrapper = () => + mount( + <SocketContext.Provider value={client}> + <QuickHarness i18n={i18n} initialEntries={['/network/upgrade-status']}> + <Route path={NETWORK_ROUTE.path} element={<Network />} /> + </QuickHarness> + </SocketContext.Provider>, + ) + + beforeEach(async () => { + window.ResizeObserver = jest.fn().mockImplementation(() => ({ + observe: jest.fn(), + unobserve: jest.fn(), + disconnect: jest.fn(), + })) + server = new WS(WS_URL, { jsonProtocol: true }) + client = new MockWsClient(WS_URL) + await server.connected + moxios.install() + }) + + afterEach(async () => { + moxios.uninstall() + server.close() + client.close() + WS.clean() + }) + + it('renders without crashing', async () => { + const wrapper = createWrapper() + wrapper.unmount() + }) + + it('renders when nodes request errors', async () => { + moxios.stubRequest(`${process.env.VITE_DATA_URL}/validators/main`, { + status: 200, + response: { validators: undefinedValidatorsData }, + }) + moxios.stubRequest(`${process.env.VITE_DATA_URL}/topology/nodes/main`, { + status: 502, + }) + + const wrapper = createWrapper() + wrapper.update() + setTimeout(() => { + wrapper.update() + expect(wrapper.find('.barchart').length).toEqual(1) + }) + wrapper.unmount() + }) +}) From a1d03ea0255dcae740d8d3c46b8d6655d474892f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 2 Oct 2024 17:47:57 +0000 Subject: [PATCH 41/79] chore(deps): bump recharts from 2.12.6 to 2.12.7 (#1050) --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3d1f95dee..2594b7037 100644 --- a/package-lock.json +++ b/package-lock.json @@ -47,7 +47,7 @@ "react-router": "^6.12.1", "react-router-dom": "^6.26.1", "react18-json-view": "^0.2.8", - "recharts": "^2.12.6", + "recharts": "^2.12.7", "redux": "^5.0.1", "redux-logger": "^3.0.6", "redux-thunk": "^2.2.0", @@ -23695,9 +23695,9 @@ } }, "node_modules/recharts": { - "version": "2.12.6", - "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.12.6.tgz", - "integrity": "sha512-D+7j9WI+D0NHauah3fKHuNNcRK8bOypPW7os1DERinogGBGaHI7i6tQKJ0aUF3JXyBZ63dyfKIW2WTOPJDxJ8w==", + "version": "2.12.7", + "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.12.7.tgz", + "integrity": "sha512-hlLJMhPQfv4/3NBSAyq3gzGg4h2v69RJh6KU7b3pXYNNAELs9kEoXOjbkxdXpALqKBoVmVptGfLpxdaVYqjmXQ==", "dependencies": { "clsx": "^2.0.0", "eventemitter3": "^4.0.1", @@ -44456,9 +44456,9 @@ } }, "recharts": { - "version": "2.12.6", - "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.12.6.tgz", - "integrity": "sha512-D+7j9WI+D0NHauah3fKHuNNcRK8bOypPW7os1DERinogGBGaHI7i6tQKJ0aUF3JXyBZ63dyfKIW2WTOPJDxJ8w==", + "version": "2.12.7", + "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.12.7.tgz", + "integrity": "sha512-hlLJMhPQfv4/3NBSAyq3gzGg4h2v69RJh6KU7b3pXYNNAELs9kEoXOjbkxdXpALqKBoVmVptGfLpxdaVYqjmXQ==", "requires": { "clsx": "^2.0.0", "eventemitter3": "^4.0.1", diff --git a/package.json b/package.json index f9aeef9c5..d23c9d72b 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,7 @@ "react-router": "^6.12.1", "react-router-dom": "^6.26.1", "react18-json-view": "^0.2.8", - "recharts": "^2.12.6", + "recharts": "^2.12.7", "redux": "^5.0.1", "redux-logger": "^3.0.6", "redux-thunk": "^2.2.0", From 46dfb607869c97e9bdb4da838345bf828e5bdcd4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 2 Oct 2024 17:54:22 +0000 Subject: [PATCH 42/79] chore(deps): bump vite from 4.2.3 to 5.4.8 (#1046) --- package-lock.json | 853 +++++++++++++++++++++++++++++++++------------- package.json | 2 +- 2 files changed, 611 insertions(+), 244 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2594b7037..c13e3c552 100644 --- a/package-lock.json +++ b/package-lock.json @@ -54,7 +54,7 @@ "ripple-address-codec": "^5.0.0", "topojson-client": "^3.0.0", "usehooks-ts": "^3.1.0", - "vite": "^4.2.3", + "vite": "^5.4.8", "vite-plugin-environment": "^1.1.3", "vite-plugin-html": "^3.2.0", "vite-plugin-svgr": "^4.2.0", @@ -5537,6 +5537,198 @@ } } }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.24.0.tgz", + "integrity": "sha512-Q6HJd7Y6xdB48x8ZNVDOqsbh2uByBhgK8PiQgPhwkIw/HC/YX5Ghq2mQY5sRMZWHb3VsFkWooUVOZHKr7DmDIA==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.24.0.tgz", + "integrity": "sha512-ijLnS1qFId8xhKjT81uBHuuJp2lU4x2yxa4ctFPtG+MqEE6+C5f/+X/bStmxapgmwLwiL3ih122xv8kVARNAZA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.24.0.tgz", + "integrity": "sha512-bIv+X9xeSs1XCk6DVvkO+S/z8/2AMt/2lMqdQbMrmVpgFvXlmde9mLcbQpztXm1tajC3raFDqegsH18HQPMYtA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.24.0.tgz", + "integrity": "sha512-X6/nOwoFN7RT2svEQWUsW/5C/fYMBe4fnLK9DQk4SX4mgVBiTA9h64kjUYPvGQ0F/9xwJ5U5UfTbl6BEjaQdBQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.24.0.tgz", + "integrity": "sha512-0KXvIJQMOImLCVCz9uvvdPgfyWo93aHHp8ui3FrtOP57svqrF/roSSR5pjqL2hcMp0ljeGlU4q9o/rQaAQ3AYA==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.24.0.tgz", + "integrity": "sha512-it2BW6kKFVh8xk/BnHfakEeoLPv8STIISekpoF+nBgWM4d55CZKc7T4Dx1pEbTnYm/xEKMgy1MNtYuoA8RFIWw==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.24.0.tgz", + "integrity": "sha512-i0xTLXjqap2eRfulFVlSnM5dEbTVque/3Pi4g2y7cxrs7+a9De42z4XxKLYJ7+OhE3IgxvfQM7vQc43bwTgPwA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.24.0.tgz", + "integrity": "sha512-9E6MKUJhDuDh604Qco5yP/3qn3y7SLXYuiC0Rpr89aMScS2UAmK1wHP2b7KAa1nSjWJc/f/Lc0Wl1L47qjiyQw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.24.0.tgz", + "integrity": "sha512-2XFFPJ2XMEiF5Zi2EBf4h73oR1V/lycirxZxHZNc93SqDN/IWhYYSYj8I9381ikUFXZrz2v7r2tOVk2NBwxrWw==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.24.0.tgz", + "integrity": "sha512-M3Dg4hlwuntUCdzU7KjYqbbd+BLq3JMAOhCKdBE3TcMGMZbKkDdJ5ivNdehOssMCIokNHFOsv7DO4rlEOfyKpg==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.24.0.tgz", + "integrity": "sha512-mjBaoo4ocxJppTorZVKWFpy1bfFj9FeCMJqzlMQGjpNPY9JwQi7OuS1axzNIk0nMX6jSgy6ZURDZ2w0QW6D56g==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.24.0.tgz", + "integrity": "sha512-ZXFk7M72R0YYFN5q13niV0B7G8/5dcQ9JDp8keJSfr3GoZeXEoMHP/HlvqROA3OMbMdfr19IjCeNAnPUG93b6A==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.24.0.tgz", + "integrity": "sha512-w1i+L7kAXZNdYl+vFvzSZy8Y1arS7vMgIy8wusXJzRrPyof5LAb02KGr1PD2EkRcl73kHulIID0M501lN+vobQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.24.0.tgz", + "integrity": "sha512-VXBrnPWgBpVDCVY6XF3LEW0pOU51KbaHhccHw6AS6vBWIC60eqsH19DAeeObl+g8nKAz04QFdl/Cefta0xQtUQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.24.0.tgz", + "integrity": "sha512-xrNcGDU0OxVcPTH/8n/ShH4UevZxKIO6HJFK0e15XItZP2UcaiLFd5kiX7hJnqCbSztUF8Qot+JWBC/QXRPYWQ==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.24.0.tgz", + "integrity": "sha512-fbMkAF7fufku0N2dE5TBXcNlg0pt0cJue4xBRE2Qc5Vqikxr4VCgKj/ht6SMdFcOacVA9rqF70APJ8RN/4vMJw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/@rushstack/eslint-patch": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.3.0.tgz", @@ -6044,9 +6236,9 @@ } }, "node_modules/@types/estree": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", - "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==" + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==" }, "node_modules/@types/graceful-fs": { "version": "4.1.5", @@ -13983,6 +14175,7 @@ "version": "2.13.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dev": true, "dependencies": { "hasown": "^2.0.0" }, @@ -22881,6 +23074,7 @@ }, "node_modules/path-parse": { "version": "1.0.7", + "dev": true, "license": "MIT" }, "node_modules/path-to-regexp": { @@ -22909,9 +23103,9 @@ "license": "MIT" }, "node_modules/picocolors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", - "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", + "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==" }, "node_modules/picomatch": { "version": "2.3.1", @@ -22973,9 +23167,9 @@ } }, "node_modules/postcss": { - "version": "8.4.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", - "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", + "version": "8.4.47", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz", + "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==", "funding": [ { "type": "opencollective", @@ -22992,8 +23186,8 @@ ], "dependencies": { "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "picocolors": "^1.1.0", + "source-map-js": "^1.2.1" }, "engines": { "node": "^10 || ^12 || >=14" @@ -24022,6 +24216,7 @@ "version": "1.22.4", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", + "dev": true, "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", @@ -24202,17 +24397,36 @@ "integrity": "sha512-ndEIpszUHiG4HtDsQLeIuMvRsDnn8c8rYStabochtUeCvfuvNptb5TUbVD68LRAILPX7p9nqQGh4xJgn3EHS/g==" }, "node_modules/rollup": { - "version": "3.20.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.20.2.tgz", - "integrity": "sha512-3zwkBQl7Ai7MFYQE0y1MeQ15+9jsi7XxfrqwTb/9EK8D9C9+//EBR4M+CuA1KODRaNbFez/lWxA5vhEGZp4MUg==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.24.0.tgz", + "integrity": "sha512-DOmrlGSXNk1DM0ljiQA+i+o0rSLhtii1je5wgk60j49d1jHT5YYttBv1iWOnYSTG+fZZESUOSNiAl89SIet+Cg==", + "dependencies": { + "@types/estree": "1.0.6" + }, "bin": { "rollup": "dist/bin/rollup" }, "engines": { - "node": ">=14.18.0", + "node": ">=18.0.0", "npm": ">=8.0.0" }, "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.24.0", + "@rollup/rollup-android-arm64": "4.24.0", + "@rollup/rollup-darwin-arm64": "4.24.0", + "@rollup/rollup-darwin-x64": "4.24.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.24.0", + "@rollup/rollup-linux-arm-musleabihf": "4.24.0", + "@rollup/rollup-linux-arm64-gnu": "4.24.0", + "@rollup/rollup-linux-arm64-musl": "4.24.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.24.0", + "@rollup/rollup-linux-riscv64-gnu": "4.24.0", + "@rollup/rollup-linux-s390x-gnu": "4.24.0", + "@rollup/rollup-linux-x64-gnu": "4.24.0", + "@rollup/rollup-linux-x64-musl": "4.24.0", + "@rollup/rollup-win32-arm64-msvc": "4.24.0", + "@rollup/rollup-win32-ia32-msvc": "4.24.0", + "@rollup/rollup-win32-x64-msvc": "4.24.0", "fsevents": "~2.3.2" } }, @@ -25098,8 +25312,9 @@ } }, "node_modules/source-map-js": { - "version": "1.0.2", - "license": "BSD-3-Clause", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", "engines": { "node": ">=0.10.0" } @@ -26052,6 +26267,7 @@ }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -27377,28 +27593,32 @@ } }, "node_modules/vite": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.2.3.tgz", - "integrity": "sha512-kLU+m2q0Y434Y1kCy3TchefAdtFso0ILi0dLyFV8Us3InXTU11H/B5ZTqCKIQHzSKNxVG/yEx813EA9f1imQ9A==", + "version": "5.4.8", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.8.tgz", + "integrity": "sha512-FqrItQ4DT1NC4zCUqMB4c4AZORMKIa0m8/URVCZ77OZ/QSNeJ54bU1vrFADbDsuwfIPcgknRkmqakQcgnL4GiQ==", "dependencies": { - "esbuild": "^0.17.5", - "postcss": "^8.4.21", - "resolve": "^1.22.1", - "rollup": "^3.18.0" + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" }, "bin": { "vite": "bin/vite.js" }, "engines": { - "node": "^14.18.0 || >=16.0.0" + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" }, "optionalDependencies": { - "fsevents": "~2.3.2" + "fsevents": "~2.3.3" }, "peerDependencies": { - "@types/node": ">= 14", + "@types/node": "^18.0.0 || >=20.0.0", "less": "*", + "lightningcss": "^1.21.0", "sass": "*", + "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.4.0" @@ -27410,9 +27630,15 @@ "less": { "optional": true }, + "lightningcss": { + "optional": true + }, "sass": { "optional": true }, + "sass-embedded": { + "optional": true + }, "stylus": { "optional": true }, @@ -27576,10 +27802,25 @@ } } }, + "node_modules/vite/node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/vite/node_modules/@esbuild/android-arm": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", - "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", "cpu": [ "arm" ], @@ -27592,9 +27833,9 @@ } }, "node_modules/vite/node_modules/@esbuild/android-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", - "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", "cpu": [ "arm64" ], @@ -27607,9 +27848,9 @@ } }, "node_modules/vite/node_modules/@esbuild/android-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", - "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", "cpu": [ "x64" ], @@ -27622,9 +27863,9 @@ } }, "node_modules/vite/node_modules/@esbuild/darwin-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", - "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", "cpu": [ "arm64" ], @@ -27637,9 +27878,9 @@ } }, "node_modules/vite/node_modules/@esbuild/darwin-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", - "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", "cpu": [ "x64" ], @@ -27652,9 +27893,9 @@ } }, "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", - "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", "cpu": [ "arm64" ], @@ -27667,9 +27908,9 @@ } }, "node_modules/vite/node_modules/@esbuild/freebsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", - "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", "cpu": [ "x64" ], @@ -27682,9 +27923,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-arm": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", - "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", "cpu": [ "arm" ], @@ -27697,9 +27938,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", - "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", "cpu": [ "arm64" ], @@ -27712,9 +27953,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-ia32": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", - "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", "cpu": [ "ia32" ], @@ -27727,9 +27968,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-loong64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", - "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", "cpu": [ "loong64" ], @@ -27742,9 +27983,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-mips64el": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", - "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", "cpu": [ "mips64el" ], @@ -27757,9 +27998,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-ppc64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", - "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", "cpu": [ "ppc64" ], @@ -27772,9 +28013,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-riscv64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", - "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", "cpu": [ "riscv64" ], @@ -27787,9 +28028,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-s390x": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", - "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", "cpu": [ "s390x" ], @@ -27802,9 +28043,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", - "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", "cpu": [ "x64" ], @@ -27817,9 +28058,9 @@ } }, "node_modules/vite/node_modules/@esbuild/netbsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", - "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", "cpu": [ "x64" ], @@ -27832,9 +28073,9 @@ } }, "node_modules/vite/node_modules/@esbuild/openbsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", - "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", "cpu": [ "x64" ], @@ -27847,9 +28088,9 @@ } }, "node_modules/vite/node_modules/@esbuild/sunos-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", - "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", "cpu": [ "x64" ], @@ -27862,9 +28103,9 @@ } }, "node_modules/vite/node_modules/@esbuild/win32-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", - "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", "cpu": [ "arm64" ], @@ -27877,9 +28118,9 @@ } }, "node_modules/vite/node_modules/@esbuild/win32-ia32": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", - "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", "cpu": [ "ia32" ], @@ -27892,9 +28133,9 @@ } }, "node_modules/vite/node_modules/@esbuild/win32-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", - "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", "cpu": [ "x64" ], @@ -27907,9 +28148,9 @@ } }, "node_modules/vite/node_modules/esbuild": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", - "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", "hasInstallScript": true, "bin": { "esbuild": "bin/esbuild" @@ -27918,34 +28159,35 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/android-arm": "0.17.19", - "@esbuild/android-arm64": "0.17.19", - "@esbuild/android-x64": "0.17.19", - "@esbuild/darwin-arm64": "0.17.19", - "@esbuild/darwin-x64": "0.17.19", - "@esbuild/freebsd-arm64": "0.17.19", - "@esbuild/freebsd-x64": "0.17.19", - "@esbuild/linux-arm": "0.17.19", - "@esbuild/linux-arm64": "0.17.19", - "@esbuild/linux-ia32": "0.17.19", - "@esbuild/linux-loong64": "0.17.19", - "@esbuild/linux-mips64el": "0.17.19", - "@esbuild/linux-ppc64": "0.17.19", - "@esbuild/linux-riscv64": "0.17.19", - "@esbuild/linux-s390x": "0.17.19", - "@esbuild/linux-x64": "0.17.19", - "@esbuild/netbsd-x64": "0.17.19", - "@esbuild/openbsd-x64": "0.17.19", - "@esbuild/sunos-x64": "0.17.19", - "@esbuild/win32-arm64": "0.17.19", - "@esbuild/win32-ia32": "0.17.19", - "@esbuild/win32-x64": "0.17.19" + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" } }, "node_modules/vite/node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "hasInstallScript": true, "optional": true, "os": [ @@ -32001,6 +32243,102 @@ "picomatch": "^2.3.1" } }, + "@rollup/rollup-android-arm-eabi": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.24.0.tgz", + "integrity": "sha512-Q6HJd7Y6xdB48x8ZNVDOqsbh2uByBhgK8PiQgPhwkIw/HC/YX5Ghq2mQY5sRMZWHb3VsFkWooUVOZHKr7DmDIA==", + "optional": true + }, + "@rollup/rollup-android-arm64": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.24.0.tgz", + "integrity": "sha512-ijLnS1qFId8xhKjT81uBHuuJp2lU4x2yxa4ctFPtG+MqEE6+C5f/+X/bStmxapgmwLwiL3ih122xv8kVARNAZA==", + "optional": true + }, + "@rollup/rollup-darwin-arm64": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.24.0.tgz", + "integrity": "sha512-bIv+X9xeSs1XCk6DVvkO+S/z8/2AMt/2lMqdQbMrmVpgFvXlmde9mLcbQpztXm1tajC3raFDqegsH18HQPMYtA==", + "optional": true + }, + "@rollup/rollup-darwin-x64": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.24.0.tgz", + "integrity": "sha512-X6/nOwoFN7RT2svEQWUsW/5C/fYMBe4fnLK9DQk4SX4mgVBiTA9h64kjUYPvGQ0F/9xwJ5U5UfTbl6BEjaQdBQ==", + "optional": true + }, + "@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.24.0.tgz", + "integrity": "sha512-0KXvIJQMOImLCVCz9uvvdPgfyWo93aHHp8ui3FrtOP57svqrF/roSSR5pjqL2hcMp0ljeGlU4q9o/rQaAQ3AYA==", + "optional": true + }, + "@rollup/rollup-linux-arm-musleabihf": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.24.0.tgz", + "integrity": "sha512-it2BW6kKFVh8xk/BnHfakEeoLPv8STIISekpoF+nBgWM4d55CZKc7T4Dx1pEbTnYm/xEKMgy1MNtYuoA8RFIWw==", + "optional": true + }, + "@rollup/rollup-linux-arm64-gnu": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.24.0.tgz", + "integrity": "sha512-i0xTLXjqap2eRfulFVlSnM5dEbTVque/3Pi4g2y7cxrs7+a9De42z4XxKLYJ7+OhE3IgxvfQM7vQc43bwTgPwA==", + "optional": true + }, + "@rollup/rollup-linux-arm64-musl": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.24.0.tgz", + "integrity": "sha512-9E6MKUJhDuDh604Qco5yP/3qn3y7SLXYuiC0Rpr89aMScS2UAmK1wHP2b7KAa1nSjWJc/f/Lc0Wl1L47qjiyQw==", + "optional": true + }, + "@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.24.0.tgz", + "integrity": "sha512-2XFFPJ2XMEiF5Zi2EBf4h73oR1V/lycirxZxHZNc93SqDN/IWhYYSYj8I9381ikUFXZrz2v7r2tOVk2NBwxrWw==", + "optional": true + }, + "@rollup/rollup-linux-riscv64-gnu": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.24.0.tgz", + "integrity": "sha512-M3Dg4hlwuntUCdzU7KjYqbbd+BLq3JMAOhCKdBE3TcMGMZbKkDdJ5ivNdehOssMCIokNHFOsv7DO4rlEOfyKpg==", + "optional": true + }, + "@rollup/rollup-linux-s390x-gnu": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.24.0.tgz", + "integrity": "sha512-mjBaoo4ocxJppTorZVKWFpy1bfFj9FeCMJqzlMQGjpNPY9JwQi7OuS1axzNIk0nMX6jSgy6ZURDZ2w0QW6D56g==", + "optional": true + }, + "@rollup/rollup-linux-x64-gnu": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.24.0.tgz", + "integrity": "sha512-ZXFk7M72R0YYFN5q13niV0B7G8/5dcQ9JDp8keJSfr3GoZeXEoMHP/HlvqROA3OMbMdfr19IjCeNAnPUG93b6A==", + "optional": true + }, + "@rollup/rollup-linux-x64-musl": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.24.0.tgz", + "integrity": "sha512-w1i+L7kAXZNdYl+vFvzSZy8Y1arS7vMgIy8wusXJzRrPyof5LAb02KGr1PD2EkRcl73kHulIID0M501lN+vobQ==", + "optional": true + }, + "@rollup/rollup-win32-arm64-msvc": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.24.0.tgz", + "integrity": "sha512-VXBrnPWgBpVDCVY6XF3LEW0pOU51KbaHhccHw6AS6vBWIC60eqsH19DAeeObl+g8nKAz04QFdl/Cefta0xQtUQ==", + "optional": true + }, + "@rollup/rollup-win32-ia32-msvc": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.24.0.tgz", + "integrity": "sha512-xrNcGDU0OxVcPTH/8n/ShH4UevZxKIO6HJFK0e15XItZP2UcaiLFd5kiX7hJnqCbSztUF8Qot+JWBC/QXRPYWQ==", + "optional": true + }, + "@rollup/rollup-win32-x64-msvc": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.24.0.tgz", + "integrity": "sha512-fbMkAF7fufku0N2dE5TBXcNlg0pt0cJue4xBRE2Qc5Vqikxr4VCgKj/ht6SMdFcOacVA9rqF70APJ8RN/4vMJw==", + "optional": true + }, "@rushstack/eslint-patch": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.3.0.tgz", @@ -32349,9 +32687,9 @@ } }, "@types/estree": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", - "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==" + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==" }, "@types/graceful-fs": { "version": "4.1.5", @@ -37826,6 +38164,7 @@ "version": "2.13.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dev": true, "requires": { "hasown": "^2.0.0" } @@ -43952,7 +44291,8 @@ "dev": true }, "path-parse": { - "version": "1.0.7" + "version": "1.0.7", + "dev": true }, "path-to-regexp": { "version": "0.1.7" @@ -43974,9 +44314,9 @@ "dev": true }, "picocolors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", - "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", + "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==" }, "picomatch": { "version": "2.3.1" @@ -44009,13 +44349,13 @@ "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==" }, "postcss": { - "version": "8.4.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", - "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", + "version": "8.4.47", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz", + "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==", "requires": { "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "picocolors": "^1.1.0", + "source-map-js": "^1.2.1" } }, "postcss-media-query-parser": { @@ -44692,6 +45032,7 @@ "version": "1.22.4", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", + "dev": true, "requires": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", @@ -44815,10 +45156,27 @@ "integrity": "sha512-ndEIpszUHiG4HtDsQLeIuMvRsDnn8c8rYStabochtUeCvfuvNptb5TUbVD68LRAILPX7p9nqQGh4xJgn3EHS/g==" }, "rollup": { - "version": "3.20.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.20.2.tgz", - "integrity": "sha512-3zwkBQl7Ai7MFYQE0y1MeQ15+9jsi7XxfrqwTb/9EK8D9C9+//EBR4M+CuA1KODRaNbFez/lWxA5vhEGZp4MUg==", - "requires": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.24.0.tgz", + "integrity": "sha512-DOmrlGSXNk1DM0ljiQA+i+o0rSLhtii1je5wgk60j49d1jHT5YYttBv1iWOnYSTG+fZZESUOSNiAl89SIet+Cg==", + "requires": { + "@rollup/rollup-android-arm-eabi": "4.24.0", + "@rollup/rollup-android-arm64": "4.24.0", + "@rollup/rollup-darwin-arm64": "4.24.0", + "@rollup/rollup-darwin-x64": "4.24.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.24.0", + "@rollup/rollup-linux-arm-musleabihf": "4.24.0", + "@rollup/rollup-linux-arm64-gnu": "4.24.0", + "@rollup/rollup-linux-arm64-musl": "4.24.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.24.0", + "@rollup/rollup-linux-riscv64-gnu": "4.24.0", + "@rollup/rollup-linux-s390x-gnu": "4.24.0", + "@rollup/rollup-linux-x64-gnu": "4.24.0", + "@rollup/rollup-linux-x64-musl": "4.24.0", + "@rollup/rollup-win32-arm64-msvc": "4.24.0", + "@rollup/rollup-win32-ia32-msvc": "4.24.0", + "@rollup/rollup-win32-x64-msvc": "4.24.0", + "@types/estree": "1.0.6", "fsevents": "~2.3.2" }, "dependencies": { @@ -45415,7 +45773,9 @@ } }, "source-map-js": { - "version": "1.0.2" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==" }, "source-map-resolve": { "version": "0.5.3", @@ -46063,7 +46423,8 @@ } }, "supports-preserve-symlinks-flag": { - "version": "1.0.0" + "version": "1.0.0", + "dev": true }, "svg-parser": { "version": "2.0.4", @@ -46974,182 +47335,188 @@ } }, "vite": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.2.3.tgz", - "integrity": "sha512-kLU+m2q0Y434Y1kCy3TchefAdtFso0ILi0dLyFV8Us3InXTU11H/B5ZTqCKIQHzSKNxVG/yEx813EA9f1imQ9A==", + "version": "5.4.8", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.8.tgz", + "integrity": "sha512-FqrItQ4DT1NC4zCUqMB4c4AZORMKIa0m8/URVCZ77OZ/QSNeJ54bU1vrFADbDsuwfIPcgknRkmqakQcgnL4GiQ==", "requires": { - "esbuild": "^0.17.5", - "fsevents": "~2.3.2", - "postcss": "^8.4.21", - "resolve": "^1.22.1", - "rollup": "^3.18.0" + "esbuild": "^0.21.3", + "fsevents": "~2.3.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" }, "dependencies": { + "@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "optional": true + }, "@esbuild/android-arm": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", - "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", "optional": true }, "@esbuild/android-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", - "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", "optional": true }, "@esbuild/android-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", - "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", "optional": true }, "@esbuild/darwin-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", - "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", "optional": true }, "@esbuild/darwin-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", - "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", "optional": true }, "@esbuild/freebsd-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", - "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", "optional": true }, "@esbuild/freebsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", - "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", "optional": true }, "@esbuild/linux-arm": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", - "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", "optional": true }, "@esbuild/linux-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", - "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", "optional": true }, "@esbuild/linux-ia32": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", - "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", "optional": true }, "@esbuild/linux-loong64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", - "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", "optional": true }, "@esbuild/linux-mips64el": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", - "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", "optional": true }, "@esbuild/linux-ppc64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", - "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", "optional": true }, "@esbuild/linux-riscv64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", - "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", "optional": true }, "@esbuild/linux-s390x": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", - "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", "optional": true }, "@esbuild/linux-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", - "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", "optional": true }, "@esbuild/netbsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", - "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", "optional": true }, "@esbuild/openbsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", - "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", "optional": true }, "@esbuild/sunos-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", - "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", "optional": true }, "@esbuild/win32-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", - "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", "optional": true }, "@esbuild/win32-ia32": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", - "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", "optional": true }, "@esbuild/win32-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", - "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", "optional": true }, "esbuild": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", - "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", - "requires": { - "@esbuild/android-arm": "0.17.19", - "@esbuild/android-arm64": "0.17.19", - "@esbuild/android-x64": "0.17.19", - "@esbuild/darwin-arm64": "0.17.19", - "@esbuild/darwin-x64": "0.17.19", - "@esbuild/freebsd-arm64": "0.17.19", - "@esbuild/freebsd-x64": "0.17.19", - "@esbuild/linux-arm": "0.17.19", - "@esbuild/linux-arm64": "0.17.19", - "@esbuild/linux-ia32": "0.17.19", - "@esbuild/linux-loong64": "0.17.19", - "@esbuild/linux-mips64el": "0.17.19", - "@esbuild/linux-ppc64": "0.17.19", - "@esbuild/linux-riscv64": "0.17.19", - "@esbuild/linux-s390x": "0.17.19", - "@esbuild/linux-x64": "0.17.19", - "@esbuild/netbsd-x64": "0.17.19", - "@esbuild/openbsd-x64": "0.17.19", - "@esbuild/sunos-x64": "0.17.19", - "@esbuild/win32-arm64": "0.17.19", - "@esbuild/win32-ia32": "0.17.19", - "@esbuild/win32-x64": "0.17.19" + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "requires": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" } }, "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "optional": true } } diff --git a/package.json b/package.json index d23c9d72b..ced1dfd04 100644 --- a/package.json +++ b/package.json @@ -49,7 +49,7 @@ "ripple-address-codec": "^5.0.0", "topojson-client": "^3.0.0", "usehooks-ts": "^3.1.0", - "vite": "^4.2.3", + "vite": "^5.4.8", "vite-plugin-environment": "^1.1.3", "vite-plugin-html": "^3.2.0", "vite-plugin-svgr": "^4.2.0", From f6bd85405f4591b01e0e17afbf4a8b958f87ef3d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 2 Oct 2024 18:25:53 +0000 Subject: [PATCH 43/79] chore(deps): bump debug from 4.3.6 to 4.3.7 (#1048) --- package-lock.json | 34 +++++++++++++++------------------- package.json | 2 +- 2 files changed, 16 insertions(+), 20 deletions(-) diff --git a/package-lock.json b/package-lock.json index c13e3c552..1ece46d36 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26,7 +26,7 @@ "d3-geo": "^3.1.0", "d3-hexbin": "^0.2.2", "d3-scale": "^4.0.2", - "debug": "^4.3.6", + "debug": "^4.3.7", "dotenv": "^16.4.5", "enzyme": "3.11.0", "enzyme-adapter-react-17-updated": "^1.0.2", @@ -10099,11 +10099,11 @@ } }, "node_modules/debug": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", - "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -22262,8 +22262,9 @@ } }, "node_modules/ms": { - "version": "2.1.2", - "license": "MIT" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "node_modules/mv": { "version": "2.1.1", @@ -24674,10 +24675,6 @@ "node": ">= 0.8" } }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "license": "MIT" - }, "node_modules/send/node_modules/statuses": { "version": "2.0.1", "license": "MIT", @@ -35376,11 +35373,11 @@ } }, "debug": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", - "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "requires": { - "ms": "2.1.2" + "ms": "^2.1.3" } }, "decamelize": { @@ -43763,7 +43760,9 @@ "requires": {} }, "ms": { - "version": "2.1.2" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "mv": { "version": "2.1.1", @@ -45340,9 +45339,6 @@ "depd": { "version": "2.0.0" }, - "ms": { - "version": "2.1.3" - }, "statuses": { "version": "2.0.1" } diff --git a/package.json b/package.json index ced1dfd04..722babc6b 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ "d3-geo": "^3.1.0", "d3-hexbin": "^0.2.2", "d3-scale": "^4.0.2", - "debug": "^4.3.6", + "debug": "^4.3.7", "dotenv": "^16.4.5", "enzyme": "3.11.0", "enzyme-adapter-react-17-updated": "^1.0.2", From ade2d89c5a737bc77923df61d7e90f2006f139cf Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 2 Oct 2024 18:34:53 +0000 Subject: [PATCH 44/79] chore(deps): bump @google-cloud/bigquery from 7.9.0 to 7.9.1 (#1049) --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1ece46d36..d31cafdc1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,7 +8,7 @@ "name": "explorer", "version": "1.5.0", "dependencies": { - "@google-cloud/bigquery": "^7.9.0", + "@google-cloud/bigquery": "^7.9.1", "@paystring/utils": "^2.0.0", "@redux-devtools/extension": "^3.3.0", "@rollup/plugin-inject": "^5.0.5", @@ -2866,9 +2866,9 @@ } }, "node_modules/@google-cloud/bigquery": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@google-cloud/bigquery/-/bigquery-7.9.0.tgz", - "integrity": "sha512-KJTimGLDlAR1IfZ4Y8xhIVfoZ+XBXd0GGuJttLSXxtR0g+4vNsUt0xS33PRVa5TXey97374yU+uWNlCb5bHwBw==", + "version": "7.9.1", + "resolved": "https://registry.npmjs.org/@google-cloud/bigquery/-/bigquery-7.9.1.tgz", + "integrity": "sha512-ZkcRMpBoFLxIh6TiQBywA22yT3c2j0f07AHWEMjtYqMQzZQbFrpxuJU2COp3tyjZ91ZIGHe4gY7/dGZL88cltg==", "dependencies": { "@google-cloud/common": "^5.0.0", "@google-cloud/paginator": "^5.0.2", @@ -30383,9 +30383,9 @@ "dev": true }, "@google-cloud/bigquery": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@google-cloud/bigquery/-/bigquery-7.9.0.tgz", - "integrity": "sha512-KJTimGLDlAR1IfZ4Y8xhIVfoZ+XBXd0GGuJttLSXxtR0g+4vNsUt0xS33PRVa5TXey97374yU+uWNlCb5bHwBw==", + "version": "7.9.1", + "resolved": "https://registry.npmjs.org/@google-cloud/bigquery/-/bigquery-7.9.1.tgz", + "integrity": "sha512-ZkcRMpBoFLxIh6TiQBywA22yT3c2j0f07AHWEMjtYqMQzZQbFrpxuJU2COp3tyjZ91ZIGHe4gY7/dGZL88cltg==", "requires": { "@google-cloud/common": "^5.0.0", "@google-cloud/paginator": "^5.0.2", diff --git a/package.json b/package.json index 722babc6b..a9d5d7d5e 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "description": "XRPL Data Visualization", "version": "1.5.0", "dependencies": { - "@google-cloud/bigquery": "^7.9.0", + "@google-cloud/bigquery": "^7.9.1", "@paystring/utils": "^2.0.0", "@redux-devtools/extension": "^3.3.0", "@rollup/plugin-inject": "^5.0.5", From e1e37de1a2b82f5e44e617ee2b4b25d5f263ea3e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 2 Oct 2024 18:58:47 +0000 Subject: [PATCH 45/79] chore(deps-dev): bump @babel/preset-env from 7.25.3 to 7.25.7 (#1053) --- package-lock.json | 2050 ++++++++++++++++++++++----------------------- package.json | 2 +- 2 files changed, 1019 insertions(+), 1033 deletions(-) diff --git a/package-lock.json b/package-lock.json index d31cafdc1..0c886fb87 100644 --- a/package-lock.json +++ b/package-lock.json @@ -63,7 +63,7 @@ }, "devDependencies": { "@babel/eslint-parser": "^7.22.6", - "@babel/preset-env": "^7.25.3", + "@babel/preset-env": "^7.25.7", "@babel/preset-react": "^7.24.7", "@types/create-hash": "^1.2.6", "@types/enzyme": "^3.10.12", @@ -152,11 +152,11 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", - "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.25.7.tgz", + "integrity": "sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g==", "dependencies": { - "@babel/highlight": "^7.24.7", + "@babel/highlight": "^7.25.7", "picocolors": "^1.0.0" }, "engines": { @@ -164,9 +164,9 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.2.tgz", - "integrity": "sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.7.tgz", + "integrity": "sha512-9ickoLz+hcXCeh7jrcin+/SLWm+GkxE2kTvoYyp38p4WkdFXfQJxDFGWp/YHjiKLPx06z2A7W8XKuqbReXDzsw==", "engines": { "node": ">=6.9.0" } @@ -240,52 +240,52 @@ } }, "node_modules/@babel/generator": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz", - "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.7.tgz", + "integrity": "sha512-5Dqpl5fyV9pIAD62yK9P7fcA768uVPUyrQmqpqstHWgMma4feF1x/oFysBCVZLY5wJ2GkMUCdsNDnGZrPoR6rA==", "dependencies": { - "@babel/types": "^7.25.0", + "@babel/types": "^7.25.7", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^2.5.1" + "jsesc": "^3.0.2" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz", - "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.7.tgz", + "integrity": "sha512-4xwU8StnqnlIhhioZf1tqnVWeQ9pvH/ujS8hRfw/WOza+/a+1qv69BWNy+oY231maTCWgKWhfBU7kDpsds6zAA==", "dev": true, "dependencies": { - "@babel/types": "^7.24.7" + "@babel/types": "^7.25.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz", - "integrity": "sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.25.7.tgz", + "integrity": "sha512-12xfNeKNH7jubQNm7PAkzlLwEmCs1tfuX3UjIw6vP6QXi+leKh6+LyC/+Ed4EIQermwd58wsyh070yjDHFlNGg==", "dev": true, "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", - "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.7.tgz", + "integrity": "sha512-DniTEax0sv6isaw6qSQSfV4gVRNtw2rte8HHM45t9ZR0xILaufBRNkpMifCRiAPyvL4ACD6v0gfCwCmtOQaV4A==", "dependencies": { - "@babel/compat-data": "^7.25.2", - "@babel/helper-validator-option": "^7.24.8", - "browserslist": "^4.23.1", + "@babel/compat-data": "^7.25.7", + "@babel/helper-validator-option": "^7.25.7", + "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -315,17 +315,17 @@ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.0.tgz", - "integrity": "sha512-GYM6BxeQsETc9mnct+nIIpf63SAyzvyYN7UB/IlTyd+MBg06afFGp0mIeUqGyWgS2mxad6vqbMrHVlaL3m70sQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.7.tgz", + "integrity": "sha512-bD4WQhbkx80mAyj/WCm4ZHcF4rDxkoLFO6ph8/5/mQ3z4vAzltQXAmbc7GvVJx5H+lk5Mi5EmbTeox5nMGCsbw==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-member-expression-to-functions": "^7.24.8", - "@babel/helper-optimise-call-expression": "^7.24.7", - "@babel/helper-replace-supers": "^7.25.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", - "@babel/traverse": "^7.25.0", + "@babel/helper-annotate-as-pure": "^7.25.7", + "@babel/helper-member-expression-to-functions": "^7.25.7", + "@babel/helper-optimise-call-expression": "^7.25.7", + "@babel/helper-replace-supers": "^7.25.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7", + "@babel/traverse": "^7.25.7", "semver": "^6.3.1" }, "engines": { @@ -345,13 +345,13 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.2.tgz", - "integrity": "sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.7.tgz", + "integrity": "sha512-byHhumTj/X47wJ6C6eLpK7wW/WBEcnUeb7D0FNc/jFQnQVw7DOso3Zz5u9x/zLrFVkHa89ZGDbkAa1D54NdrCQ==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "regexpu-core": "^5.3.1", + "@babel/helper-annotate-as-pure": "^7.25.7", + "regexpu-core": "^6.1.1", "semver": "^6.3.1" }, "engines": { @@ -387,39 +387,39 @@ } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz", - "integrity": "sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.7.tgz", + "integrity": "sha512-O31Ssjd5K6lPbTX9AAYpSKrZmLeagt9uwschJd+Ixo6QiRyfpvgtVQp8qrDR9UNFjZ8+DO34ZkdrN+BnPXemeA==", "dev": true, "dependencies": { - "@babel/traverse": "^7.24.8", - "@babel/types": "^7.24.8" + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", - "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.7.tgz", + "integrity": "sha512-o0xCgpNmRohmnoWKQ0Ij8IdddjyBFE4T2kagL/x6M3+4zUgc+4qTOUBoNe4XxDskt1HPKO007ZPiMgLDq2s7Kw==", "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", - "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.7.tgz", + "integrity": "sha512-k/6f8dKG3yDz/qCwSM+RKovjMix563SLxQFo0UhRNo239SP6n9u5/eLtKD6EAjwta2JHJ49CsD8pms2HdNiMMQ==", "dependencies": { - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-simple-access": "^7.24.7", - "@babel/helper-validator-identifier": "^7.24.7", - "@babel/traverse": "^7.25.2" + "@babel/helper-module-imports": "^7.25.7", + "@babel/helper-simple-access": "^7.25.7", + "@babel/helper-validator-identifier": "^7.25.7", + "@babel/traverse": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -429,34 +429,34 @@ } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz", - "integrity": "sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.7.tgz", + "integrity": "sha512-VAwcwuYhv/AT+Vfr28c9y6SHzTan1ryqrydSTFGjU0uDJHw3uZ+PduI8plCLkRsDnqK2DMEDmwrOQRsK/Ykjng==", "dev": true, "dependencies": { - "@babel/types": "^7.24.7" + "@babel/types": "^7.25.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", - "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.7.tgz", + "integrity": "sha512-eaPZai0PiqCi09pPs3pAFfl/zYgGaE6IdXtYvmf0qlcDTd3WCtO7JWCcRd64e0EQrcYgiHibEZnOGsSY4QSgaw==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.0.tgz", - "integrity": "sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.7.tgz", + "integrity": "sha512-kRGE89hLnPfcz6fTrlNU+uhgcwv0mBE4Gv3P9Ke9kLVJYpi4AMVVEElXvB5CabrPZW4nCM8P8UyyjrzCM0O2sw==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-wrap-function": "^7.25.0", - "@babel/traverse": "^7.25.0" + "@babel/helper-annotate-as-pure": "^7.25.7", + "@babel/helper-wrap-function": "^7.25.7", + "@babel/traverse": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -466,14 +466,14 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz", - "integrity": "sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.7.tgz", + "integrity": "sha512-iy8JhqlUW9PtZkd4pHM96v6BdJ66Ba9yWSE4z0W4TvSZwLBPkyDsiIU3ENe4SmrzRBs76F7rQXTy1lYC49n6Lw==", "dev": true, "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.24.8", - "@babel/helper-optimise-call-expression": "^7.24.7", - "@babel/traverse": "^7.25.0" + "@babel/helper-member-expression-to-functions": "^7.25.7", + "@babel/helper-optimise-call-expression": "^7.25.7", + "@babel/traverse": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -483,25 +483,25 @@ } }, "node_modules/@babel/helper-simple-access": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", - "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.25.7.tgz", + "integrity": "sha512-FPGAkJmyoChQeM+ruBGIDyrT2tKfZJO8NcxdC+CWNJi7N8/rZpSxK7yvBJ5O/nF1gfu5KzN7VKG3YVSLFfRSxQ==", "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz", - "integrity": "sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.7.tgz", + "integrity": "sha512-pPbNbchZBkPMD50K0p3JGcFMNLVUCuU/ABybm/PGNj4JiHrpmNyqqCphBk4i19xXtNV0JhldQJJtbSW5aUvbyA==", "dev": true, "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -520,38 +520,38 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", - "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.7.tgz", + "integrity": "sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", - "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.7.tgz", + "integrity": "sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", - "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.7.tgz", + "integrity": "sha512-ytbPLsm+GjArDYXJ8Ydr1c/KJuutjF2besPNbIZnZ6MKUxi/uTA22t2ymmA4WFjZFpjiAMO0xuuJPqK2nvDVfQ==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.0.tgz", - "integrity": "sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.7.tgz", + "integrity": "sha512-MA0roW3JF2bD1ptAaJnvcabsVlNQShUaThyJbCDD4bCp8NEgiFvpoqRI2YS22hHlc2thjO/fTg2ShLMC3jygAg==", "dev": true, "dependencies": { - "@babel/template": "^7.25.0", - "@babel/traverse": "^7.25.0", - "@babel/types": "^7.25.0" + "@babel/template": "^7.25.7", + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -571,11 +571,11 @@ } }, "node_modules/@babel/highlight": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", - "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.25.7.tgz", + "integrity": "sha512-iYyACpW3iW8Fw+ZybQK+drQre+ns/tKpXbNESfrhNnPLIklLbXr7MYJ6gPEd0iETGLOK+SxMjVvKb/ffmk+FEw==", "dependencies": { - "@babel/helper-validator-identifier": "^7.24.7", + "@babel/helper-validator-identifier": "^7.25.7", "chalk": "^2.4.2", "js-tokens": "^4.0.0", "picocolors": "^1.0.0" @@ -585,11 +585,11 @@ } }, "node_modules/@babel/parser": { - "version": "7.25.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz", - "integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.7.tgz", + "integrity": "sha512-aZn7ETtQsjjGG5HruveUK06cU3Hljuhd9Iojm4M8WWv3wLE6OkE5PWbDUkItmMgegmccaITudyuW5RPYrYlgWw==", "dependencies": { - "@babel/types": "^7.25.2" + "@babel/types": "^7.25.7" }, "bin": { "parser": "bin/babel-parser.js" @@ -599,13 +599,13 @@ } }, "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { - "version": "7.25.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.3.tgz", - "integrity": "sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.7.tgz", + "integrity": "sha512-UV9Lg53zyebzD1DwQoT9mzkEKa922LNUp5YkTJ6Uta0RbyXaQNUgcvSt7qIu1PpPzVb6rd10OVNTzkyBGeVmxQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/traverse": "^7.25.3" + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/traverse": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -615,12 +615,12 @@ } }, "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.0.tgz", - "integrity": "sha512-Bm4bH2qsX880b/3ziJ8KD711LT7z4u8CFudmjqle65AZj/HNUFhEf90dqYv6O86buWvSBmeQDjv0Tn2aF/bIBA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.7.tgz", + "integrity": "sha512-GDDWeVLNxRIkQTnJn2pDOM1pkCgYdSqPeT1a9vh9yIqu2uzzgw1zcqEb+IJOhy+dTBMlNdThrDIksr2o09qrrQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -630,12 +630,12 @@ } }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.0.tgz", - "integrity": "sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.7.tgz", + "integrity": "sha512-wxyWg2RYaSUYgmd9MR0FyRGyeOMQE/Uzr1wzd/g5cf5bwi9A4v6HFdDm7y1MgDtod/fLOSTZY6jDgV0xU9d5bA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -645,14 +645,14 @@ } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz", - "integrity": "sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.7.tgz", + "integrity": "sha512-Xwg6tZpLxc4iQjorYsyGMyfJE7nP5MV8t/Ka58BgiA7Jw0fRqQNcANlLfdJ/yvBt9z9LD2We+BEkT7vLqZRWng==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", - "@babel/plugin-transform-optional-chaining": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7", + "@babel/plugin-transform-optional-chaining": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -662,13 +662,13 @@ } }, "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.0.tgz", - "integrity": "sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.7.tgz", + "integrity": "sha512-UVATLMidXrnH+GMUIuxq55nejlj02HP7F5ETyBONzP6G87fPBogG4CH6kxrSrdIuAjdwNO9VzyaYsrZPscWUrw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/traverse": "^7.25.0" + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/traverse": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -893,12 +893,12 @@ } }, "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.7.tgz", - "integrity": "sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.25.7.tgz", + "integrity": "sha512-ZvZQRmME0zfJnDQnVBKYzHxXT7lYBB3Revz1GuS7oLXWMgqUPX4G+DDbT30ICClht9WKV34QVrZhSw6WdklwZQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -908,12 +908,12 @@ } }, "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.7.tgz", - "integrity": "sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.25.7.tgz", + "integrity": "sha512-AqVo+dguCgmpi/3mYBdu9lkngOBlQ2w2vnNpa6gfiCxQZLzV4ZbhsXitJ2Yblkoe1VQwtHSaNmIaGll/26YWRw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1087,12 +1087,12 @@ } }, "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz", - "integrity": "sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.7.tgz", + "integrity": "sha512-EJN2mKxDwfOUCPxMO6MUI58RN3ganiRAG/MS/S3HfB6QFNjroAMelQo/gybyYq97WerCBAZoyrAoW8Tzdq2jWg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1102,15 +1102,15 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.0.tgz", - "integrity": "sha512-uaIi2FdqzjpAMvVqvB51S42oC2JEVgh0LDsGfZVDysWE8LrJtQC2jvKmOqEYThKyB7bDEb7BP1GYWDm7tABA0Q==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.7.tgz", + "integrity": "sha512-4B6OhTrwYKHYYgcwErvZjbmH9X5TxQBsaBHdzEIB4l71gR5jh/tuHGlb9in47udL2+wVUcOz5XXhhfhVJwEpEg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-remap-async-to-generator": "^7.25.0", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-remap-async-to-generator": "^7.25.7", "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/traverse": "^7.25.0" + "@babel/traverse": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1120,14 +1120,14 @@ } }, "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz", - "integrity": "sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.7.tgz", + "integrity": "sha512-ZUCjAavsh5CESCmi/xCpX1qcCaAglzs/7tmuvoFnJgA1dM7gQplsguljoTg+Ru8WENpX89cQyAtWoaE0I3X3Pg==", "dev": true, "dependencies": { - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-remap-async-to-generator": "^7.24.7" + "@babel/helper-module-imports": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-remap-async-to-generator": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1137,12 +1137,12 @@ } }, "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz", - "integrity": "sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.25.7.tgz", + "integrity": "sha512-xHttvIM9fvqW+0a3tZlYcZYSBpSWzGBFIt/sYG3tcdSzBB8ZeVgz2gBP7Df+sM0N1850jrviYSSeUuc+135dmQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1152,12 +1152,12 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.0.tgz", - "integrity": "sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.7.tgz", + "integrity": "sha512-ZEPJSkVZaeTFG/m2PARwLZQ+OG0vFIhPlKHK/JdIMy8DbRJ/htz6LRrTFtdzxi9EHmcwbNPAKDnadpNSIW+Aow==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1167,13 +1167,13 @@ } }, "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.7.tgz", - "integrity": "sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.7.tgz", + "integrity": "sha512-mhyfEW4gufjIqYFo9krXHJ3ElbFLIze5IDp+wQTxoPd+mwFb1NxatNAwmv8Q8Iuxv7Zc+q8EkiMQwc9IhyGf4g==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-class-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1183,13 +1183,13 @@ } }, "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz", - "integrity": "sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.25.7.tgz", + "integrity": "sha512-rvUUtoVlkDWtDWxGAiiQj0aNktTPn3eFynBcMC2IhsXweehwgdI9ODe+XjWw515kEmv22sSOTp/rxIRuTiB7zg==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-create-class-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", "@babel/plugin-syntax-class-static-block": "^7.14.5" }, "engines": { @@ -1200,16 +1200,16 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.0.tgz", - "integrity": "sha512-xyi6qjr/fYU304fiRwFbekzkqVJZ6A7hOjWZd+89FVcBqPV3S9Wuozz82xdpLspckeaafntbzglaW4pqpzvtSw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.7.tgz", + "integrity": "sha512-9j9rnl+YCQY0IGoeipXvnk3niWicIB6kCsWRGLwX241qSXpbA4MKxtp/EdvFxsc4zI5vqfLxzOd0twIJ7I99zg==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-compilation-targets": "^7.24.8", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-replace-supers": "^7.25.0", - "@babel/traverse": "^7.25.0", + "@babel/helper-annotate-as-pure": "^7.25.7", + "@babel/helper-compilation-targets": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-replace-supers": "^7.25.7", + "@babel/traverse": "^7.25.7", "globals": "^11.1.0" }, "engines": { @@ -1220,13 +1220,13 @@ } }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz", - "integrity": "sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.7.tgz", + "integrity": "sha512-QIv+imtM+EtNxg/XBKL3hiWjgdLjMOmZ+XzQwSgmBfKbfxUjBzGgVPklUuE55eq5/uVoh8gg3dqlrwR/jw3ZeA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/template": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/template": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1236,12 +1236,12 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.8.tgz", - "integrity": "sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.7.tgz", + "integrity": "sha512-xKcfLTlJYUczdaM1+epcdh1UGewJqr9zATgrNHcLBcV2QmfvPPEixo/sK/syql9cEmbr7ulu5HMFG5vbbt/sEA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1251,13 +1251,13 @@ } }, "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz", - "integrity": "sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.7.tgz", + "integrity": "sha512-kXzXMMRzAtJdDEgQBLF4oaiT6ZCU3oWHgpARnTKDAqPkDJ+bs3NrZb310YYevR5QlRo3Kn7dzzIdHbZm1VzJdQ==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-regexp-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1267,12 +1267,12 @@ } }, "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz", - "integrity": "sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.7.tgz", + "integrity": "sha512-by+v2CjoL3aMnWDOyCIg+yxU9KXSRa9tN6MbqggH5xvymmr9p4AMjYkNlQy4brMceBnUyHZ9G8RnpvT8wP7Cfg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1282,13 +1282,13 @@ } }, "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.0.tgz", - "integrity": "sha512-YLpb4LlYSc3sCUa35un84poXoraOiQucUTTu8X1j18JV+gNa8E0nyUf/CjZ171IRGr4jEguF+vzJU66QZhn29g==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.7.tgz", + "integrity": "sha512-HvS6JF66xSS5rNKXLqkk7L9c/jZ/cdIVIcoPVrnl8IsVpLggTjXs8OWekbLHs/VtYDDh5WXnQyeE3PPUGm22MA==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.0", - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-create-regexp-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1298,12 +1298,12 @@ } }, "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz", - "integrity": "sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.7.tgz", + "integrity": "sha512-UvcLuual4h7/GfylKm2IAA3aph9rwvAM2XBA0uPKU3lca+Maai4jBjjEVUS568ld6kJcgbouuumCBhMd/Yz17w==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-plugin-utils": "^7.25.7", "@babel/plugin-syntax-dynamic-import": "^7.8.3" }, "engines": { @@ -1314,13 +1314,13 @@ } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz", - "integrity": "sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.25.7.tgz", + "integrity": "sha512-yjqtpstPfZ0h/y40fAXRv2snciYr0OAoMXY/0ClC7tm4C/nG5NJKmIItlaYlLbIVAWNfrYuy9dq1bE0SbX0PEg==", "dev": true, "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1330,12 +1330,12 @@ } }, "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz", - "integrity": "sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.7.tgz", + "integrity": "sha512-h3MDAP5l34NQkkNulsTNyjdaR+OiB0Im67VU//sFupouP8Q6m9Spy7l66DcaAQxtmCqGdanPByLsnwFttxKISQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-plugin-utils": "^7.25.7", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" }, "engines": { @@ -1362,13 +1362,13 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz", - "integrity": "sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.7.tgz", + "integrity": "sha512-n/TaiBGJxYFWvpJDfsxSj9lEEE44BFM1EPGz4KEiTipTgkoFVVcCmzAL3qA7fdQU96dpo4gGf5HBx/KnDvqiHw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1378,14 +1378,14 @@ } }, "node_modules/@babel/plugin-transform-function-name": { - "version": "7.25.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.1.tgz", - "integrity": "sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.7.tgz", + "integrity": "sha512-5MCTNcjCMxQ63Tdu9rxyN6cAWurqfrDZ76qvVPrGYdBxIj+EawuuxTu/+dgJlhK5eRz3v1gLwp6XwS8XaX2NiQ==", "dev": true, "dependencies": { - "@babel/helper-compilation-targets": "^7.24.8", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/traverse": "^7.25.1" + "@babel/helper-compilation-targets": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/traverse": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1395,12 +1395,12 @@ } }, "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz", - "integrity": "sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.7.tgz", + "integrity": "sha512-Ot43PrL9TEAiCe8C/2erAjXMeVSnE/BLEx6eyrKLNFCCw5jvhTHKyHxdI1pA0kz5njZRYAnMO2KObGqOCRDYSA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-plugin-utils": "^7.25.7", "@babel/plugin-syntax-json-strings": "^7.8.3" }, "engines": { @@ -1411,12 +1411,12 @@ } }, "node_modules/@babel/plugin-transform-literals": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.2.tgz", - "integrity": "sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.7.tgz", + "integrity": "sha512-fwzkLrSu2fESR/cm4t6vqd7ebNIopz2QHGtjoU+dswQo/P6lwAG04Q98lliE3jkz/XqnbGFLnUcE0q0CVUf92w==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1426,12 +1426,12 @@ } }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz", - "integrity": "sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.7.tgz", + "integrity": "sha512-iImzbA55BjiovLyG2bggWS+V+OLkaBorNvc/yJoeeDQGztknRnDdYfp2d/UPmunZYEnZi6Lg8QcTmNMHOB0lGA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-plugin-utils": "^7.25.7", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" }, "engines": { @@ -1442,12 +1442,12 @@ } }, "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz", - "integrity": "sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.7.tgz", + "integrity": "sha512-Std3kXwpXfRV0QtQy5JJcRpkqP8/wG4XL7hSKZmGlxPlDqmpXtEPRmhF7ztnlTCtUN3eXRUJp+sBEZjaIBVYaw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1457,13 +1457,13 @@ } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz", - "integrity": "sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.7.tgz", + "integrity": "sha512-CgselSGCGzjQvKzghCvDTxKHP3iooenLpJDO842ehn5D2G5fJB222ptnDwQho0WjEvg7zyoxb9P+wiYxiJX5yA==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-module-transforms": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1473,14 +1473,14 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.8.tgz", - "integrity": "sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.25.7.tgz", + "integrity": "sha512-L9Gcahi0kKFYXvweO6n0wc3ZG1ChpSFdgG+eV1WYZ3/dGbJK7vvk91FgGgak8YwRgrCuihF8tE/Xg07EkL5COg==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.24.8", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-simple-access": "^7.24.7" + "@babel/helper-module-transforms": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-simple-access": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1490,15 +1490,15 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.0.tgz", - "integrity": "sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.7.tgz", + "integrity": "sha512-t9jZIvBmOXJsiuyOwhrIGs8dVcD6jDyg2icw1VL4A/g+FnWyJKwUfSSU2nwJuMV2Zqui856El9u+ElB+j9fV1g==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.25.0", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-validator-identifier": "^7.24.7", - "@babel/traverse": "^7.25.0" + "@babel/helper-module-transforms": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-validator-identifier": "^7.25.7", + "@babel/traverse": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1508,13 +1508,13 @@ } }, "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz", - "integrity": "sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.7.tgz", + "integrity": "sha512-p88Jg6QqsaPh+EB7I9GJrIqi1Zt4ZBHUQtjw3z1bzEXcLh6GfPqzZJ6G+G1HBGKUNukT58MnKG7EN7zXQBCODw==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-module-transforms": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1524,13 +1524,13 @@ } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz", - "integrity": "sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.7.tgz", + "integrity": "sha512-BtAT9LzCISKG3Dsdw5uso4oV1+v2NlVXIIomKJgQybotJY3OwCwJmkongjHgwGKoZXd0qG5UZ12JUlDQ07W6Ow==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-regexp-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1540,12 +1540,12 @@ } }, "node_modules/@babel/plugin-transform-new-target": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz", - "integrity": "sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.7.tgz", + "integrity": "sha512-CfCS2jDsbcZaVYxRFo2qtavW8SpdzmBXC2LOI4oO0rP+JSRDxxF3inF4GcPsLgfb5FjkhXG5/yR/lxuRs2pySA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1555,12 +1555,12 @@ } }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz", - "integrity": "sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.7.tgz", + "integrity": "sha512-FbuJ63/4LEL32mIxrxwYaqjJxpbzxPVQj5a+Ebrc8JICV6YX8nE53jY+K0RZT3um56GoNWgkS2BQ/uLGTjtwfw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-plugin-utils": "^7.25.7", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" }, "engines": { @@ -1571,12 +1571,12 @@ } }, "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz", - "integrity": "sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.7.tgz", + "integrity": "sha512-8CbutzSSh4hmD+jJHIA8vdTNk15kAzOnFLVVgBSMGr28rt85ouT01/rezMecks9pkU939wDInImwCKv4ahU4IA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-plugin-utils": "^7.25.7", "@babel/plugin-syntax-numeric-separator": "^7.10.4" }, "engines": { @@ -1587,15 +1587,15 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz", - "integrity": "sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.7.tgz", + "integrity": "sha512-1JdVKPhD7Y5PvgfFy0Mv2brdrolzpzSoUq2pr6xsR+m+3viGGeHEokFKsCgOkbeFOQxfB1Vt2F0cPJLRpFI4Zg==", "dev": true, "dependencies": { - "@babel/helper-compilation-targets": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-compilation-targets": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.24.7" + "@babel/plugin-transform-parameters": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1605,13 +1605,13 @@ } }, "node_modules/@babel/plugin-transform-object-super": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz", - "integrity": "sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.7.tgz", + "integrity": "sha512-pWT6UXCEW3u1t2tcAGtE15ornCBvopHj9Bps9D2DsH15APgNVOTwwczGckX+WkAvBmuoYKRCFa4DK+jM8vh5AA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-replace-supers": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-replace-supers": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1621,12 +1621,12 @@ } }, "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz", - "integrity": "sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.7.tgz", + "integrity": "sha512-m9obYBA39mDPN7lJzD5WkGGb0GO54PPLXsbcnj1Hyeu8mSRz7Gb4b1A6zxNX32ZuUySDK4G6it8SDFWD1nCnqg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-plugin-utils": "^7.25.7", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" }, "engines": { @@ -1637,13 +1637,13 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.8.tgz", - "integrity": "sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.7.tgz", + "integrity": "sha512-h39agClImgPWg4H8mYVAbD1qP9vClFbEjqoJmt87Zen8pjqK8FTPUwrOXAvqu5soytwxrLMd2fx2KSCp2CHcNg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7", "@babel/plugin-syntax-optional-chaining": "^7.8.3" }, "engines": { @@ -1654,12 +1654,12 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz", - "integrity": "sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.7.tgz", + "integrity": "sha512-FYiTvku63me9+1Nz7TOx4YMtW3tWXzfANZtrzHhUZrz4d47EEtMQhzFoZWESfXuAMMT5mwzD4+y1N8ONAX6lMQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1669,13 +1669,13 @@ } }, "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.7.tgz", - "integrity": "sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.7.tgz", + "integrity": "sha512-KY0hh2FluNxMLwOCHbxVOKfdB5sjWG4M183885FmaqWWiGMhRZq4DQRKH6mHdEucbJnyDyYiZNwNG424RymJjA==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-class-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1685,14 +1685,14 @@ } }, "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz", - "integrity": "sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.7.tgz", + "integrity": "sha512-LzA5ESzBy7tqj00Yjey9yWfs3FKy4EmJyKOSWld144OxkTji81WWnUT8nkLUn+imN/zHL8ZQlOu/MTUAhHaX3g==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-create-class-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-annotate-as-pure": "^7.25.7", + "@babel/helper-create-class-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" }, "engines": { @@ -1703,12 +1703,12 @@ } }, "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz", - "integrity": "sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.7.tgz", + "integrity": "sha512-lQEeetGKfFi0wHbt8ClQrUSUMfEeI3MMm74Z73T9/kuz990yYVtfofjf3NuA42Jy3auFOpbjDyCSiIkTs1VIYw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1811,12 +1811,12 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz", - "integrity": "sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.7.tgz", + "integrity": "sha512-mgDoQCRjrY3XK95UuV60tZlFCQGXEtMg8H+IsW72ldw1ih1jZhzYXbJvghmAEpg5UVhhnCeia1CkGttUvCkiMQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-plugin-utils": "^7.25.7", "regenerator-transform": "^0.15.2" }, "engines": { @@ -1827,12 +1827,12 @@ } }, "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz", - "integrity": "sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.7.tgz", + "integrity": "sha512-3OfyfRRqiGeOvIWSagcwUTVk2hXBsr/ww7bLn6TRTuXnexA+Udov2icFOxFX9abaj4l96ooYkcNN1qi2Zvqwng==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1871,12 +1871,12 @@ } }, "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz", - "integrity": "sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.7.tgz", + "integrity": "sha512-uBbxNwimHi5Bv3hUccmOFlUy3ATO6WagTApenHz9KzoIdn0XeACdB12ZJ4cjhuB2WSi80Ez2FWzJnarccriJeA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1886,13 +1886,13 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz", - "integrity": "sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.7.tgz", + "integrity": "sha512-Mm6aeymI0PBh44xNIv/qvo8nmbkpZze1KvR8MkEqbIREDxoiWTi18Zr2jryfRMwDfVZF9foKh060fWgni44luw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1902,12 +1902,12 @@ } }, "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz", - "integrity": "sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.7.tgz", + "integrity": "sha512-ZFAeNkpGuLnAQ/NCsXJ6xik7Id+tHuS+NT+ue/2+rn/31zcdnupCdmunOizEaP0JsUmTFSTOPoQY7PkK2pttXw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1917,12 +1917,12 @@ } }, "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz", - "integrity": "sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.7.tgz", + "integrity": "sha512-SI274k0nUsFFmyQupiO7+wKATAmMFf8iFgq2O+vVFXZ0SV9lNfT1NGzBEhjquFmD8I9sqHLguH+gZVN3vww2AA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1932,12 +1932,12 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.8.tgz", - "integrity": "sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.25.7.tgz", + "integrity": "sha512-OmWmQtTHnO8RSUbL0NTdtpbZHeNTnm68Gj5pA4Y2blFNh+V4iZR68V1qL9cI37J21ZN7AaCnkfdHtLExQPf2uA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1965,12 +1965,12 @@ } }, "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz", - "integrity": "sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.7.tgz", + "integrity": "sha512-BN87D7KpbdiABA+t3HbVqHzKWUDN3dymLaTnPFAMyc8lV+KN3+YzNhVRNdinaCPA4AUqx7ubXbQ9shRjYBl3SQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1980,13 +1980,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz", - "integrity": "sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.7.tgz", + "integrity": "sha512-IWfR89zcEPQGB/iB408uGtSPlQd3Jpq11Im86vUgcmSTcoWAiQMCTOa2K2yNNqFJEBVICKhayctee65Ka8OB0w==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-regexp-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1996,13 +1996,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz", - "integrity": "sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.7.tgz", + "integrity": "sha512-8JKfg/hiuA3qXnlLx8qtv5HWRbgyFx2hMMtpDDuU2rTckpKkGu4ycK5yYHwuEa16/quXfoxHBIApEsNyMWnt0g==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-regexp-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -2012,13 +2012,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.7.tgz", - "integrity": "sha512-2G8aAvF4wy1w/AGZkemprdGMRg5o6zPNhbHVImRz3lss55TYCBd6xStN19rt8XJHq20sqV0JbyWjOWwQRwV/wg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.7.tgz", + "integrity": "sha512-YRW8o9vzImwmh4Q3Rffd09bH5/hvY0pxg+1H1i0f7APoUeg12G7+HhLj9ZFNIrYkgBXhIijPJ+IXypN0hLTIbw==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-regexp-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -2028,28 +2028,28 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.25.3", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.3.tgz", - "integrity": "sha512-QsYW7UeAaXvLPX9tdVliMJE7MD7M6MLYVTovRTIwhoYQVFHR1rM4wO8wqAezYi3/BpSD+NzVCZ69R6smWiIi8g==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.25.2", - "@babel/helper-compilation-targets": "^7.25.2", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-validator-option": "^7.24.8", - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.3", - "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.0", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.0", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.7", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.0", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.7.tgz", + "integrity": "sha512-Gibz4OUdyNqqLj+7OAvBZxOD7CklCtMA5/j0JgUEwOnaRULsPDXmic2iKxL2DX2vQduPR5wH2hjZas/Vr/Oc0g==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.25.7", + "@babel/helper-compilation-targets": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-validator-option": "^7.25.7", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.7", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.7", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.7", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.7", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.7", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-syntax-class-static-block": "^7.14.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.24.7", - "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-assertions": "^7.25.7", + "@babel/plugin-syntax-import-attributes": "^7.25.7", "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", @@ -2061,60 +2061,60 @@ "@babel/plugin-syntax-private-property-in-object": "^7.14.5", "@babel/plugin-syntax-top-level-await": "^7.14.5", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.24.7", - "@babel/plugin-transform-async-generator-functions": "^7.25.0", - "@babel/plugin-transform-async-to-generator": "^7.24.7", - "@babel/plugin-transform-block-scoped-functions": "^7.24.7", - "@babel/plugin-transform-block-scoping": "^7.25.0", - "@babel/plugin-transform-class-properties": "^7.24.7", - "@babel/plugin-transform-class-static-block": "^7.24.7", - "@babel/plugin-transform-classes": "^7.25.0", - "@babel/plugin-transform-computed-properties": "^7.24.7", - "@babel/plugin-transform-destructuring": "^7.24.8", - "@babel/plugin-transform-dotall-regex": "^7.24.7", - "@babel/plugin-transform-duplicate-keys": "^7.24.7", - "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.0", - "@babel/plugin-transform-dynamic-import": "^7.24.7", - "@babel/plugin-transform-exponentiation-operator": "^7.24.7", - "@babel/plugin-transform-export-namespace-from": "^7.24.7", - "@babel/plugin-transform-for-of": "^7.24.7", - "@babel/plugin-transform-function-name": "^7.25.1", - "@babel/plugin-transform-json-strings": "^7.24.7", - "@babel/plugin-transform-literals": "^7.25.2", - "@babel/plugin-transform-logical-assignment-operators": "^7.24.7", - "@babel/plugin-transform-member-expression-literals": "^7.24.7", - "@babel/plugin-transform-modules-amd": "^7.24.7", - "@babel/plugin-transform-modules-commonjs": "^7.24.8", - "@babel/plugin-transform-modules-systemjs": "^7.25.0", - "@babel/plugin-transform-modules-umd": "^7.24.7", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7", - "@babel/plugin-transform-new-target": "^7.24.7", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7", - "@babel/plugin-transform-numeric-separator": "^7.24.7", - "@babel/plugin-transform-object-rest-spread": "^7.24.7", - "@babel/plugin-transform-object-super": "^7.24.7", - "@babel/plugin-transform-optional-catch-binding": "^7.24.7", - "@babel/plugin-transform-optional-chaining": "^7.24.8", - "@babel/plugin-transform-parameters": "^7.24.7", - "@babel/plugin-transform-private-methods": "^7.24.7", - "@babel/plugin-transform-private-property-in-object": "^7.24.7", - "@babel/plugin-transform-property-literals": "^7.24.7", - "@babel/plugin-transform-regenerator": "^7.24.7", - "@babel/plugin-transform-reserved-words": "^7.24.7", - "@babel/plugin-transform-shorthand-properties": "^7.24.7", - "@babel/plugin-transform-spread": "^7.24.7", - "@babel/plugin-transform-sticky-regex": "^7.24.7", - "@babel/plugin-transform-template-literals": "^7.24.7", - "@babel/plugin-transform-typeof-symbol": "^7.24.8", - "@babel/plugin-transform-unicode-escapes": "^7.24.7", - "@babel/plugin-transform-unicode-property-regex": "^7.24.7", - "@babel/plugin-transform-unicode-regex": "^7.24.7", - "@babel/plugin-transform-unicode-sets-regex": "^7.24.7", + "@babel/plugin-transform-arrow-functions": "^7.25.7", + "@babel/plugin-transform-async-generator-functions": "^7.25.7", + "@babel/plugin-transform-async-to-generator": "^7.25.7", + "@babel/plugin-transform-block-scoped-functions": "^7.25.7", + "@babel/plugin-transform-block-scoping": "^7.25.7", + "@babel/plugin-transform-class-properties": "^7.25.7", + "@babel/plugin-transform-class-static-block": "^7.25.7", + "@babel/plugin-transform-classes": "^7.25.7", + "@babel/plugin-transform-computed-properties": "^7.25.7", + "@babel/plugin-transform-destructuring": "^7.25.7", + "@babel/plugin-transform-dotall-regex": "^7.25.7", + "@babel/plugin-transform-duplicate-keys": "^7.25.7", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.7", + "@babel/plugin-transform-dynamic-import": "^7.25.7", + "@babel/plugin-transform-exponentiation-operator": "^7.25.7", + "@babel/plugin-transform-export-namespace-from": "^7.25.7", + "@babel/plugin-transform-for-of": "^7.25.7", + "@babel/plugin-transform-function-name": "^7.25.7", + "@babel/plugin-transform-json-strings": "^7.25.7", + "@babel/plugin-transform-literals": "^7.25.7", + "@babel/plugin-transform-logical-assignment-operators": "^7.25.7", + "@babel/plugin-transform-member-expression-literals": "^7.25.7", + "@babel/plugin-transform-modules-amd": "^7.25.7", + "@babel/plugin-transform-modules-commonjs": "^7.25.7", + "@babel/plugin-transform-modules-systemjs": "^7.25.7", + "@babel/plugin-transform-modules-umd": "^7.25.7", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.7", + "@babel/plugin-transform-new-target": "^7.25.7", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.25.7", + "@babel/plugin-transform-numeric-separator": "^7.25.7", + "@babel/plugin-transform-object-rest-spread": "^7.25.7", + "@babel/plugin-transform-object-super": "^7.25.7", + "@babel/plugin-transform-optional-catch-binding": "^7.25.7", + "@babel/plugin-transform-optional-chaining": "^7.25.7", + "@babel/plugin-transform-parameters": "^7.25.7", + "@babel/plugin-transform-private-methods": "^7.25.7", + "@babel/plugin-transform-private-property-in-object": "^7.25.7", + "@babel/plugin-transform-property-literals": "^7.25.7", + "@babel/plugin-transform-regenerator": "^7.25.7", + "@babel/plugin-transform-reserved-words": "^7.25.7", + "@babel/plugin-transform-shorthand-properties": "^7.25.7", + "@babel/plugin-transform-spread": "^7.25.7", + "@babel/plugin-transform-sticky-regex": "^7.25.7", + "@babel/plugin-transform-template-literals": "^7.25.7", + "@babel/plugin-transform-typeof-symbol": "^7.25.7", + "@babel/plugin-transform-unicode-escapes": "^7.25.7", + "@babel/plugin-transform-unicode-property-regex": "^7.25.7", + "@babel/plugin-transform-unicode-regex": "^7.25.7", + "@babel/plugin-transform-unicode-sets-regex": "^7.25.7", "@babel/preset-modules": "0.1.6-no-external-plugins", "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.4", + "babel-plugin-polyfill-corejs3": "^0.10.6", "babel-plugin-polyfill-regenerator": "^0.6.1", - "core-js-compat": "^3.37.1", + "core-js-compat": "^3.38.1", "semver": "^6.3.1" }, "engines": { @@ -2141,13 +2141,13 @@ } }, "node_modules/@babel/preset-env/node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz", - "integrity": "sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==", + "version": "0.10.6", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", + "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", "dev": true, "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.1", - "core-js-compat": "^3.36.1" + "@babel/helper-define-polyfill-provider": "^0.6.2", + "core-js-compat": "^3.38.0" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" @@ -2227,12 +2227,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", - "dev": true - }, "node_modules/@babel/runtime": { "version": "7.23.5", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.5.tgz", @@ -2245,28 +2239,28 @@ } }, "node_modules/@babel/template": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", - "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.7.tgz", + "integrity": "sha512-wRwtAgI3bAS+JGU2upWNL9lSlDcRCqD05BZ1n3X2ONLH1WilFP6O1otQjeMK/1g0pvYcXC7b/qVUB1keofjtZA==", "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/parser": "^7.25.0", - "@babel/types": "^7.25.0" + "@babel/code-frame": "^7.25.7", + "@babel/parser": "^7.25.7", + "@babel/types": "^7.25.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.25.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.3.tgz", - "integrity": "sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==", - "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.25.0", - "@babel/parser": "^7.25.3", - "@babel/template": "^7.25.0", - "@babel/types": "^7.25.2", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.7.tgz", + "integrity": "sha512-jatJPT1Zjqvh/1FyJs6qAHL+Dzb7sTb+xr7Q+gM1b+1oBsMsQQ4FkVKb6dFlJvLlVssqkRzV05Jzervt9yhnzg==", + "dependencies": { + "@babel/code-frame": "^7.25.7", + "@babel/generator": "^7.25.7", + "@babel/parser": "^7.25.7", + "@babel/template": "^7.25.7", + "@babel/types": "^7.25.7", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -2275,12 +2269,12 @@ } }, "node_modules/@babel/types": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz", - "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.7.tgz", + "integrity": "sha512-vwIVdXG+j+FOpkwqHRcBgHLYNL7XMkufrlaFvL9o6Ai9sJn9+PdyIL5qa0XzTZw084c+u9LOls53eoZWP/W5WQ==", "dependencies": { - "@babel/helper-string-parser": "^7.24.8", - "@babel/helper-validator-identifier": "^7.24.7", + "@babel/helper-string-parser": "^7.25.7", + "@babel/helper-validator-identifier": "^7.25.7", "to-fast-properties": "^2.0.0" }, "engines": { @@ -8695,9 +8689,9 @@ "license": "BSD-2-Clause" }, "node_modules/browserslist": { - "version": "4.23.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", - "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.0.tgz", + "integrity": "sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==", "funding": [ { "type": "opencollective", @@ -8713,8 +8707,8 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001646", - "electron-to-chromium": "^1.5.4", + "caniuse-lite": "^1.0.30001663", + "electron-to-chromium": "^1.5.28", "node-releases": "^2.0.18", "update-browserslist-db": "^1.1.0" }, @@ -8894,9 +8888,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001651", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001651.tgz", - "integrity": "sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg==", + "version": "1.0.30001666", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001666.tgz", + "integrity": "sha512-gD14ICmoV5ZZM1OdzPWmpx+q4GyefaK06zi8hmfHV5xe4/2nOQX3+Dw5o+fSqOws2xVwL9j+anOPFwHzdEdV4g==", "funding": [ { "type": "opencollective", @@ -9477,9 +9471,9 @@ } }, "node_modules/core-js-compat": { - "version": "3.38.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.0.tgz", - "integrity": "sha512-75LAicdLa4OJVwFxFbQR3NdnZjNgX6ILpVcVzcC4T2smerB5lELMrJQQQoWV6TiuC/vlaFqgU2tKQx9w5s0e0A==", + "version": "3.38.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.1.tgz", + "integrity": "sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==", "dev": true, "dependencies": { "browserslist": "^4.23.3" @@ -10579,9 +10573,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.11", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.11.tgz", - "integrity": "sha512-R1CccCDYqndR25CaXFd6hp/u9RaaMcftMkphmvuepXr5b1vfLkRml6aWVeBhXJ7rbevHkKEMJtz8XqPf7ffmew==" + "version": "1.5.31", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.31.tgz", + "integrity": "sha512-QcDoBbQeYt0+3CWcK/rEbuHvwpbT/8SV9T3OSgs6cX1FlcUAkgrkqbg9zLnDrMM/rLamzQwal4LYFCiWk861Tg==" }, "node_modules/emittery": { "version": "0.7.2", @@ -20807,13 +20801,14 @@ } }, "node_modules/jsesc": { - "version": "2.5.2", - "license": "MIT", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", "bin": { "jsesc": "bin/jsesc" }, "engines": { - "node": ">=4" + "node": ">=6" } }, "node_modules/json-bigint": { @@ -23991,9 +23986,9 @@ "dev": true }, "node_modules/regenerate-unicode-properties": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", - "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", + "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", "dev": true, "dependencies": { "regenerate": "^1.4.2" @@ -24047,15 +24042,15 @@ } }, "node_modules/regexpu-core": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", - "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.1.1.tgz", + "integrity": "sha512-k67Nb9jvwJcJmVpw0jPttR1/zVfnKf8Km0IPatrU/zJ5XeG3+Slx0xLXs9HByJSzXzrlz5EDvN6yLNMDc2qdnw==", "dev": true, "dependencies": { - "@babel/regjsgen": "^0.8.0", "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", + "regenerate-unicode-properties": "^10.2.0", + "regjsgen": "^0.8.0", + "regjsparser": "^0.11.0", "unicode-match-property-ecmascript": "^2.0.0", "unicode-match-property-value-ecmascript": "^2.1.0" }, @@ -24063,27 +24058,24 @@ "node": ">=4" } }, + "node_modules/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", + "dev": true + }, "node_modules/regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.11.0.tgz", + "integrity": "sha512-vTbzVAjQDzwQdKuvj7qEq6OlAprCjE656khuGQ4QaBLg7abQ9I9ISpmLuc6inWe7zP75AECjqUa4g4sdQvOXhg==", "dev": true, "dependencies": { - "jsesc": "~0.5.0" + "jsesc": "~3.0.2" }, "bin": { "regjsparser": "bin/parser" } }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - } - }, "node_modules/relateurl": { "version": "0.2.7", "license": "MIT", @@ -27270,9 +27262,9 @@ "devOptional": true }, "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", + "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", "dev": true, "engines": { "node": ">=4" @@ -27292,9 +27284,9 @@ } }, "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", + "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", "dev": true, "engines": { "node": ">=4" @@ -28666,18 +28658,18 @@ } }, "@babel/code-frame": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", - "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.25.7.tgz", + "integrity": "sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g==", "requires": { - "@babel/highlight": "^7.24.7", + "@babel/highlight": "^7.25.7", "picocolors": "^1.0.0" } }, "@babel/compat-data": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.2.tgz", - "integrity": "sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==" + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.7.tgz", + "integrity": "sha512-9ickoLz+hcXCeh7jrcin+/SLWm+GkxE2kTvoYyp38p4WkdFXfQJxDFGWp/YHjiKLPx06z2A7W8XKuqbReXDzsw==" }, "@babel/core": { "version": "7.23.7", @@ -28731,43 +28723,43 @@ } }, "@babel/generator": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz", - "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.7.tgz", + "integrity": "sha512-5Dqpl5fyV9pIAD62yK9P7fcA768uVPUyrQmqpqstHWgMma4feF1x/oFysBCVZLY5wJ2GkMUCdsNDnGZrPoR6rA==", "requires": { - "@babel/types": "^7.25.0", + "@babel/types": "^7.25.7", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^2.5.1" + "jsesc": "^3.0.2" } }, "@babel/helper-annotate-as-pure": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz", - "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.7.tgz", + "integrity": "sha512-4xwU8StnqnlIhhioZf1tqnVWeQ9pvH/ujS8hRfw/WOza+/a+1qv69BWNy+oY231maTCWgKWhfBU7kDpsds6zAA==", "dev": true, "requires": { - "@babel/types": "^7.24.7" + "@babel/types": "^7.25.7" } }, "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz", - "integrity": "sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.25.7.tgz", + "integrity": "sha512-12xfNeKNH7jubQNm7PAkzlLwEmCs1tfuX3UjIw6vP6QXi+leKh6+LyC/+Ed4EIQermwd58wsyh070yjDHFlNGg==", "dev": true, "requires": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7" } }, "@babel/helper-compilation-targets": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", - "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.7.tgz", + "integrity": "sha512-DniTEax0sv6isaw6qSQSfV4gVRNtw2rte8HHM45t9ZR0xILaufBRNkpMifCRiAPyvL4ACD6v0gfCwCmtOQaV4A==", "requires": { - "@babel/compat-data": "^7.25.2", - "@babel/helper-validator-option": "^7.24.8", - "browserslist": "^4.23.1", + "@babel/compat-data": "^7.25.7", + "@babel/helper-validator-option": "^7.25.7", + "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -28793,17 +28785,17 @@ } }, "@babel/helper-create-class-features-plugin": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.0.tgz", - "integrity": "sha512-GYM6BxeQsETc9mnct+nIIpf63SAyzvyYN7UB/IlTyd+MBg06afFGp0mIeUqGyWgS2mxad6vqbMrHVlaL3m70sQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.7.tgz", + "integrity": "sha512-bD4WQhbkx80mAyj/WCm4ZHcF4rDxkoLFO6ph8/5/mQ3z4vAzltQXAmbc7GvVJx5H+lk5Mi5EmbTeox5nMGCsbw==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-member-expression-to-functions": "^7.24.8", - "@babel/helper-optimise-call-expression": "^7.24.7", - "@babel/helper-replace-supers": "^7.25.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", - "@babel/traverse": "^7.25.0", + "@babel/helper-annotate-as-pure": "^7.25.7", + "@babel/helper-member-expression-to-functions": "^7.25.7", + "@babel/helper-optimise-call-expression": "^7.25.7", + "@babel/helper-replace-supers": "^7.25.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7", + "@babel/traverse": "^7.25.7", "semver": "^6.3.1" }, "dependencies": { @@ -28816,13 +28808,13 @@ } }, "@babel/helper-create-regexp-features-plugin": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.2.tgz", - "integrity": "sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.7.tgz", + "integrity": "sha512-byHhumTj/X47wJ6C6eLpK7wW/WBEcnUeb7D0FNc/jFQnQVw7DOso3Zz5u9x/zLrFVkHa89ZGDbkAa1D54NdrCQ==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "regexpu-core": "^5.3.1", + "@babel/helper-annotate-as-pure": "^7.25.7", + "regexpu-core": "^6.1.1", "semver": "^6.3.1" }, "dependencies": { @@ -28848,88 +28840,88 @@ } }, "@babel/helper-member-expression-to-functions": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz", - "integrity": "sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.7.tgz", + "integrity": "sha512-O31Ssjd5K6lPbTX9AAYpSKrZmLeagt9uwschJd+Ixo6QiRyfpvgtVQp8qrDR9UNFjZ8+DO34ZkdrN+BnPXemeA==", "dev": true, "requires": { - "@babel/traverse": "^7.24.8", - "@babel/types": "^7.24.8" + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7" } }, "@babel/helper-module-imports": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", - "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.7.tgz", + "integrity": "sha512-o0xCgpNmRohmnoWKQ0Ij8IdddjyBFE4T2kagL/x6M3+4zUgc+4qTOUBoNe4XxDskt1HPKO007ZPiMgLDq2s7Kw==", "requires": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7" } }, "@babel/helper-module-transforms": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", - "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.7.tgz", + "integrity": "sha512-k/6f8dKG3yDz/qCwSM+RKovjMix563SLxQFo0UhRNo239SP6n9u5/eLtKD6EAjwta2JHJ49CsD8pms2HdNiMMQ==", "requires": { - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-simple-access": "^7.24.7", - "@babel/helper-validator-identifier": "^7.24.7", - "@babel/traverse": "^7.25.2" + "@babel/helper-module-imports": "^7.25.7", + "@babel/helper-simple-access": "^7.25.7", + "@babel/helper-validator-identifier": "^7.25.7", + "@babel/traverse": "^7.25.7" } }, "@babel/helper-optimise-call-expression": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz", - "integrity": "sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.7.tgz", + "integrity": "sha512-VAwcwuYhv/AT+Vfr28c9y6SHzTan1ryqrydSTFGjU0uDJHw3uZ+PduI8plCLkRsDnqK2DMEDmwrOQRsK/Ykjng==", "dev": true, "requires": { - "@babel/types": "^7.24.7" + "@babel/types": "^7.25.7" } }, "@babel/helper-plugin-utils": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", - "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==" + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.7.tgz", + "integrity": "sha512-eaPZai0PiqCi09pPs3pAFfl/zYgGaE6IdXtYvmf0qlcDTd3WCtO7JWCcRd64e0EQrcYgiHibEZnOGsSY4QSgaw==" }, "@babel/helper-remap-async-to-generator": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.0.tgz", - "integrity": "sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.7.tgz", + "integrity": "sha512-kRGE89hLnPfcz6fTrlNU+uhgcwv0mBE4Gv3P9Ke9kLVJYpi4AMVVEElXvB5CabrPZW4nCM8P8UyyjrzCM0O2sw==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-wrap-function": "^7.25.0", - "@babel/traverse": "^7.25.0" + "@babel/helper-annotate-as-pure": "^7.25.7", + "@babel/helper-wrap-function": "^7.25.7", + "@babel/traverse": "^7.25.7" } }, "@babel/helper-replace-supers": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz", - "integrity": "sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.7.tgz", + "integrity": "sha512-iy8JhqlUW9PtZkd4pHM96v6BdJ66Ba9yWSE4z0W4TvSZwLBPkyDsiIU3ENe4SmrzRBs76F7rQXTy1lYC49n6Lw==", "dev": true, "requires": { - "@babel/helper-member-expression-to-functions": "^7.24.8", - "@babel/helper-optimise-call-expression": "^7.24.7", - "@babel/traverse": "^7.25.0" + "@babel/helper-member-expression-to-functions": "^7.25.7", + "@babel/helper-optimise-call-expression": "^7.25.7", + "@babel/traverse": "^7.25.7" } }, "@babel/helper-simple-access": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", - "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.25.7.tgz", + "integrity": "sha512-FPGAkJmyoChQeM+ruBGIDyrT2tKfZJO8NcxdC+CWNJi7N8/rZpSxK7yvBJ5O/nF1gfu5KzN7VKG3YVSLFfRSxQ==", "requires": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7" } }, "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz", - "integrity": "sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.7.tgz", + "integrity": "sha512-pPbNbchZBkPMD50K0p3JGcFMNLVUCuU/ABybm/PGNj4JiHrpmNyqqCphBk4i19xXtNV0JhldQJJtbSW5aUvbyA==", "dev": true, "requires": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7" } }, "@babel/helper-split-export-declaration": { @@ -28942,29 +28934,29 @@ } }, "@babel/helper-string-parser": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", - "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==" + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.7.tgz", + "integrity": "sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g==" }, "@babel/helper-validator-identifier": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", - "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==" + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.7.tgz", + "integrity": "sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==" }, "@babel/helper-validator-option": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", - "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==" + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.7.tgz", + "integrity": "sha512-ytbPLsm+GjArDYXJ8Ydr1c/KJuutjF2besPNbIZnZ6MKUxi/uTA22t2ymmA4WFjZFpjiAMO0xuuJPqK2nvDVfQ==" }, "@babel/helper-wrap-function": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.0.tgz", - "integrity": "sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.7.tgz", + "integrity": "sha512-MA0roW3JF2bD1ptAaJnvcabsVlNQShUaThyJbCDD4bCp8NEgiFvpoqRI2YS22hHlc2thjO/fTg2ShLMC3jygAg==", "dev": true, "requires": { - "@babel/template": "^7.25.0", - "@babel/traverse": "^7.25.0", - "@babel/types": "^7.25.0" + "@babel/template": "^7.25.7", + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7" } }, "@babel/helpers": { @@ -28978,71 +28970,71 @@ } }, "@babel/highlight": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", - "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.25.7.tgz", + "integrity": "sha512-iYyACpW3iW8Fw+ZybQK+drQre+ns/tKpXbNESfrhNnPLIklLbXr7MYJ6gPEd0iETGLOK+SxMjVvKb/ffmk+FEw==", "requires": { - "@babel/helper-validator-identifier": "^7.24.7", + "@babel/helper-validator-identifier": "^7.25.7", "chalk": "^2.4.2", "js-tokens": "^4.0.0", "picocolors": "^1.0.0" } }, "@babel/parser": { - "version": "7.25.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz", - "integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.7.tgz", + "integrity": "sha512-aZn7ETtQsjjGG5HruveUK06cU3Hljuhd9Iojm4M8WWv3wLE6OkE5PWbDUkItmMgegmccaITudyuW5RPYrYlgWw==", "requires": { - "@babel/types": "^7.25.2" + "@babel/types": "^7.25.7" } }, "@babel/plugin-bugfix-firefox-class-in-computed-class-key": { - "version": "7.25.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.3.tgz", - "integrity": "sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.7.tgz", + "integrity": "sha512-UV9Lg53zyebzD1DwQoT9mzkEKa922LNUp5YkTJ6Uta0RbyXaQNUgcvSt7qIu1PpPzVb6rd10OVNTzkyBGeVmxQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/traverse": "^7.25.3" + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/traverse": "^7.25.7" } }, "@babel/plugin-bugfix-safari-class-field-initializer-scope": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.0.tgz", - "integrity": "sha512-Bm4bH2qsX880b/3ziJ8KD711LT7z4u8CFudmjqle65AZj/HNUFhEf90dqYv6O86buWvSBmeQDjv0Tn2aF/bIBA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.7.tgz", + "integrity": "sha512-GDDWeVLNxRIkQTnJn2pDOM1pkCgYdSqPeT1a9vh9yIqu2uzzgw1zcqEb+IJOhy+dTBMlNdThrDIksr2o09qrrQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-plugin-utils": "^7.25.7" } }, "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.0.tgz", - "integrity": "sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.7.tgz", + "integrity": "sha512-wxyWg2RYaSUYgmd9MR0FyRGyeOMQE/Uzr1wzd/g5cf5bwi9A4v6HFdDm7y1MgDtod/fLOSTZY6jDgV0xU9d5bA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-plugin-utils": "^7.25.7" } }, "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz", - "integrity": "sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.7.tgz", + "integrity": "sha512-Xwg6tZpLxc4iQjorYsyGMyfJE7nP5MV8t/Ka58BgiA7Jw0fRqQNcANlLfdJ/yvBt9z9LD2We+BEkT7vLqZRWng==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", - "@babel/plugin-transform-optional-chaining": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7", + "@babel/plugin-transform-optional-chaining": "^7.25.7" } }, "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.0.tgz", - "integrity": "sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.7.tgz", + "integrity": "sha512-UVATLMidXrnH+GMUIuxq55nejlj02HP7F5ETyBONzP6G87fPBogG4CH6kxrSrdIuAjdwNO9VzyaYsrZPscWUrw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/traverse": "^7.25.0" + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/traverse": "^7.25.7" } }, "@babel/plugin-proposal-class-properties": { @@ -29185,21 +29177,21 @@ } }, "@babel/plugin-syntax-import-assertions": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.7.tgz", - "integrity": "sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.25.7.tgz", + "integrity": "sha512-ZvZQRmME0zfJnDQnVBKYzHxXT7lYBB3Revz1GuS7oLXWMgqUPX4G+DDbT30ICClht9WKV34QVrZhSw6WdklwZQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" } }, "@babel/plugin-syntax-import-attributes": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.7.tgz", - "integrity": "sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.25.7.tgz", + "integrity": "sha512-AqVo+dguCgmpi/3mYBdu9lkngOBlQ2w2vnNpa6gfiCxQZLzV4ZbhsXitJ2Yblkoe1VQwtHSaNmIaGll/26YWRw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" } }, "@babel/plugin-syntax-import-meta": { @@ -29305,165 +29297,165 @@ } }, "@babel/plugin-transform-arrow-functions": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz", - "integrity": "sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.7.tgz", + "integrity": "sha512-EJN2mKxDwfOUCPxMO6MUI58RN3ganiRAG/MS/S3HfB6QFNjroAMelQo/gybyYq97WerCBAZoyrAoW8Tzdq2jWg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" } }, "@babel/plugin-transform-async-generator-functions": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.0.tgz", - "integrity": "sha512-uaIi2FdqzjpAMvVqvB51S42oC2JEVgh0LDsGfZVDysWE8LrJtQC2jvKmOqEYThKyB7bDEb7BP1GYWDm7tABA0Q==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.7.tgz", + "integrity": "sha512-4B6OhTrwYKHYYgcwErvZjbmH9X5TxQBsaBHdzEIB4l71gR5jh/tuHGlb9in47udL2+wVUcOz5XXhhfhVJwEpEg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-remap-async-to-generator": "^7.25.0", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-remap-async-to-generator": "^7.25.7", "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/traverse": "^7.25.0" + "@babel/traverse": "^7.25.7" } }, "@babel/plugin-transform-async-to-generator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz", - "integrity": "sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.7.tgz", + "integrity": "sha512-ZUCjAavsh5CESCmi/xCpX1qcCaAglzs/7tmuvoFnJgA1dM7gQplsguljoTg+Ru8WENpX89cQyAtWoaE0I3X3Pg==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-remap-async-to-generator": "^7.24.7" + "@babel/helper-module-imports": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-remap-async-to-generator": "^7.25.7" } }, "@babel/plugin-transform-block-scoped-functions": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz", - "integrity": "sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.25.7.tgz", + "integrity": "sha512-xHttvIM9fvqW+0a3tZlYcZYSBpSWzGBFIt/sYG3tcdSzBB8ZeVgz2gBP7Df+sM0N1850jrviYSSeUuc+135dmQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" } }, "@babel/plugin-transform-block-scoping": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.0.tgz", - "integrity": "sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.7.tgz", + "integrity": "sha512-ZEPJSkVZaeTFG/m2PARwLZQ+OG0vFIhPlKHK/JdIMy8DbRJ/htz6LRrTFtdzxi9EHmcwbNPAKDnadpNSIW+Aow==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-plugin-utils": "^7.25.7" } }, "@babel/plugin-transform-class-properties": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.7.tgz", - "integrity": "sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.7.tgz", + "integrity": "sha512-mhyfEW4gufjIqYFo9krXHJ3ElbFLIze5IDp+wQTxoPd+mwFb1NxatNAwmv8Q8Iuxv7Zc+q8EkiMQwc9IhyGf4g==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-class-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" } }, "@babel/plugin-transform-class-static-block": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz", - "integrity": "sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.25.7.tgz", + "integrity": "sha512-rvUUtoVlkDWtDWxGAiiQj0aNktTPn3eFynBcMC2IhsXweehwgdI9ODe+XjWw515kEmv22sSOTp/rxIRuTiB7zg==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-create-class-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", "@babel/plugin-syntax-class-static-block": "^7.14.5" } }, "@babel/plugin-transform-classes": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.0.tgz", - "integrity": "sha512-xyi6qjr/fYU304fiRwFbekzkqVJZ6A7hOjWZd+89FVcBqPV3S9Wuozz82xdpLspckeaafntbzglaW4pqpzvtSw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.7.tgz", + "integrity": "sha512-9j9rnl+YCQY0IGoeipXvnk3niWicIB6kCsWRGLwX241qSXpbA4MKxtp/EdvFxsc4zI5vqfLxzOd0twIJ7I99zg==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-compilation-targets": "^7.24.8", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-replace-supers": "^7.25.0", - "@babel/traverse": "^7.25.0", + "@babel/helper-annotate-as-pure": "^7.25.7", + "@babel/helper-compilation-targets": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-replace-supers": "^7.25.7", + "@babel/traverse": "^7.25.7", "globals": "^11.1.0" } }, "@babel/plugin-transform-computed-properties": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz", - "integrity": "sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.7.tgz", + "integrity": "sha512-QIv+imtM+EtNxg/XBKL3hiWjgdLjMOmZ+XzQwSgmBfKbfxUjBzGgVPklUuE55eq5/uVoh8gg3dqlrwR/jw3ZeA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/template": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/template": "^7.25.7" } }, "@babel/plugin-transform-destructuring": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.8.tgz", - "integrity": "sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.7.tgz", + "integrity": "sha512-xKcfLTlJYUczdaM1+epcdh1UGewJqr9zATgrNHcLBcV2QmfvPPEixo/sK/syql9cEmbr7ulu5HMFG5vbbt/sEA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-plugin-utils": "^7.25.7" } }, "@babel/plugin-transform-dotall-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz", - "integrity": "sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.7.tgz", + "integrity": "sha512-kXzXMMRzAtJdDEgQBLF4oaiT6ZCU3oWHgpARnTKDAqPkDJ+bs3NrZb310YYevR5QlRo3Kn7dzzIdHbZm1VzJdQ==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-regexp-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" } }, "@babel/plugin-transform-duplicate-keys": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz", - "integrity": "sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.7.tgz", + "integrity": "sha512-by+v2CjoL3aMnWDOyCIg+yxU9KXSRa9tN6MbqggH5xvymmr9p4AMjYkNlQy4brMceBnUyHZ9G8RnpvT8wP7Cfg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" } }, "@babel/plugin-transform-duplicate-named-capturing-groups-regex": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.0.tgz", - "integrity": "sha512-YLpb4LlYSc3sCUa35un84poXoraOiQucUTTu8X1j18JV+gNa8E0nyUf/CjZ171IRGr4jEguF+vzJU66QZhn29g==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.7.tgz", + "integrity": "sha512-HvS6JF66xSS5rNKXLqkk7L9c/jZ/cdIVIcoPVrnl8IsVpLggTjXs8OWekbLHs/VtYDDh5WXnQyeE3PPUGm22MA==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.25.0", - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-create-regexp-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" } }, "@babel/plugin-transform-dynamic-import": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz", - "integrity": "sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.7.tgz", + "integrity": "sha512-UvcLuual4h7/GfylKm2IAA3aph9rwvAM2XBA0uPKU3lca+Maai4jBjjEVUS568ld6kJcgbouuumCBhMd/Yz17w==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-plugin-utils": "^7.25.7", "@babel/plugin-syntax-dynamic-import": "^7.8.3" } }, "@babel/plugin-transform-exponentiation-operator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz", - "integrity": "sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.25.7.tgz", + "integrity": "sha512-yjqtpstPfZ0h/y40fAXRv2snciYr0OAoMXY/0ClC7tm4C/nG5NJKmIItlaYlLbIVAWNfrYuy9dq1bE0SbX0PEg==", "dev": true, "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" } }, "@babel/plugin-transform-export-namespace-from": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz", - "integrity": "sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.7.tgz", + "integrity": "sha512-h3MDAP5l34NQkkNulsTNyjdaR+OiB0Im67VU//sFupouP8Q6m9Spy7l66DcaAQxtmCqGdanPByLsnwFttxKISQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-plugin-utils": "^7.25.7", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" } }, @@ -29478,227 +29470,227 @@ } }, "@babel/plugin-transform-for-of": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz", - "integrity": "sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.7.tgz", + "integrity": "sha512-n/TaiBGJxYFWvpJDfsxSj9lEEE44BFM1EPGz4KEiTipTgkoFVVcCmzAL3qA7fdQU96dpo4gGf5HBx/KnDvqiHw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7" } }, "@babel/plugin-transform-function-name": { - "version": "7.25.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.1.tgz", - "integrity": "sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.7.tgz", + "integrity": "sha512-5MCTNcjCMxQ63Tdu9rxyN6cAWurqfrDZ76qvVPrGYdBxIj+EawuuxTu/+dgJlhK5eRz3v1gLwp6XwS8XaX2NiQ==", "dev": true, "requires": { - "@babel/helper-compilation-targets": "^7.24.8", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/traverse": "^7.25.1" + "@babel/helper-compilation-targets": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/traverse": "^7.25.7" } }, "@babel/plugin-transform-json-strings": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz", - "integrity": "sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.7.tgz", + "integrity": "sha512-Ot43PrL9TEAiCe8C/2erAjXMeVSnE/BLEx6eyrKLNFCCw5jvhTHKyHxdI1pA0kz5njZRYAnMO2KObGqOCRDYSA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-plugin-utils": "^7.25.7", "@babel/plugin-syntax-json-strings": "^7.8.3" } }, "@babel/plugin-transform-literals": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.2.tgz", - "integrity": "sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.7.tgz", + "integrity": "sha512-fwzkLrSu2fESR/cm4t6vqd7ebNIopz2QHGtjoU+dswQo/P6lwAG04Q98lliE3jkz/XqnbGFLnUcE0q0CVUf92w==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-plugin-utils": "^7.25.7" } }, "@babel/plugin-transform-logical-assignment-operators": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz", - "integrity": "sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.7.tgz", + "integrity": "sha512-iImzbA55BjiovLyG2bggWS+V+OLkaBorNvc/yJoeeDQGztknRnDdYfp2d/UPmunZYEnZi6Lg8QcTmNMHOB0lGA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-plugin-utils": "^7.25.7", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" } }, "@babel/plugin-transform-member-expression-literals": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz", - "integrity": "sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.7.tgz", + "integrity": "sha512-Std3kXwpXfRV0QtQy5JJcRpkqP8/wG4XL7hSKZmGlxPlDqmpXtEPRmhF7ztnlTCtUN3eXRUJp+sBEZjaIBVYaw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" } }, "@babel/plugin-transform-modules-amd": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz", - "integrity": "sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.7.tgz", + "integrity": "sha512-CgselSGCGzjQvKzghCvDTxKHP3iooenLpJDO842ehn5D2G5fJB222ptnDwQho0WjEvg7zyoxb9P+wiYxiJX5yA==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-module-transforms": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.8.tgz", - "integrity": "sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.25.7.tgz", + "integrity": "sha512-L9Gcahi0kKFYXvweO6n0wc3ZG1ChpSFdgG+eV1WYZ3/dGbJK7vvk91FgGgak8YwRgrCuihF8tE/Xg07EkL5COg==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.24.8", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-simple-access": "^7.24.7" + "@babel/helper-module-transforms": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-simple-access": "^7.25.7" } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.0.tgz", - "integrity": "sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.7.tgz", + "integrity": "sha512-t9jZIvBmOXJsiuyOwhrIGs8dVcD6jDyg2icw1VL4A/g+FnWyJKwUfSSU2nwJuMV2Zqui856El9u+ElB+j9fV1g==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.25.0", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-validator-identifier": "^7.24.7", - "@babel/traverse": "^7.25.0" + "@babel/helper-module-transforms": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-validator-identifier": "^7.25.7", + "@babel/traverse": "^7.25.7" } }, "@babel/plugin-transform-modules-umd": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz", - "integrity": "sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.7.tgz", + "integrity": "sha512-p88Jg6QqsaPh+EB7I9GJrIqi1Zt4ZBHUQtjw3z1bzEXcLh6GfPqzZJ6G+G1HBGKUNukT58MnKG7EN7zXQBCODw==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-module-transforms": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" } }, "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz", - "integrity": "sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.7.tgz", + "integrity": "sha512-BtAT9LzCISKG3Dsdw5uso4oV1+v2NlVXIIomKJgQybotJY3OwCwJmkongjHgwGKoZXd0qG5UZ12JUlDQ07W6Ow==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-regexp-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" } }, "@babel/plugin-transform-new-target": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz", - "integrity": "sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.7.tgz", + "integrity": "sha512-CfCS2jDsbcZaVYxRFo2qtavW8SpdzmBXC2LOI4oO0rP+JSRDxxF3inF4GcPsLgfb5FjkhXG5/yR/lxuRs2pySA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" } }, "@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz", - "integrity": "sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.7.tgz", + "integrity": "sha512-FbuJ63/4LEL32mIxrxwYaqjJxpbzxPVQj5a+Ebrc8JICV6YX8nE53jY+K0RZT3um56GoNWgkS2BQ/uLGTjtwfw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-plugin-utils": "^7.25.7", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" } }, "@babel/plugin-transform-numeric-separator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz", - "integrity": "sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.7.tgz", + "integrity": "sha512-8CbutzSSh4hmD+jJHIA8vdTNk15kAzOnFLVVgBSMGr28rt85ouT01/rezMecks9pkU939wDInImwCKv4ahU4IA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-plugin-utils": "^7.25.7", "@babel/plugin-syntax-numeric-separator": "^7.10.4" } }, "@babel/plugin-transform-object-rest-spread": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz", - "integrity": "sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.7.tgz", + "integrity": "sha512-1JdVKPhD7Y5PvgfFy0Mv2brdrolzpzSoUq2pr6xsR+m+3viGGeHEokFKsCgOkbeFOQxfB1Vt2F0cPJLRpFI4Zg==", "dev": true, "requires": { - "@babel/helper-compilation-targets": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-compilation-targets": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.24.7" + "@babel/plugin-transform-parameters": "^7.25.7" } }, "@babel/plugin-transform-object-super": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz", - "integrity": "sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.7.tgz", + "integrity": "sha512-pWT6UXCEW3u1t2tcAGtE15ornCBvopHj9Bps9D2DsH15APgNVOTwwczGckX+WkAvBmuoYKRCFa4DK+jM8vh5AA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-replace-supers": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-replace-supers": "^7.25.7" } }, "@babel/plugin-transform-optional-catch-binding": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz", - "integrity": "sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.7.tgz", + "integrity": "sha512-m9obYBA39mDPN7lJzD5WkGGb0GO54PPLXsbcnj1Hyeu8mSRz7Gb4b1A6zxNX32ZuUySDK4G6it8SDFWD1nCnqg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-plugin-utils": "^7.25.7", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" } }, "@babel/plugin-transform-optional-chaining": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.8.tgz", - "integrity": "sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.7.tgz", + "integrity": "sha512-h39agClImgPWg4H8mYVAbD1qP9vClFbEjqoJmt87Zen8pjqK8FTPUwrOXAvqu5soytwxrLMd2fx2KSCp2CHcNg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7", "@babel/plugin-syntax-optional-chaining": "^7.8.3" } }, "@babel/plugin-transform-parameters": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz", - "integrity": "sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.7.tgz", + "integrity": "sha512-FYiTvku63me9+1Nz7TOx4YMtW3tWXzfANZtrzHhUZrz4d47EEtMQhzFoZWESfXuAMMT5mwzD4+y1N8ONAX6lMQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" } }, "@babel/plugin-transform-private-methods": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.7.tgz", - "integrity": "sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.7.tgz", + "integrity": "sha512-KY0hh2FluNxMLwOCHbxVOKfdB5sjWG4M183885FmaqWWiGMhRZq4DQRKH6mHdEucbJnyDyYiZNwNG424RymJjA==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-class-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" } }, "@babel/plugin-transform-private-property-in-object": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz", - "integrity": "sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.7.tgz", + "integrity": "sha512-LzA5ESzBy7tqj00Yjey9yWfs3FKy4EmJyKOSWld144OxkTji81WWnUT8nkLUn+imN/zHL8ZQlOu/MTUAhHaX3g==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-create-class-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-annotate-as-pure": "^7.25.7", + "@babel/helper-create-class-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" } }, "@babel/plugin-transform-property-literals": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz", - "integrity": "sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.7.tgz", + "integrity": "sha512-lQEeetGKfFi0wHbt8ClQrUSUMfEeI3MMm74Z73T9/kuz990yYVtfofjf3NuA42Jy3auFOpbjDyCSiIkTs1VIYw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" } }, "@babel/plugin-transform-react-display-name": { @@ -29759,22 +29751,22 @@ } }, "@babel/plugin-transform-regenerator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz", - "integrity": "sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.7.tgz", + "integrity": "sha512-mgDoQCRjrY3XK95UuV60tZlFCQGXEtMg8H+IsW72ldw1ih1jZhzYXbJvghmAEpg5UVhhnCeia1CkGttUvCkiMQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-plugin-utils": "^7.25.7", "regenerator-transform": "^0.15.2" } }, "@babel/plugin-transform-reserved-words": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz", - "integrity": "sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.7.tgz", + "integrity": "sha512-3OfyfRRqiGeOvIWSagcwUTVk2hXBsr/ww7bLn6TRTuXnexA+Udov2icFOxFX9abaj4l96ooYkcNN1qi2Zvqwng==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" } }, "@babel/plugin-transform-runtime": { @@ -29800,49 +29792,49 @@ } }, "@babel/plugin-transform-shorthand-properties": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz", - "integrity": "sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.7.tgz", + "integrity": "sha512-uBbxNwimHi5Bv3hUccmOFlUy3ATO6WagTApenHz9KzoIdn0XeACdB12ZJ4cjhuB2WSi80Ez2FWzJnarccriJeA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" } }, "@babel/plugin-transform-spread": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz", - "integrity": "sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.7.tgz", + "integrity": "sha512-Mm6aeymI0PBh44xNIv/qvo8nmbkpZze1KvR8MkEqbIREDxoiWTi18Zr2jryfRMwDfVZF9foKh060fWgni44luw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7" } }, "@babel/plugin-transform-sticky-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz", - "integrity": "sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.7.tgz", + "integrity": "sha512-ZFAeNkpGuLnAQ/NCsXJ6xik7Id+tHuS+NT+ue/2+rn/31zcdnupCdmunOizEaP0JsUmTFSTOPoQY7PkK2pttXw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" } }, "@babel/plugin-transform-template-literals": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz", - "integrity": "sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.7.tgz", + "integrity": "sha512-SI274k0nUsFFmyQupiO7+wKATAmMFf8iFgq2O+vVFXZ0SV9lNfT1NGzBEhjquFmD8I9sqHLguH+gZVN3vww2AA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" } }, "@babel/plugin-transform-typeof-symbol": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.8.tgz", - "integrity": "sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.25.7.tgz", + "integrity": "sha512-OmWmQtTHnO8RSUbL0NTdtpbZHeNTnm68Gj5pA4Y2blFNh+V4iZR68V1qL9cI37J21ZN7AaCnkfdHtLExQPf2uA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-plugin-utils": "^7.25.7" } }, "@babel/plugin-transform-typescript": { @@ -29858,67 +29850,67 @@ } }, "@babel/plugin-transform-unicode-escapes": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz", - "integrity": "sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.7.tgz", + "integrity": "sha512-BN87D7KpbdiABA+t3HbVqHzKWUDN3dymLaTnPFAMyc8lV+KN3+YzNhVRNdinaCPA4AUqx7ubXbQ9shRjYBl3SQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" } }, "@babel/plugin-transform-unicode-property-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz", - "integrity": "sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.7.tgz", + "integrity": "sha512-IWfR89zcEPQGB/iB408uGtSPlQd3Jpq11Im86vUgcmSTcoWAiQMCTOa2K2yNNqFJEBVICKhayctee65Ka8OB0w==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-regexp-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" } }, "@babel/plugin-transform-unicode-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz", - "integrity": "sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.7.tgz", + "integrity": "sha512-8JKfg/hiuA3qXnlLx8qtv5HWRbgyFx2hMMtpDDuU2rTckpKkGu4ycK5yYHwuEa16/quXfoxHBIApEsNyMWnt0g==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-regexp-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" } }, "@babel/plugin-transform-unicode-sets-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.7.tgz", - "integrity": "sha512-2G8aAvF4wy1w/AGZkemprdGMRg5o6zPNhbHVImRz3lss55TYCBd6xStN19rt8XJHq20sqV0JbyWjOWwQRwV/wg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.7.tgz", + "integrity": "sha512-YRW8o9vzImwmh4Q3Rffd09bH5/hvY0pxg+1H1i0f7APoUeg12G7+HhLj9ZFNIrYkgBXhIijPJ+IXypN0hLTIbw==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-regexp-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" } }, "@babel/preset-env": { - "version": "7.25.3", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.3.tgz", - "integrity": "sha512-QsYW7UeAaXvLPX9tdVliMJE7MD7M6MLYVTovRTIwhoYQVFHR1rM4wO8wqAezYi3/BpSD+NzVCZ69R6smWiIi8g==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.25.2", - "@babel/helper-compilation-targets": "^7.25.2", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-validator-option": "^7.24.8", - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.3", - "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.0", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.0", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.7", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.0", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.7.tgz", + "integrity": "sha512-Gibz4OUdyNqqLj+7OAvBZxOD7CklCtMA5/j0JgUEwOnaRULsPDXmic2iKxL2DX2vQduPR5wH2hjZas/Vr/Oc0g==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.25.7", + "@babel/helper-compilation-targets": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-validator-option": "^7.25.7", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.7", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.7", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.7", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.7", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.7", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-syntax-class-static-block": "^7.14.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.24.7", - "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-assertions": "^7.25.7", + "@babel/plugin-syntax-import-attributes": "^7.25.7", "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", @@ -29930,60 +29922,60 @@ "@babel/plugin-syntax-private-property-in-object": "^7.14.5", "@babel/plugin-syntax-top-level-await": "^7.14.5", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.24.7", - "@babel/plugin-transform-async-generator-functions": "^7.25.0", - "@babel/plugin-transform-async-to-generator": "^7.24.7", - "@babel/plugin-transform-block-scoped-functions": "^7.24.7", - "@babel/plugin-transform-block-scoping": "^7.25.0", - "@babel/plugin-transform-class-properties": "^7.24.7", - "@babel/plugin-transform-class-static-block": "^7.24.7", - "@babel/plugin-transform-classes": "^7.25.0", - "@babel/plugin-transform-computed-properties": "^7.24.7", - "@babel/plugin-transform-destructuring": "^7.24.8", - "@babel/plugin-transform-dotall-regex": "^7.24.7", - "@babel/plugin-transform-duplicate-keys": "^7.24.7", - "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.0", - "@babel/plugin-transform-dynamic-import": "^7.24.7", - "@babel/plugin-transform-exponentiation-operator": "^7.24.7", - "@babel/plugin-transform-export-namespace-from": "^7.24.7", - "@babel/plugin-transform-for-of": "^7.24.7", - "@babel/plugin-transform-function-name": "^7.25.1", - "@babel/plugin-transform-json-strings": "^7.24.7", - "@babel/plugin-transform-literals": "^7.25.2", - "@babel/plugin-transform-logical-assignment-operators": "^7.24.7", - "@babel/plugin-transform-member-expression-literals": "^7.24.7", - "@babel/plugin-transform-modules-amd": "^7.24.7", - "@babel/plugin-transform-modules-commonjs": "^7.24.8", - "@babel/plugin-transform-modules-systemjs": "^7.25.0", - "@babel/plugin-transform-modules-umd": "^7.24.7", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7", - "@babel/plugin-transform-new-target": "^7.24.7", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7", - "@babel/plugin-transform-numeric-separator": "^7.24.7", - "@babel/plugin-transform-object-rest-spread": "^7.24.7", - "@babel/plugin-transform-object-super": "^7.24.7", - "@babel/plugin-transform-optional-catch-binding": "^7.24.7", - "@babel/plugin-transform-optional-chaining": "^7.24.8", - "@babel/plugin-transform-parameters": "^7.24.7", - "@babel/plugin-transform-private-methods": "^7.24.7", - "@babel/plugin-transform-private-property-in-object": "^7.24.7", - "@babel/plugin-transform-property-literals": "^7.24.7", - "@babel/plugin-transform-regenerator": "^7.24.7", - "@babel/plugin-transform-reserved-words": "^7.24.7", - "@babel/plugin-transform-shorthand-properties": "^7.24.7", - "@babel/plugin-transform-spread": "^7.24.7", - "@babel/plugin-transform-sticky-regex": "^7.24.7", - "@babel/plugin-transform-template-literals": "^7.24.7", - "@babel/plugin-transform-typeof-symbol": "^7.24.8", - "@babel/plugin-transform-unicode-escapes": "^7.24.7", - "@babel/plugin-transform-unicode-property-regex": "^7.24.7", - "@babel/plugin-transform-unicode-regex": "^7.24.7", - "@babel/plugin-transform-unicode-sets-regex": "^7.24.7", + "@babel/plugin-transform-arrow-functions": "^7.25.7", + "@babel/plugin-transform-async-generator-functions": "^7.25.7", + "@babel/plugin-transform-async-to-generator": "^7.25.7", + "@babel/plugin-transform-block-scoped-functions": "^7.25.7", + "@babel/plugin-transform-block-scoping": "^7.25.7", + "@babel/plugin-transform-class-properties": "^7.25.7", + "@babel/plugin-transform-class-static-block": "^7.25.7", + "@babel/plugin-transform-classes": "^7.25.7", + "@babel/plugin-transform-computed-properties": "^7.25.7", + "@babel/plugin-transform-destructuring": "^7.25.7", + "@babel/plugin-transform-dotall-regex": "^7.25.7", + "@babel/plugin-transform-duplicate-keys": "^7.25.7", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.7", + "@babel/plugin-transform-dynamic-import": "^7.25.7", + "@babel/plugin-transform-exponentiation-operator": "^7.25.7", + "@babel/plugin-transform-export-namespace-from": "^7.25.7", + "@babel/plugin-transform-for-of": "^7.25.7", + "@babel/plugin-transform-function-name": "^7.25.7", + "@babel/plugin-transform-json-strings": "^7.25.7", + "@babel/plugin-transform-literals": "^7.25.7", + "@babel/plugin-transform-logical-assignment-operators": "^7.25.7", + "@babel/plugin-transform-member-expression-literals": "^7.25.7", + "@babel/plugin-transform-modules-amd": "^7.25.7", + "@babel/plugin-transform-modules-commonjs": "^7.25.7", + "@babel/plugin-transform-modules-systemjs": "^7.25.7", + "@babel/plugin-transform-modules-umd": "^7.25.7", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.7", + "@babel/plugin-transform-new-target": "^7.25.7", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.25.7", + "@babel/plugin-transform-numeric-separator": "^7.25.7", + "@babel/plugin-transform-object-rest-spread": "^7.25.7", + "@babel/plugin-transform-object-super": "^7.25.7", + "@babel/plugin-transform-optional-catch-binding": "^7.25.7", + "@babel/plugin-transform-optional-chaining": "^7.25.7", + "@babel/plugin-transform-parameters": "^7.25.7", + "@babel/plugin-transform-private-methods": "^7.25.7", + "@babel/plugin-transform-private-property-in-object": "^7.25.7", + "@babel/plugin-transform-property-literals": "^7.25.7", + "@babel/plugin-transform-regenerator": "^7.25.7", + "@babel/plugin-transform-reserved-words": "^7.25.7", + "@babel/plugin-transform-shorthand-properties": "^7.25.7", + "@babel/plugin-transform-spread": "^7.25.7", + "@babel/plugin-transform-sticky-regex": "^7.25.7", + "@babel/plugin-transform-template-literals": "^7.25.7", + "@babel/plugin-transform-typeof-symbol": "^7.25.7", + "@babel/plugin-transform-unicode-escapes": "^7.25.7", + "@babel/plugin-transform-unicode-property-regex": "^7.25.7", + "@babel/plugin-transform-unicode-regex": "^7.25.7", + "@babel/plugin-transform-unicode-sets-regex": "^7.25.7", "@babel/preset-modules": "0.1.6-no-external-plugins", "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.4", + "babel-plugin-polyfill-corejs3": "^0.10.6", "babel-plugin-polyfill-regenerator": "^0.6.1", - "core-js-compat": "^3.37.1", + "core-js-compat": "^3.38.1", "semver": "^6.3.1" }, "dependencies": { @@ -30001,13 +29993,13 @@ } }, "babel-plugin-polyfill-corejs3": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz", - "integrity": "sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==", + "version": "0.10.6", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", + "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", "dev": true, "requires": { - "@babel/helper-define-polyfill-provider": "^0.6.1", - "core-js-compat": "^3.36.1" + "@babel/helper-define-polyfill-provider": "^0.6.2", + "core-js-compat": "^3.38.0" } }, "babel-plugin-polyfill-regenerator": { @@ -30065,12 +30057,6 @@ "@babel/plugin-transform-typescript": "^7.21.3" } }, - "@babel/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", - "dev": true - }, "@babel/runtime": { "version": "7.23.5", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.5.tgz", @@ -30080,36 +30066,36 @@ } }, "@babel/template": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", - "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.7.tgz", + "integrity": "sha512-wRwtAgI3bAS+JGU2upWNL9lSlDcRCqD05BZ1n3X2ONLH1WilFP6O1otQjeMK/1g0pvYcXC7b/qVUB1keofjtZA==", "requires": { - "@babel/code-frame": "^7.24.7", - "@babel/parser": "^7.25.0", - "@babel/types": "^7.25.0" + "@babel/code-frame": "^7.25.7", + "@babel/parser": "^7.25.7", + "@babel/types": "^7.25.7" } }, "@babel/traverse": { - "version": "7.25.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.3.tgz", - "integrity": "sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==", - "requires": { - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.25.0", - "@babel/parser": "^7.25.3", - "@babel/template": "^7.25.0", - "@babel/types": "^7.25.2", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.7.tgz", + "integrity": "sha512-jatJPT1Zjqvh/1FyJs6qAHL+Dzb7sTb+xr7Q+gM1b+1oBsMsQQ4FkVKb6dFlJvLlVssqkRzV05Jzervt9yhnzg==", + "requires": { + "@babel/code-frame": "^7.25.7", + "@babel/generator": "^7.25.7", + "@babel/parser": "^7.25.7", + "@babel/template": "^7.25.7", + "@babel/types": "^7.25.7", "debug": "^4.3.1", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz", - "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.7.tgz", + "integrity": "sha512-vwIVdXG+j+FOpkwqHRcBgHLYNL7XMkufrlaFvL9o6Ai9sJn9+PdyIL5qa0XzTZw084c+u9LOls53eoZWP/W5WQ==", "requires": { - "@babel/helper-string-parser": "^7.24.8", - "@babel/helper-validator-identifier": "^7.24.7", + "@babel/helper-string-parser": "^7.25.7", + "@babel/helper-validator-identifier": "^7.25.7", "to-fast-properties": "^2.0.0" } }, @@ -34419,12 +34405,12 @@ "dev": true }, "browserslist": { - "version": "4.23.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", - "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.0.tgz", + "integrity": "sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==", "requires": { - "caniuse-lite": "^1.0.30001646", - "electron-to-chromium": "^1.5.4", + "caniuse-lite": "^1.0.30001663", + "electron-to-chromium": "^1.5.28", "node-releases": "^2.0.18", "update-browserslist-db": "^1.1.0" } @@ -34540,9 +34526,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001651", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001651.tgz", - "integrity": "sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg==" + "version": "1.0.30001666", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001666.tgz", + "integrity": "sha512-gD14ICmoV5ZZM1OdzPWmpx+q4GyefaK06zi8hmfHV5xe4/2nOQX3+Dw5o+fSqOws2xVwL9j+anOPFwHzdEdV4g==" }, "canvas": { "version": "2.11.2", @@ -34926,9 +34912,9 @@ "dev": true }, "core-js-compat": { - "version": "3.38.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.0.tgz", - "integrity": "sha512-75LAicdLa4OJVwFxFbQR3NdnZjNgX6ILpVcVzcC4T2smerB5lELMrJQQQoWV6TiuC/vlaFqgU2tKQx9w5s0e0A==", + "version": "3.38.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.1.tgz", + "integrity": "sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==", "dev": true, "requires": { "browserslist": "^4.23.3" @@ -35710,9 +35696,9 @@ } }, "electron-to-chromium": { - "version": "1.5.11", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.11.tgz", - "integrity": "sha512-R1CccCDYqndR25CaXFd6hp/u9RaaMcftMkphmvuepXr5b1vfLkRml6aWVeBhXJ7rbevHkKEMJtz8XqPf7ffmew==" + "version": "1.5.31", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.31.tgz", + "integrity": "sha512-QcDoBbQeYt0+3CWcK/rEbuHvwpbT/8SV9T3OSgs6cX1FlcUAkgrkqbg9zLnDrMM/rLamzQwal4LYFCiWk861Tg==" }, "emittery": { "version": "0.7.2", @@ -42776,7 +42762,9 @@ } }, "jsesc": { - "version": "2.5.2" + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==" }, "json-bigint": { "version": "1.0.0", @@ -44872,9 +44860,9 @@ "dev": true }, "regenerate-unicode-properties": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", - "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", + "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", "dev": true, "requires": { "regenerate": "^1.4.2" @@ -44915,34 +44903,32 @@ } }, "regexpu-core": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", - "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.1.1.tgz", + "integrity": "sha512-k67Nb9jvwJcJmVpw0jPttR1/zVfnKf8Km0IPatrU/zJ5XeG3+Slx0xLXs9HByJSzXzrlz5EDvN6yLNMDc2qdnw==", "dev": true, "requires": { - "@babel/regjsgen": "^0.8.0", "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", + "regenerate-unicode-properties": "^10.2.0", + "regjsgen": "^0.8.0", + "regjsparser": "^0.11.0", "unicode-match-property-ecmascript": "^2.0.0", "unicode-match-property-value-ecmascript": "^2.1.0" } }, + "regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", + "dev": true + }, "regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.11.0.tgz", + "integrity": "sha512-vTbzVAjQDzwQdKuvj7qEq6OlAprCjE656khuGQ4QaBLg7abQ9I9ISpmLuc6inWe7zP75AECjqUa4g4sdQvOXhg==", "dev": true, "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "dev": true - } + "jsesc": "~3.0.2" } }, "relateurl": { @@ -47115,9 +47101,9 @@ "devOptional": true }, "unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", + "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", "dev": true }, "unicode-match-property-ecmascript": { @@ -47131,9 +47117,9 @@ } }, "unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", + "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", "dev": true }, "unicode-property-aliases-ecmascript": { diff --git a/package.json b/package.json index a9d5d7d5e..f04822efe 100644 --- a/package.json +++ b/package.json @@ -58,7 +58,7 @@ }, "devDependencies": { "@babel/eslint-parser": "^7.22.6", - "@babel/preset-env": "^7.25.3", + "@babel/preset-env": "^7.25.7", "@babel/preset-react": "^7.24.7", "@types/create-hash": "^1.2.6", "@types/enzyme": "^3.10.12", From e7a89c90be6df38379ead3fa8b20b350b07201b4 Mon Sep 17 00:00:00 2001 From: Shawn Xie <35279399+shawnxie999@users.noreply.github.com> Date: Thu, 10 Oct 2024 15:34:04 -0400 Subject: [PATCH 46/79] XLS-33 Multi Purpose token (#989) ## High Level Overview of Change - add MPT transactions: MPTokenIssuance, MPTokenIssuanceDestroy, MPTokenAuthorize, MPTokenIssuanceSet - add MPT page - support search by MPTID - updates transactions: Payment, Clawback - modified Currency to support MPTID <!-- Please include a summary/list of the changes. If too broad, please consider splitting into multiple PRs. --> ### Context of Change Spec: https://github.com/XRPLF/XRPL-Standards/tree/master/XLS-0033d-multi-purpose-tokens --- public/locales/ca-CA/translations.json | 25 ++- public/locales/en-US/translations.json | 25 ++- public/locales/es-ES/translations.json | 25 ++- public/locales/fr-FR/translations.json | 25 ++- public/locales/ja-JP/translations.json | 25 ++- public/locales/ko-KR/translations.json | 25 ++- .../test/AMMAccountHeader.test.tsx | 14 +- .../AccountAssetTab/AccountAssetTab.tsx | 11 +- .../AccountMPTTable/AccountMPTTable.tsx | 125 +++++++++++++++ .../test/AccountMPTRow.test.tsx | 63 ++++++++ .../test/AccountMPTTable.test.tsx | 114 ++++++++++++++ src/containers/App/index.tsx | 3 + src/containers/App/routes.ts | 8 +- src/containers/Header/Search.tsx | 12 +- src/containers/Header/test/Search.test.js | 4 + src/containers/Ledger/index.tsx | 4 +- src/containers/MPT/MPT.tsx | 75 +++++++++ src/containers/MPT/MPTHeader/Details.tsx | 48 ++++++ src/containers/MPT/MPTHeader/MPTHeader.tsx | 117 ++++++++++++++ src/containers/MPT/MPTHeader/Settings.tsx | 41 +++++ src/containers/MPT/MPTHeader/styles.scss | 144 ++++++++++++++++++ .../MPT/MPTHeader/test/Details.test.js | 58 +++++++ .../MPT/MPTHeader/test/MPTHeader.test.js | 82 ++++++++++ .../MPT/MPTHeader/test/Settings.test.js | 48 ++++++ src/containers/MPT/styles.scss | 15 ++ src/containers/MPT/test/MPT.test.js | 46 ++++++ src/containers/NFT/NFTHeader/NFTHeader.tsx | 4 +- .../Transactions/DetailTab/Meta/MPToken.jsx | 43 ++++++ .../DetailTab/Meta/MPTokenIssuance.jsx | 43 ++++++ .../DetailTab/Meta/RippleState.jsx | 7 +- .../Transactions/DetailTab/Meta/index.tsx | 6 + src/containers/Transactions/index.tsx | 9 +- .../Transactions/test/Description.test.tsx | 10 +- .../Transactions/test/DetailTab.test.tsx | 10 +- .../Transactions/test/Meta.test.tsx | 29 ++++ .../Transactions/test/SimpleTab.test.tsx | 16 +- .../test/mock_data/DirectMPTPayment.json | 95 ++++++++++++ src/containers/shared/Interfaces.tsx | 14 ++ src/containers/shared/analytics.ts | 1 + src/containers/shared/components/Amount.tsx | 51 ++++++- src/containers/shared/components/Currency.tsx | 56 ++++--- .../shared/components/MPTokenLink.tsx | 12 ++ .../shared/components/Tooltip/Tooltip.tsx | 3 + .../Transaction/Clawback/Description.tsx | 2 +- .../components/Transaction/Clawback/parser.ts | 38 ++++- .../Clawback/test/ClawbackSimple.test.tsx | 48 ++++++ .../Clawback/test/mock_data/ClawbackMPT.json | 85 +++++++++++ .../test/mock_data/ClawbackMPT_Failure.json | 46 ++++++ .../components/Transaction/Clawback/types.ts | 1 + .../Transaction/MPTokenAuthorize/Simple.tsx | 26 ++++ .../Transaction/MPTokenAuthorize/index.ts | 13 ++ .../test/MPTokenAuthorizeSimple.test.jsx | 66 ++++++++ .../test/mock_data/MPTokenAuthorize.json | 70 +++++++++ .../test/mock_data/MPTokenAuthorize_Fail.json | 49 ++++++ .../MPTokenAuthorize_WithHolder.json | 67 ++++++++ .../MPTokenAuthorize_WithHolderFail.json | 50 ++++++ .../Transaction/MPTokenAuthorize/types.ts | 6 + .../MPTokenIssuanceCreate/Simple.tsx | 63 ++++++++ .../MPTokenIssuanceCreate/index.ts | 15 ++ .../MPTokenIssuanceCreate/parser.ts | 21 +++ .../test/MPTokenIssuanceCreateSimple.test.jsx | 27 ++++ .../test/mock_data/MPTokenIssuanceCreate.json | 79 ++++++++++ .../MPTokenIssuanceCreate/types.ts | 16 ++ .../MPTokenIssuanceDestroy/Simple.tsx | 18 +++ .../MPTokenIssuanceDestroy/index.ts | 13 ++ .../MPTokenIssuanceDestroySimple.test.jsx | 29 ++++ .../mock_data/MPTokenIssuanceDestroy.json | 76 +++++++++ .../MPTokenIssuanceDestroy_Fail.json | 49 ++++++ .../MPTokenIssuanceDestroy/types.ts | 5 + .../Transaction/MPTokenIssuanceSet/Simple.tsx | 26 ++++ .../Transaction/MPTokenIssuanceSet/index.ts | 13 ++ .../test/MPTokenIssuanceSetSimple.test.jsx | 53 +++++++ .../test/mock_data/MPTokenIssuanceSet.json | 67 ++++++++ .../mock_data/MPTokenIssuanceSet_Fail.json | 50 ++++++ .../MPTokenIssuanceSet_NoHolder.json | 67 ++++++++ .../Transaction/MPTokenIssuanceSet/types.ts | 6 + .../Transaction/NFTokenAcceptOffer/types.ts | 4 +- .../test/NFTokenCancelOfferSimple.test.jsx | 18 ++- .../Transaction/NFTokenCreateOffer/types.ts | 4 +- .../Transaction/OfferCreate/parser.ts | 2 +- .../Transaction/OracleSet/parser.ts | 15 +- .../OracleSet/test/ConvertScalePrice.test.ts | 2 +- .../components/Transaction/Payment/parser.ts | 5 +- .../Payment/test/PaymentSimple.test.tsx | 35 +++++ .../Payment/test/mock_data/PaymentMPT.json | 91 +++++++++++ .../shared/components/Transaction/index.ts | 8 + .../Transaction/test/createWrapperFactory.tsx | 10 +- .../shared/components/Transaction/types.ts | 1 + .../test/TransactionTable.test.js | 26 ++-- .../shared/components/test/Amount.test.tsx | 36 +++++ .../shared/components/test/Currency.test.tsx | 22 +++ src/containers/shared/css/global.scss | 1 + src/containers/shared/css/variables.scss | 1 + src/containers/shared/transactionUtils.ts | 15 ++ src/containers/shared/types.ts | 10 +- src/containers/shared/utils.js | 59 ++++++- src/rippled/lib/rippled.js | 54 ++++++- src/rippled/lib/txSummary/formatAmount.ts | 28 +++- src/rippled/lib/utils.js | 45 +++++- 99 files changed, 3225 insertions(+), 118 deletions(-) create mode 100644 src/containers/Accounts/AccountMPTTable/AccountMPTTable.tsx create mode 100644 src/containers/Accounts/AccountMPTTable/test/AccountMPTRow.test.tsx create mode 100644 src/containers/Accounts/AccountMPTTable/test/AccountMPTTable.test.tsx create mode 100644 src/containers/MPT/MPT.tsx create mode 100644 src/containers/MPT/MPTHeader/Details.tsx create mode 100644 src/containers/MPT/MPTHeader/MPTHeader.tsx create mode 100644 src/containers/MPT/MPTHeader/Settings.tsx create mode 100644 src/containers/MPT/MPTHeader/styles.scss create mode 100644 src/containers/MPT/MPTHeader/test/Details.test.js create mode 100644 src/containers/MPT/MPTHeader/test/MPTHeader.test.js create mode 100644 src/containers/MPT/MPTHeader/test/Settings.test.js create mode 100644 src/containers/MPT/styles.scss create mode 100644 src/containers/MPT/test/MPT.test.js create mode 100644 src/containers/Transactions/DetailTab/Meta/MPToken.jsx create mode 100644 src/containers/Transactions/DetailTab/Meta/MPTokenIssuance.jsx create mode 100644 src/containers/Transactions/test/mock_data/DirectMPTPayment.json create mode 100644 src/containers/shared/components/MPTokenLink.tsx create mode 100644 src/containers/shared/components/Transaction/Clawback/test/mock_data/ClawbackMPT.json create mode 100644 src/containers/shared/components/Transaction/Clawback/test/mock_data/ClawbackMPT_Failure.json create mode 100644 src/containers/shared/components/Transaction/MPTokenAuthorize/Simple.tsx create mode 100644 src/containers/shared/components/Transaction/MPTokenAuthorize/index.ts create mode 100644 src/containers/shared/components/Transaction/MPTokenAuthorize/test/MPTokenAuthorizeSimple.test.jsx create mode 100644 src/containers/shared/components/Transaction/MPTokenAuthorize/test/mock_data/MPTokenAuthorize.json create mode 100644 src/containers/shared/components/Transaction/MPTokenAuthorize/test/mock_data/MPTokenAuthorize_Fail.json create mode 100644 src/containers/shared/components/Transaction/MPTokenAuthorize/test/mock_data/MPTokenAuthorize_WithHolder.json create mode 100644 src/containers/shared/components/Transaction/MPTokenAuthorize/test/mock_data/MPTokenAuthorize_WithHolderFail.json create mode 100644 src/containers/shared/components/Transaction/MPTokenAuthorize/types.ts create mode 100644 src/containers/shared/components/Transaction/MPTokenIssuanceCreate/Simple.tsx create mode 100644 src/containers/shared/components/Transaction/MPTokenIssuanceCreate/index.ts create mode 100644 src/containers/shared/components/Transaction/MPTokenIssuanceCreate/parser.ts create mode 100644 src/containers/shared/components/Transaction/MPTokenIssuanceCreate/test/MPTokenIssuanceCreateSimple.test.jsx create mode 100644 src/containers/shared/components/Transaction/MPTokenIssuanceCreate/test/mock_data/MPTokenIssuanceCreate.json create mode 100644 src/containers/shared/components/Transaction/MPTokenIssuanceCreate/types.ts create mode 100644 src/containers/shared/components/Transaction/MPTokenIssuanceDestroy/Simple.tsx create mode 100644 src/containers/shared/components/Transaction/MPTokenIssuanceDestroy/index.ts create mode 100644 src/containers/shared/components/Transaction/MPTokenIssuanceDestroy/test/MPTokenIssuanceDestroySimple.test.jsx create mode 100644 src/containers/shared/components/Transaction/MPTokenIssuanceDestroy/test/mock_data/MPTokenIssuanceDestroy.json create mode 100644 src/containers/shared/components/Transaction/MPTokenIssuanceDestroy/test/mock_data/MPTokenIssuanceDestroy_Fail.json create mode 100644 src/containers/shared/components/Transaction/MPTokenIssuanceDestroy/types.ts create mode 100644 src/containers/shared/components/Transaction/MPTokenIssuanceSet/Simple.tsx create mode 100644 src/containers/shared/components/Transaction/MPTokenIssuanceSet/index.ts create mode 100644 src/containers/shared/components/Transaction/MPTokenIssuanceSet/test/MPTokenIssuanceSetSimple.test.jsx create mode 100644 src/containers/shared/components/Transaction/MPTokenIssuanceSet/test/mock_data/MPTokenIssuanceSet.json create mode 100644 src/containers/shared/components/Transaction/MPTokenIssuanceSet/test/mock_data/MPTokenIssuanceSet_Fail.json create mode 100644 src/containers/shared/components/Transaction/MPTokenIssuanceSet/test/mock_data/MPTokenIssuanceSet_NoHolder.json create mode 100644 src/containers/shared/components/Transaction/MPTokenIssuanceSet/types.ts create mode 100644 src/containers/shared/components/Transaction/Payment/test/mock_data/PaymentMPT.json diff --git a/public/locales/ca-CA/translations.json b/public/locales/ca-CA/translations.json index d5e305960..a39916bf5 100644 --- a/public/locales/ca-CA/translations.json +++ b/public/locales/ca-CA/translations.json @@ -530,5 +530,28 @@ "last_update_time": null, "asset_class": null, "trading_pairs": null, - "deleted": null + "deleted": null, + "assets.mpt_tab_title": null, + "assets.no_mpts_message": null, + "transaction_type_name_MPTokenIssuanceCreate": null, + "transaction_type_name_MPTokenIssuanceDestroy": null, + "transaction_type_name_MPTokenIssuanceSet": null, + "transaction_type_name_MPTokenAuthorize": null, + "transaction_outstanding_balance_line_two": null, + "transaction_mptoken_line_one": null, + "transaction_mpt_issuance_line_one":null, + "mpt_issuance_id": null, + "asset_scale": null, + "metadata": null, + "max_amount": null, + "mpt_holder": null, + "check_mpt_id": null, + "outstanding_amount": null, + "locked": null, + "can_lock": null, + "require_auth": null, + "can_escrow": null, + "can_trade": null, + "can_transfer": null, + "can_clawback": null } diff --git a/public/locales/en-US/translations.json b/public/locales/en-US/translations.json index 369edfa7a..58453bb65 100644 --- a/public/locales/en-US/translations.json +++ b/public/locales/en-US/translations.json @@ -2,9 +2,11 @@ "action": "action", "assets": "Assets", "assets.nft_tab_title": "Non-Fungible Tokens", + "assets.mpt_tab_title": "Multi-Purpose Tokens", "assets.issued_tab_title": "Issued Tokens", "assets.no_issued_message": "No tokens found.", "assets.no_nfts_message": "No NFTs found.", + "assets.no_mpts_message": "No MPTs found.", "network": "Network", "amendments": "Amendments", "network_name": "Unknown Network", @@ -166,6 +168,10 @@ "transaction_type_name_EscrowCreate": "Escrow Create", "transaction_type_name_EscrowFinish": "Escrow Finish", "transaction_type_name_Invoke": "Invoke", + "transaction_type_name_MPTokenIssuanceCreate": "MPT Issuance Create", + "transaction_type_name_MPTokenIssuanceDestroy": "MPT Issuance Destroy", + "transaction_type_name_MPTokenIssuanceSet": "MPT Issuance Set", + "transaction_type_name_MPTokenAuthorize": "MPT Authorize", "transaction_type_name_NFTokenAcceptOffer": "NFT Accept Offer", "transaction_type_name_NFTokenBurn": "NFT Burn", "transaction_type_name_NFTokenCancelOffer": "NFT Cancel Offer", @@ -248,8 +254,11 @@ "node_meta_type": "It {{action}} a node with type", "transaction_balance_line_one": "It <1><0>{{action}}</0></1> a <3><0>{{currency}}</0></3> RippleState node between <5><0>{{account}}</0></5> and <7><0>{{counterAccount}}</0></7>", "transaction_balance_line_two": "Balance changed by <1><0>{{change}}</0></1> from <3><0>{{previousBalance}}</0></3> to <5><0>{{finalBalance}}</0></5>", + "transaction_outstanding_balance_line_two": "Outstanding balance changed by <1><0>{{change}}</0></1> from <3><0>{{previousBalance}}</0></3> to <5><0>{{finalBalance}}</0></5>", "transaction_owned_directory": "It {{action}} a DirectoryNode node owned by", "transaction_unowned_directory": "It {{action}} a DirectoryNode node", + "transaction_mptoken_line_one": "It <1><0>{{action}}</0></1> an MPToken node of <3><0>{{account}}</0></3>", + "transaction_mpt_issuance_line_one": "It <1><0>{{action}}</0></1> an MPTokenIssuance node of <3><0>{{account}}</0></3>", "owned_account_root": "It {{action}} the AccountRoot node of", "unowned_account_root": "It {{action}} the AccountRoot node", "account_balance_increased": "Balance increased by <1><0>{{difference}}</0><1><0>{{currency}}</0></1></1> from <3><0>{{previous}}</0><1><0>{{currency}}</0></1></3> to <5><0>{{final}}</0><1><0>{{currency}}</0></1></5>", @@ -530,5 +539,19 @@ "last_update_time": "Last Update Time", "asset_class": "Asset Class", "trading_pairs": "Trading Pairs", - "deleted": "Deleted" + "deleted": "Deleted", + "mpt_issuance_id": "MPT Issuance ID", + "asset_scale": "Asset Scale", + "metadata": "Metadata", + "max_amount": "Max Amount", + "mpt_holder": "MPT Holder", + "check_mpt_id": "Please check your MPT Issuance ID", + "outstanding_amount": "Issued Amount", + "locked": "Locked", + "can_lock": "Can Lock", + "require_auth": "Require Auth", + "can_escrow": "Can Escrow", + "can_trade": "Can Trade", + "can_transfer": "Can Transfer", + "can_clawback": "Can Clawback" } diff --git a/public/locales/es-ES/translations.json b/public/locales/es-ES/translations.json index bde04d337..d694f1db3 100644 --- a/public/locales/es-ES/translations.json +++ b/public/locales/es-ES/translations.json @@ -526,5 +526,28 @@ "last_update_time": null, "asset_class": null, "trading_pairs": null, - "deleted": null + "deleted": null, + "assets.mpt_tab_title": null, + "assets.no_mpts_message": null, + "transaction_type_name_MPTokenIssuanceCreate": null, + "transaction_type_name_MPTokenIssuanceDestroy": null, + "transaction_type_name_MPTokenIssuanceSet": null, + "transaction_type_name_MPTokenAuthorize": null, + "transaction_outstanding_balance_line_two": null, + "transaction_mptoken_line_one": null, + "transaction_mpt_issuance_line_one":null, + "mpt_issuance_id": null, + "asset_scale": null, + "metadata": null, + "max_amount": null, + "mpt_holder": null, + "check_mpt_id": null, + "outstanding_amount": null, + "locked": null, + "can_lock": null, + "require_auth": null, + "can_escrow": null, + "can_trade": null, + "can_transfer": null, + "can_clawback": null } diff --git a/public/locales/fr-FR/translations.json b/public/locales/fr-FR/translations.json index 9cbdc4293..d6683c855 100644 --- a/public/locales/fr-FR/translations.json +++ b/public/locales/fr-FR/translations.json @@ -527,5 +527,28 @@ "last_update_time": null, "asset_class": null, "trading_pairs": null, - "deleted": null + "deleted": null, + "assets.mpt_tab_title": null, + "assets.no_mpts_message": null, + "transaction_type_name_MPTokenIssuanceCreate": null, + "transaction_type_name_MPTokenIssuanceDestroy": null, + "transaction_type_name_MPTokenIssuanceSet": null, + "transaction_type_name_MPTokenAuthorize": null, + "transaction_outstanding_balance_line_two": null, + "transaction_mptoken_line_one": null, + "transaction_mpt_issuance_line_one":null, + "mpt_issuance_id": null, + "asset_scale": null, + "metadata": null, + "max_amount": null, + "mpt_holder": null, + "check_mpt_id": null, + "outstanding_amount": null, + "locked": null, + "can_lock": null, + "require_auth": null, + "can_escrow": null, + "can_trade": null, + "can_transfer": null, + "can_clawback": null } diff --git a/public/locales/ja-JP/translations.json b/public/locales/ja-JP/translations.json index 953a54eba..9ed8133ee 100644 --- a/public/locales/ja-JP/translations.json +++ b/public/locales/ja-JP/translations.json @@ -526,5 +526,28 @@ "last_update_time": null, "asset_class": null, "trading_pairs": null, - "deleted": null + "deleted": null, + "assets.mpt_tab_title": null, + "assets.no_mpts_message": null, + "transaction_type_name_MPTokenIssuanceCreate": null, + "transaction_type_name_MPTokenIssuanceDestroy": null, + "transaction_type_name_MPTokenIssuanceSet": null, + "transaction_type_name_MPTokenAuthorize": null, + "transaction_outstanding_balance_line_two": null, + "transaction_mptoken_line_one": null, + "transaction_mpt_issuance_line_one":null, + "mpt_issuance_id": null, + "asset_scale": null, + "metadata": null, + "max_amount": null, + "mpt_holder": null, + "check_mpt_id": null, + "outstanding_amount": null, + "locked": null, + "can_lock": null, + "require_auth": null, + "can_escrow": null, + "can_trade": null, + "can_transfer": null, + "can_clawback": null } diff --git a/public/locales/ko-KR/translations.json b/public/locales/ko-KR/translations.json index 2094a1fe5..148714cd5 100644 --- a/public/locales/ko-KR/translations.json +++ b/public/locales/ko-KR/translations.json @@ -524,5 +524,28 @@ "last_update_time": null, "asset_class": null, "trading_pairs": null, - "deleted": null + "deleted": null, + "assets.mpt_tab_title": null, + "assets.no_mpts_message": null, + "transaction_type_name_MPTokenIssuanceCreate": null, + "transaction_type_name_MPTokenIssuanceDestroy": null, + "transaction_type_name_MPTokenIssuanceSet": null, + "transaction_type_name_MPTokenAuthorize": null, + "transaction_outstanding_balance_line_two": null, + "transaction_mptoken_line_one": null, + "transaction_mpt_issuance_line_one":null, + "mpt_issuance_id": null, + "asset_scale": null, + "metadata": null, + "max_amount": null, + "mpt_holder": null, + "check_mpt_id": null, + "outstanding_amount": null, + "locked": null, + "can_lock": null, + "require_auth": null, + "can_escrow": null, + "can_trade": null, + "can_transfer": null, + "can_clawback": null } diff --git a/src/containers/Accounts/AMM/AMMAccounts/AMMAccountHeader/test/AMMAccountHeader.test.tsx b/src/containers/Accounts/AMM/AMMAccounts/AMMAccountHeader/test/AMMAccountHeader.test.tsx index bc38fa370..74ad7ef95 100644 --- a/src/containers/Accounts/AMM/AMMAccounts/AMMAccountHeader/test/AMMAccountHeader.test.tsx +++ b/src/containers/Accounts/AMM/AMMAccounts/AMMAccountHeader/test/AMMAccountHeader.test.tsx @@ -1,20 +1,24 @@ import { mount } from 'enzyme' import { I18nextProvider } from 'react-i18next' import { MemoryRouter } from 'react-router' +import { QueryClientProvider } from 'react-query' import i18n from '../../../../../../i18n/testConfig' import { AMMAccountHeader, AmmDataType } from '../AMMAccountHeader' import { flushPromises } from '../../../../../test/utils' +import { queryClient } from '../../../../../shared/QueryClient' describe('AMM Account Header', () => { const TEST_ACCOUNT_ID = 'rTEST_ACCOUNT' const createWrapper = (state: AmmDataType) => mount( - <I18nextProvider i18n={i18n}> - <MemoryRouter initialEntries={[`accounts/${TEST_ACCOUNT_ID}`]}> - <AMMAccountHeader data={state} /> - </MemoryRouter> - </I18nextProvider>, + <QueryClientProvider client={queryClient}> + <I18nextProvider i18n={i18n}> + <MemoryRouter initialEntries={[`accounts/${TEST_ACCOUNT_ID}`]}> + <AMMAccountHeader data={state} /> + </MemoryRouter> + </I18nextProvider> + </QueryClientProvider>, ) it('renders AMM account page', async () => { diff --git a/src/containers/Accounts/AccountAssetTab/AccountAssetTab.tsx b/src/containers/Accounts/AccountAssetTab/AccountAssetTab.tsx index c58f6e6da..2832e2834 100644 --- a/src/containers/Accounts/AccountAssetTab/AccountAssetTab.tsx +++ b/src/containers/Accounts/AccountAssetTab/AccountAssetTab.tsx @@ -5,6 +5,7 @@ import { useNavigate } from 'react-router' import { useRouteParams } from '../../shared/routing' import { AccountIssuedTokenTable } from '../AccountIssuedTokenTable' import { AccountNFTTable } from '../AccountNFTTable/AccountNFTTable' +import { AccountMPTTable } from '../AccountMPTTable/AccountMPTTable' import { ACCOUNT_ROUTE } from '../../App/routes' // TODO: Add state types or convert to react query @@ -12,11 +13,17 @@ interface Props { account: any } -const assetTypes = ['issued', 'nft'] +let assetTypes = ['issued', 'nft'] const AccountAssetTabDisconnected = ({ account }: Props) => { const { id: accountId = '', assetType = assetTypes[0] } = useRouteParams(ACCOUNT_ROUTE) + + const supportsMPT = ['mpt_sandbox', 'devnet'].includes( + process.env.VITE_ENVIRONMENT as string, + ) + if (supportsMPT) assetTypes = ['issued', 'nft', 'mpt'] + const navigate = useNavigate() const { t } = useTranslation() function switchAsset(event: ChangeEvent<HTMLInputElement>) { @@ -48,11 +55,13 @@ const AccountAssetTabDisconnected = ({ account }: Props) => { ) })} </div> + <div className="tab-body"> {assetType === 'issued' && ( <AccountIssuedTokenTable account={account} /> )} {assetType === 'nft' && <AccountNFTTable accountId={accountId} />} + {assetType === 'mpt' && <AccountMPTTable accountId={accountId} />} </div> </> ) diff --git a/src/containers/Accounts/AccountMPTTable/AccountMPTTable.tsx b/src/containers/Accounts/AccountMPTTable/AccountMPTTable.tsx new file mode 100644 index 000000000..d1ab69f6c --- /dev/null +++ b/src/containers/Accounts/AccountMPTTable/AccountMPTTable.tsx @@ -0,0 +1,125 @@ +import { useContext } from 'react' +import { useTranslation } from 'react-i18next' +import { useInfiniteQuery, useQuery } from 'react-query' +import { Loader } from '../../shared/components/Loader' +import SocketContext from '../../shared/SocketContext' +import { useAnalytics } from '../../shared/analytics' +import { EmptyMessageTableRow } from '../../shared/EmptyMessageTableRow' +import { getAccountMPTs, getMPTIssuance } from '../../../rippled/lib/rippled' +import { Account } from '../../shared/components/Account' +import { LoadMoreButton } from '../../shared/LoadMoreButton' +import { MPTokenLink } from '../../shared/components/MPTokenLink' +import { + formatMPTokenInfo, + formatMPTIssuanceInfo, +} from '../../../rippled/lib/utils' +import { MPTIssuanceFormattedInfo } from '../../shared/Interfaces' +import { convertScaledPrice } from '../../shared/utils' + +export interface AccountMPTTableProps { + accountId: string +} + +export const AccountMPTRow = ({ mpt }: any) => { + const rippledSocket = useContext(SocketContext) + const { trackException } = useAnalytics() + const { data: mptIssuanceData } = useQuery<MPTIssuanceFormattedInfo>( + ['getMPTIssuanceScale', mpt.mptIssuanceID], + async () => { + const info = await getMPTIssuance(rippledSocket, mpt.mptIssuanceID) + return formatMPTIssuanceInfo(info) + }, + { + onError: (e: any) => { + trackException( + `mptIssuance ${mpt.mptIssuanceID} --- ${JSON.stringify(e)}`, + ) + }, + }, + ) + + if (!mptIssuanceData) return null + + const scale = mptIssuanceData?.assetScale ?? 0 + + return ( + <tr> + <td> + <MPTokenLink tokenID={mpt.mptIssuanceID} /> + </td> + <td> + <Account account={mpt.mptIssuer} /> + </td> + <td className="right"> + {convertScaledPrice( + parseInt(mpt.mptAmount as string, 10).toString(16), + scale, + )} + </td> + </tr> + ) +} + +export const AccountMPTTable = ({ accountId }: AccountMPTTableProps) => { + const rippledSocket = useContext(SocketContext) + const { trackException } = useAnalytics() + const { + data: pages, + isFetching: loading, + hasNextPage, + fetchNextPage, + } = useInfiniteQuery( + ['account_objects', accountId], + ({ pageParam = '' }) => + getAccountMPTs(rippledSocket, accountId, pageParam).catch( + (errorResponse) => { + const errorLocation = `account MPTs ${accountId} at ${pageParam}` + trackException( + `${errorLocation} --- ${JSON.stringify(errorResponse)}`, + ) + }, + ), + { + getNextPageParam: (data) => data.marker, + }, + ) + const { t } = useTranslation() + + function renderNoResults() { + return ( + <EmptyMessageTableRow colSpan={3}> + {t('assets.no_mpts_message')} + </EmptyMessageTableRow> + ) + } + + const renderLoadMoreButton = () => + hasNextPage && <LoadMoreButton onClick={() => fetchNextPage()} /> + + const mpts = pages?.pages + .flatMap((page: any) => page.account_objects) + .map((mpt) => formatMPTokenInfo(mpt)) + + return ( + <div className="section nodes-table"> + <table className="basic"> + <thead> + <tr> + <th> {t('mpt_issuance_id')}</th> + <th> {t('issuer')}</th> + <th className="right">{t('amount')}</th> + </tr> + </thead> + <tbody> + {!loading && + (mpts?.length + ? mpts.map((mpt) => ( + <AccountMPTRow key={mpt.mptIssuanceID} mpt={mpt} /> + )) + : renderNoResults())} + </tbody> + </table> + {loading ? <Loader /> : renderLoadMoreButton()} + </div> + ) +} diff --git a/src/containers/Accounts/AccountMPTTable/test/AccountMPTRow.test.tsx b/src/containers/Accounts/AccountMPTTable/test/AccountMPTRow.test.tsx new file mode 100644 index 000000000..04d9eb120 --- /dev/null +++ b/src/containers/Accounts/AccountMPTTable/test/AccountMPTRow.test.tsx @@ -0,0 +1,63 @@ +import { I18nextProvider } from 'react-i18next' +import { BrowserRouter } from 'react-router-dom' +import { mount } from 'enzyme' +import { QueryClientProvider } from 'react-query' +import { AccountMPTRow } from '../AccountMPTTable' +import i18n from '../../../../i18n/testConfig' +import { testQueryClient } from '../../../test/QueryClient' +import { getMPTIssuance } from '../../../../rippled/lib/rippled' +import { flushPromises } from '../../../test/utils' + +import Mock = jest.Mock + +jest.mock('../../../../rippled/lib/rippled', () => ({ + __esModule: true, + getMPTIssuance: jest.fn(), +})) + +const mockedFetMPTIssuance = getMPTIssuance as Mock + +const mptData = { + account: 'rw6UtpfBFaGht6SiC1HpDPNw6Yt25pKvnu', + flags: [], + mptIssuanceID: '000017C2CE76E3E3328AE9E0D80CDD68BA72CC8D8D053DB6', + mptIssuer: 'rKFgd9FNzwu7a7iVYa2Me4dmBC3zzUepSC', + mptAmount: '100', +} + +describe('AccountMPTRow', () => { + const createWrapper = (component: JSX.Element) => + mount( + <QueryClientProvider client={testQueryClient}> + <I18nextProvider i18n={i18n}> + <BrowserRouter>{component}</BrowserRouter> + </I18nextProvider> + </QueryClientProvider>, + ) + + it('handles Account MPT row', async () => { + const issuanceData = { + node: { + AssetScale: 3, + }, + } + + mockedFetMPTIssuance.mockReset() + + mockedFetMPTIssuance.mockImplementation(() => + Promise.resolve({ ...issuanceData }), + ) + + const wrapper = createWrapper(<AccountMPTRow mpt={mptData} />) + await flushPromises() + wrapper.update() + expect(wrapper.find('td').at(0).html()).toBe( + '<td><a title="000017C2CE76E3E3328AE9E0D80CDD68BA72CC8D8D053DB6" class="" href="/mpt/000017C2CE76E3E3328AE9E0D80CDD68BA72CC8D8D053DB6">000017C2CE76E3E3328AE9E0D80CDD68BA72CC8D8D053DB6</a></td>', + ) + expect(wrapper.find('td').at(1).html()).toBe( + '<td><a title="rKFgd9FNzwu7a7iVYa2Me4dmBC3zzUepSC" class="account" href="/accounts/rKFgd9FNzwu7a7iVYa2Me4dmBC3zzUepSC">rKFgd9FNzwu7a7iVYa2Me4dmBC3zzUepSC</a></td>', + ) + expect(wrapper.find('td').at(2).html()).toBe('<td class="right">0.100</td>') + wrapper.unmount() + }) +}) diff --git a/src/containers/Accounts/AccountMPTTable/test/AccountMPTTable.test.tsx b/src/containers/Accounts/AccountMPTTable/test/AccountMPTTable.test.tsx new file mode 100644 index 000000000..5ad642fb2 --- /dev/null +++ b/src/containers/Accounts/AccountMPTTable/test/AccountMPTTable.test.tsx @@ -0,0 +1,114 @@ +import { mount } from 'enzyme' +import { QueryClientProvider } from 'react-query' +import { I18nextProvider } from 'react-i18next' +import { BrowserRouter } from 'react-router-dom' +import { getAccountMPTs } from '../../../../rippled/lib/rippled' +import { AccountMPTTable } from '../AccountMPTTable' +import i18n from '../../../../i18n/testConfig' +import { EmptyMessageTableRow } from '../../../shared/EmptyMessageTableRow' +import { testQueryClient } from '../../../test/QueryClient' +import { flushPromises } from '../../../test/utils' + +import Mock = jest.Mock + +jest.mock('../../../../rippled/lib/rippled', () => ({ + __esModule: true, + getAccountMPTs: jest.fn(), +})) + +const mockedGetAccountMPTs = getAccountMPTs as Mock + +const data = { + account: 'rw6UtpfBFaGht6SiC1HpDPNw6Yt25pKvnu', + account_objects: [ + { + Account: 'rw6UtpfBFaGht6SiC1HpDPNw6Yt25pKvnu', + Flags: 0, + LedgerEntryType: 'MPToken', + MPTAmount: '100', + MPTokenIssuanceID: '000017C2CE76E3E3328AE9E0D80CDD68BA72CC8D8D053DB6', + OwnerNode: '0', + PreviousTxnID: + '98646C9E7C6D7B8461DC92712B83EFF6CDA4203CE3FF3FF7E0B86FD57907949F', + PreviousTxnLgrSeq: 969, + index: '3BAA73912496683A414494218D3CCA33D02F80D588F80C1257C691448E00E486', + }, + ], + ledger_current_index: 970, + status: 'success', + validated: false, +} + +describe('AccountMPTTable component', () => { + const TEST_ACCOUNT_ID = 'rTEST_ACCOUNT' + + const createWrapper = () => + mount( + <QueryClientProvider client={testQueryClient}> + <BrowserRouter> + <I18nextProvider i18n={i18n}> + <AccountMPTTable accountId={TEST_ACCOUNT_ID} /> + </I18nextProvider> + </BrowserRouter> + </QueryClientProvider>, + ) + + afterEach(() => { + mockedGetAccountMPTs.mockReset() + }) + + it('should render a table of mpts', async () => { + mockedGetAccountMPTs.mockReset() + + mockedGetAccountMPTs.mockImplementation(() => Promise.resolve(data)) + + const wrapper = createWrapper() + await flushPromises() + wrapper.update() + expect(wrapper.find('.load-more-btn')).not.toExist() + wrapper.unmount() + }) + + it('should handle load more', async () => { + mockedGetAccountMPTs.mockReset() + + mockedGetAccountMPTs.mockImplementation(() => + Promise.resolve({ + ...data, + marker: 'hello', + }), + ) + + const wrapper = createWrapper() + await flushPromises() + wrapper.update() + + expect(wrapper.find('.load-more-btn')).toExist() + wrapper.find('.load-more-btn').simulate('click') + expect(mockedGetAccountMPTs.mock.calls[1][2]).toEqual('hello') + wrapper.unmount() + }) + + it(`should handle no results`, async () => { + mockedGetAccountMPTs.mockReset() + + mockedGetAccountMPTs.mockImplementation(() => + Promise.resolve({ + account: 'rLEr9C6kwybj1BFE1iYbhJXNFVz8rnLu8C', + account_objects: [], + ledger_hash: + '7CC58622B7071E675AF63F39AAF81BDB4E87FDFEBB0BA8CE7D753F3C702D2886', + ledger_index: 6086, + validated: true, + marker: 'hello', + }), + ) + + const wrapper = createWrapper() + await flushPromises() + wrapper.update() + + expect(wrapper.find(EmptyMessageTableRow)).toExist() + wrapper.unmount() + }) +}) diff --git a/src/containers/App/index.tsx b/src/containers/App/index.tsx index d03150b9e..1b5734800 100644 --- a/src/containers/App/index.tsx +++ b/src/containers/App/index.tsx @@ -25,6 +25,7 @@ import { VALIDATOR_ROUTE, AMENDMENTS_ROUTE, AMENDMENT_ROUTE, + MPT_ROUTE, } from './routes' import { LedgersPage as Ledgers } from '../Ledgers' import { Ledger } from '../Ledger' @@ -39,6 +40,7 @@ import { legacyRedirect } from './legacyRedirects' import { useCustomNetworks } from '../shared/hooks' import { Amendments } from '../Amendments' import { Amendment } from '../Amendment' +import { MPT } from '../MPT/MPT' export const AppWrapper = () => { const mode = process.env.VITE_ENVIRONMENT @@ -72,6 +74,7 @@ export const AppWrapper = () => { [TOKEN_ROUTE, Token], [NFT_ROUTE, NFT], [AMENDMENT_ROUTE, Amendment], + [MPT_ROUTE, MPT], ] const redirect = legacyRedirect(basename, location) diff --git a/src/containers/App/routes.ts b/src/containers/App/routes.ts index a7ece5ec3..b94707689 100644 --- a/src/containers/App/routes.ts +++ b/src/containers/App/routes.ts @@ -3,7 +3,7 @@ import { RouteDefinition } from '../shared/routing' export const ACCOUNT_ROUTE: RouteDefinition<{ id?: string tab?: 'assets' | 'transactions' - assetType?: 'issued' | 'nfts' + assetType?: 'issued' | 'nfts' | 'mpts' }> = { path: '/accounts/:id?/:tab?/:assetType?', } @@ -66,3 +66,9 @@ export const AMENDMENT_ROUTE: RouteDefinition<{ }> = { path: `/amendment/:identifier`, } + +export const MPT_ROUTE: RouteDefinition<{ + id: string +}> = { + path: '/mpt/:id', +} diff --git a/src/containers/Header/Search.tsx b/src/containers/Header/Search.tsx index 98eed5b17..65f45e3f7 100644 --- a/src/containers/Header/Search.tsx +++ b/src/containers/Header/Search.tsx @@ -14,9 +14,10 @@ import { CURRENCY_REGEX, DECIMAL_REGEX, FULL_CURRENCY_REGEX, - HASH_REGEX, + HASH256_REGEX, VALIDATORS_REGEX, CTID_REGEX, + HASH192_REGEX, } from '../shared/utils' import './search.scss' import { isValidPayString } from '../../rippled/payString' @@ -30,6 +31,7 @@ import { TOKEN_ROUTE, TRANSACTION_ROUTE, VALIDATOR_ROUTE, + MPT_ROUTE, } from '../App/routes' const determineHashType = async (id: string, rippledContext: XrplClient) => { @@ -60,7 +62,7 @@ const getRoute = async ( path: buildPath(ACCOUNT_ROUTE, { id: normalizeAccount(id) }), } } - if (HASH_REGEX.test(id)) { + if (HASH256_REGEX.test(id)) { // Transactions and NFTs share the same syntax // We must make an api call to ensure if it's one or the other const type = await determineHashType(id, rippledContext) @@ -76,6 +78,12 @@ const getRoute = async ( type, } } + if (HASH192_REGEX.test(id)) { + return { + path: buildPath(MPT_ROUTE, { id: id.toUpperCase() }), + type: 'mpt', + } + } if (isValidXAddress(id) || isValidClassicAddress(id.split(':')[0])) { return { type: 'accounts', diff --git a/src/containers/Header/test/Search.test.js b/src/containers/Header/test/Search.test.js index c694eab6b..027075dfc 100644 --- a/src/containers/Header/test/Search.test.js +++ b/src/containers/Header/test/Search.test.js @@ -83,6 +83,8 @@ describe('Search component', () => { const nftoken = '000800011C7D8ED1D715A0017E41BF9499ECC17E7FB666320000099B00000000' + + const mptoken = '00002AF2588C244FE5F74BF48B5C5E2823235B243AA34634' const invalidString = '123invalid' // mock getNFTInfo api to test transactions and nfts @@ -167,6 +169,8 @@ describe('Search component', () => { // handle lower case ctid await testValue(ctid.toLowerCase(), `/transactions/${ctid}`) + + await testValue(mptoken, `/mpt/${mptoken}`) wrapper.unmount() }) diff --git a/src/containers/Ledger/index.tsx b/src/containers/Ledger/index.tsx index 840a6059d..a1ec8eea6 100644 --- a/src/containers/Ledger/index.tsx +++ b/src/containers/Ledger/index.tsx @@ -14,7 +14,7 @@ import { NOT_FOUND, BAD_REQUEST, DECIMAL_REGEX, - HASH_REGEX, + HASH256_REGEX, } from '../shared/utils' import LeftArrow from '../shared/images/ic_left_arrow.svg' @@ -69,7 +69,7 @@ export const Ledger = () => { } = useQuery(['ledger', identifier], () => { if ( !DECIMAL_REGEX.test(identifier.toString()) && - !HASH_REGEX.test(identifier.toString()) + !HASH256_REGEX.test(identifier.toString()) ) { return Promise.reject(BAD_REQUEST) } diff --git a/src/containers/MPT/MPT.tsx b/src/containers/MPT/MPT.tsx new file mode 100644 index 000000000..83e55e443 --- /dev/null +++ b/src/containers/MPT/MPT.tsx @@ -0,0 +1,75 @@ +import { FC, PropsWithChildren, useEffect, useState } from 'react' +import { useParams } from 'react-router' +import { Helmet } from 'react-helmet-async' +import NoMatch from '../NoMatch' +import { MPTHeader } from './MPTHeader/MPTHeader' +import { useAnalytics } from '../shared/analytics' +import { NOT_FOUND, BAD_REQUEST } from '../shared/utils' +import { ErrorMessage } from '../shared/Interfaces' +import './styles.scss' + +const ERROR_MESSAGES: { [code: number]: ErrorMessage } = { + [NOT_FOUND]: { + title: 'assets.no_mpts_message', + hints: ['check_mpt_id'], + }, + [BAD_REQUEST]: { + title: 'invalid_xrpl_address', + hints: ['check_mpt_id'], + }, +} + +const DEFAULT_ERROR: ErrorMessage = { + title: 'generic_error', + hints: ['not_your_fault'], +} + +const getErrorMessage = (error: any) => ERROR_MESSAGES[error] ?? DEFAULT_ERROR + +const Page: FC<PropsWithChildren<{ tokenId: string }>> = ({ + tokenId, + children, +}) => ( + <div className="mpt-page"> + <Helmet title={`MPT ${tokenId.substr(0, 12)}...`} /> + {children} + </div> +) + +export const MPT = () => { + const { trackScreenLoaded } = useAnalytics() + const { id: tokenId = '' } = useParams<{ id: string }>() + const [error, setError] = useState<number | null>(null) + + useEffect(() => { + trackScreenLoaded({ + mpt_issuance_id: tokenId, + }) + return () => { + window.scrollTo(0, 0) + } + }, [tokenId, trackScreenLoaded]) + + const renderError = () => { + const message = getErrorMessage(error) + return ( + <div className="token-page"> + <NoMatch title={message.title} hints={message.hints} /> + </div> + ) + } + + if (error) { + return <Page tokenId={tokenId}>{renderError()}</Page> + } + return ( + <Page tokenId={tokenId}> + {tokenId && <MPTHeader tokenId={tokenId} setError={setError} />} + {!tokenId && ( + <div className="mpt-warning"> + <h2>Enter a MPT Issuance ID in the search box</h2> + </div> + )} + </Page> + ) +} diff --git a/src/containers/MPT/MPTHeader/Details.tsx b/src/containers/MPT/MPTHeader/Details.tsx new file mode 100644 index 000000000..b980380c0 --- /dev/null +++ b/src/containers/MPT/MPTHeader/Details.tsx @@ -0,0 +1,48 @@ +import { useTranslation } from 'react-i18next' +import './styles.scss' +import { useLanguage } from '../../shared/hooks' +import { localizeNumber } from '../../shared/utils' +import { MPTIssuanceFormattedInfo } from '../../shared/Interfaces' +import { TokenTableRow } from '../../shared/components/TokenTableRow' + +interface Props { + data: MPTIssuanceFormattedInfo +} + +export const Details = ({ data }: Props) => { + const { + assetScale, + maxAmt, + outstandingAmt, + transferFee, + sequence, + metadata, + } = data + const { t } = useTranslation() + const language = useLanguage() + const formattedFee = + transferFee && + `${localizeNumber((transferFee / 1000).toPrecision(5), language, { + minimumFractionDigits: 3, + })}%` + + return ( + <table className="token-table"> + <tbody> + {assetScale && ( + <TokenTableRow label={t('asset_scale')} value={assetScale} /> + )} + {maxAmt && <TokenTableRow label={t('max_amount')} value={maxAmt} />} + {outstandingAmt && ( + <TokenTableRow + label={t('outstanding_amount')} + value={outstandingAmt} + /> + )} + <TokenTableRow label={t('transfer_fee')} value={formattedFee ?? '0%'} /> + <TokenTableRow label={t('sequence_number_short')} value={sequence} /> + {metadata && <TokenTableRow label={t('metadata')} value={metadata} />} + </tbody> + </table> + ) +} diff --git a/src/containers/MPT/MPTHeader/MPTHeader.tsx b/src/containers/MPT/MPTHeader/MPTHeader.tsx new file mode 100644 index 000000000..354268991 --- /dev/null +++ b/src/containers/MPT/MPTHeader/MPTHeader.tsx @@ -0,0 +1,117 @@ +import { useEffect, useContext, useState } from 'react' +import { useTranslation } from 'react-i18next' +import { useQuery } from 'react-query' +import { Loader } from '../../shared/components/Loader' +import './styles.scss' +import SocketContext from '../../shared/SocketContext' +import { Tooltip, TooltipInstance } from '../../shared/components/Tooltip' +import { BAD_REQUEST, HASH192_REGEX } from '../../shared/utils' +import { Account } from '../../shared/components/Account' +import { useAnalytics } from '../../shared/analytics' +import { getMPTIssuance } from '../../../rippled/lib/rippled' +import { formatMPTIssuanceInfo } from '../../../rippled/lib/utils' +import { MPTIssuanceFormattedInfo } from '../../shared/Interfaces' +import { Details } from './Details' +import { Settings } from './Settings' + +interface Props { + tokenId: string + setError: (error: number | null) => void +} + +export const MPTHeader = (props: Props) => { + const { t } = useTranslation() + const { tokenId, setError } = props + const rippledSocket = useContext(SocketContext) + const { trackException } = useAnalytics() + const [tooltip, setTooltip] = useState<TooltipInstance | undefined>(undefined) + + const { data, isFetching: loading } = useQuery<MPTIssuanceFormattedInfo>( + ['getMPTIssuance', tokenId], + async () => { + const info = await getMPTIssuance(rippledSocket, tokenId) + return formatMPTIssuanceInfo(info) + }, + { + onError: (e: any) => { + trackException(`mptIssuance ${tokenId} --- ${JSON.stringify(e)}`) + setError(e.code) + }, + }, + ) + + useEffect(() => { + if (!HASH192_REGEX.test(tokenId)) { + setError(BAD_REQUEST) + } + }, [setError, tokenId]) + + const showTooltip = (event: any, d: any) => { + setTooltip({ + data: d, + mode: 'mptId', + x: event.currentTarget.offsetLeft, + y: event.currentTarget.offsetTop, + }) + } + + const hideTooltip = () => { + setTooltip(undefined) + } + + const renderHeaderContent = () => { + const { issuer } = data! + + return ( + <div className="section mpt-header-container"> + <div className="mpt-info-container"> + <div className="values"> + <div className="title">{t('issuer_address')}</div> + <div className="value"> + <div className="mpt-issuer"> + <Account account={issuer!} /> + </div> + </div> + </div> + </div> + <div className="mpt-bottom-container"> + <div className="details"> + <h2>{t('details')}</h2> + <Details data={data!} /> + </div> + <div className="settings"> + <h2 className="title">{t('settings')}</h2> + <Settings flags={data!.flags!} /> + </div> + </div> + </div> + ) + } + + return ( + <div className="mpt-token-header"> + <div className="section"> + {!loading && ( + <div className="mpt-box-header"> + <div className="token-title"> + MPT Issuance ID + <div className="badge">mpt</div> + </div> + <div + className="title-content" + onMouseOver={(e) => showTooltip(e, { tokenId })} + onFocus={() => {}} + onMouseLeave={hideTooltip} + > + {tokenId} + </div> + </div> + )} + </div> + <div className="box-content"> + {loading ? <Loader /> : renderHeaderContent()} + </div> + <Tooltip tooltip={tooltip} /> + </div> + ) +} diff --git a/src/containers/MPT/MPTHeader/Settings.tsx b/src/containers/MPT/MPTHeader/Settings.tsx new file mode 100644 index 000000000..8fadc5333 --- /dev/null +++ b/src/containers/MPT/MPTHeader/Settings.tsx @@ -0,0 +1,41 @@ +import './styles.scss' +import { useTranslation } from 'react-i18next' +import { TokenTableRow } from '../../shared/components/TokenTableRow' + +interface Props { + flags: string[] +} + +export const Settings = ({ flags }: Props) => { + const { t } = useTranslation() + + const locked = flags.includes('lsfMPTLocked') ? 'enabled' : 'disabled' + const canLock = flags.includes('lsfMPTCanLock') ? 'enabled' : 'disabled' + const requireAuth = flags.includes('lsfMPTRequireAuth') + ? 'enabled' + : 'disabled' + + const canEscrow = flags.includes('lsfMPTCanEscrow') ? 'enabled' : 'disabled' + const canTrade = flags.includes('lsfMPTCanTrade') ? 'enabled' : 'disabled' + const canTransfer = flags.includes('lsfMPTCanTransfer') + ? 'enabled' + : 'disabled' + + const canClawback = flags.includes('lsfMPTCanClawback') + ? 'enabled' + : 'disabled' + + return ( + <table className="token-table"> + <tbody> + <TokenTableRow label={t('locked')} value={locked} /> + <TokenTableRow label={t('can_lock')} value={canLock} /> + <TokenTableRow label={t('require_auth')} value={requireAuth} /> + <TokenTableRow label={t('can_escrow')} value={canEscrow} /> + <TokenTableRow label={t('can_trade')} value={canTrade} /> + <TokenTableRow label={t('can_transfer')} value={canTransfer} /> + <TokenTableRow label={t('can_clawback')} value={canClawback} /> + </tbody> + </table> + ) +} diff --git a/src/containers/MPT/MPTHeader/styles.scss b/src/containers/MPT/MPTHeader/styles.scss new file mode 100644 index 000000000..fc1b25e01 --- /dev/null +++ b/src/containers/MPT/MPTHeader/styles.scss @@ -0,0 +1,144 @@ +@import '../../shared/css/variables'; +@import '../../shared/css/table'; + +.mpt-header-container { + .mpt-bottom-container { + display: flex; + flex-direction: column; + padding-top: 64px; + + @include for-size(desktop-up) { + flex-direction: row; + padding-top: 80px; + } + + .details { + width: 100%; + @include for-size(desktop-up) { + width: 490px; + } + } + + .settings { + width: 100%; + @include for-size(desktop-up) { + width: 650px; + } + } + } + + .mpt-info-container { + display: flex; + flex-direction: column; + justify-content: space-between; + margin-top: 68px; + + @include for-size(desktop-up) { + flex-direction: row; + margin-top: 80px; + } + + .values { + display: flex; + flex-direction: row; + justify-content: space-between; + margin-bottom: 18px; + color: $white; + + @include for-size(desktop-up) { + flex-direction: column; + margin-bottom: 0; + } + + .title { + padding-bottom: 4px; + margin-bottom: 4.5px; + color: $black-40; + font-size: 14px; + text-transform: uppercase; + @include semibold; + } + + .value { + display: flex; + + .mpt-issuer { + margin: auto; + color: $white; + font-size: 18px; + font-style: normal; + line-height: 125%; + text-align: right; + text-decoration: none; + @include bold; + } + + .copy { + width: 24px; + height: 24px; + flex: none; + flex-grow: 0; + order: 1; + margin-left: 10px; + } + } + } + } +} + +.mpt-token-header { + width: 100%; + margin-bottom: 16px; + + .mpt-box-header { + display: flex; + flex-direction: column; + align-items: flex-start; + margin-top: 0; + text-align: left; + + .title-content { + overflow: hidden; + width: 100%; + min-width: 0; + min-height: 0; + padding-top: 0; + margin-top: 0; + margin-bottom: 0; + color: $white; + font-size: 24px; + text-overflow: ellipsis; + white-space: nowrap; + @include bold; + } + + .token-title { + display: flex; + flex-direction: row; + align-items: center; + padding-bottom: 4px; + color: $black-40; + font-size: 14px; + text-transform: uppercase; + + @include semibold; + + .badge { + background: $mpt; + color: $white; + } + } + + img { + width: 24px; + height: 24px; + margin-left: 16px; + object-fit: contain; + } + } + + .box-content { + min-height: 100px; + padding-bottom: 20px; + } +} diff --git a/src/containers/MPT/MPTHeader/test/Details.test.js b/src/containers/MPT/MPTHeader/test/Details.test.js new file mode 100644 index 000000000..9ccd42740 --- /dev/null +++ b/src/containers/MPT/MPTHeader/test/Details.test.js @@ -0,0 +1,58 @@ +import { mount } from 'enzyme' +import { I18nextProvider } from 'react-i18next' +import { BrowserRouter } from 'react-router-dom' +import { Details } from '../Details' +import i18n from '../../../../i18n/testConfig' + +describe('MPT Details container', () => { + const dataDefault = { + issuer: 'r3SnSE9frruxwsC9qGHFiUJShda62fNFGQ', + assetScale: 2, + maxAmt: '256', + outstandingAmt: '64', + transferFee: 3, + sequence: 3949, + metadata: 'https://www.google.com/', + flags: ['lsfMPTCanClawback', 'lsfMPTCanTransfer'], + } + + const createWrapper = (data = dataDefault) => + mount( + <I18nextProvider i18n={i18n}> + <BrowserRouter> + <Details data={data} /> + </BrowserRouter> + </I18nextProvider>, + ) + + it('renders without crashing', () => { + const wrapper = createWrapper() + wrapper.unmount() + }) + + it('renders defined fields', () => { + const wrapper = createWrapper() + expect(wrapper.find('.row').length).toEqual(6) + + expect(wrapper.find('.row').at(0).html()).toBe( + '<tr class="row"><td class="col1">asset_scale</td><td class="col2">2</td></tr>', + ) + expect(wrapper.find('.row').at(1).html()).toBe( + '<tr class="row"><td class="col1">max_amount</td><td class="col2">256</td></tr>', + ) + expect(wrapper.find('.row').at(2).html()).toBe( + '<tr class="row"><td class="col1">outstanding_amount</td><td class="col2">64</td></tr>', + ) + expect(wrapper.find('.row').at(3).html()).toBe( + '<tr class="row"><td class="col1">transfer_fee</td><td class="col2">0.003%</td></tr>', + ) + expect(wrapper.find('.row').at(4).html()).toBe( + '<tr class="row"><td class="col1">sequence_number_short</td><td class="col2">3949</td></tr>', + ) + expect(wrapper.find('.row').at(5).html()).toBe( + '<tr class="row"><td class="col1">metadata</td><td class="col2">https://www.google.com/</td></tr>', + ) + + wrapper.unmount() + }) +}) diff --git a/src/containers/MPT/MPTHeader/test/MPTHeader.test.js b/src/containers/MPT/MPTHeader/test/MPTHeader.test.js new file mode 100644 index 000000000..295110078 --- /dev/null +++ b/src/containers/MPT/MPTHeader/test/MPTHeader.test.js @@ -0,0 +1,82 @@ +import { mount } from 'enzyme' +import { I18nextProvider } from 'react-i18next' +import { BrowserRouter } from 'react-router-dom' +import { useQuery, QueryClientProvider } from 'react-query' +import { MPTHeader } from '../MPTHeader' +import i18n from '../../../../i18n/testConfig' +import { queryClient } from '../../../shared/QueryClient' + +const data = { + issuer: 'r3SnSE9frruxwsC9qGHFiUJShda62fNFGQ', + assetScale: 2, + maxAmt: '100', + outstandingAmt: '64', + transferFee: 3, + sequence: 3949, + metadata: 'https://www.google.com/', + flags: ['lsfMPTCanClawback', 'lsfMPTCanTransfer'], +} + +jest.mock('react-query', () => ({ + ...jest.requireActual('react-query'), + useQuery: jest.fn(), +})) +const setError = jest.fn() + +describe('MPT header container', () => { + const createWrapper = () => + mount( + <QueryClientProvider client={queryClient}> + <BrowserRouter> + <I18nextProvider i18n={i18n}> + <MPTHeader + tokenId="00000F6D5186FB5C90A8112419BED54193EDC7218835C6F5" + setError={setError} + /> + </I18nextProvider> + </BrowserRouter> + </QueryClientProvider>, + ) + + it('renders without crashing', async () => { + useQuery.mockImplementation(() => ({ + data, + isFetching: false, + })) + const wrapper = createWrapper() + wrapper.unmount() + }) + + it('renders MPT content', async () => { + useQuery.mockImplementation(() => ({ + data, + isFetching: false, + })) + const wrapper = createWrapper() + + expect( + wrapper + .text() + .includes('00000F6D5186FB5C90A8112419BED54193EDC7218835C6F5'), + ).toBe(true) + expect(wrapper.text().includes('r3SnSE9frruxwsC9qGHFiUJShda62fNFGQ')).toBe( + true, + ) + expect(wrapper.find('Settings').length).toBe(1) + expect(wrapper.find('Details').length).toBe(1) + wrapper.find('.title-content').first().simulate('mouseOver') + expect(wrapper.find('.tooltip').length).toBe(1) + wrapper.unmount() + }) + + it('renders loader', async () => { + useQuery.mockImplementation(() => ({ + data, + isFetching: true, + error: {}, + })) + const wrapper = createWrapper() + expect(wrapper.find('Loader').length).toEqual(1) + wrapper.unmount() + }) +}) diff --git a/src/containers/MPT/MPTHeader/test/Settings.test.js b/src/containers/MPT/MPTHeader/test/Settings.test.js new file mode 100644 index 000000000..a94ee80af --- /dev/null +++ b/src/containers/MPT/MPTHeader/test/Settings.test.js @@ -0,0 +1,48 @@ +import { mount } from 'enzyme' +import { I18nextProvider } from 'react-i18next' +import { Settings } from '../Settings' +import i18n from '../../../../i18n/testConfig' + +describe('MPT Setttings container', () => { + const flags = ['lsfMPTCanClawback', 'lsfMPTCanTransfer'] + + const createWrapper = () => + mount( + <I18nextProvider i18n={i18n}> + <Settings flags={flags} /> + </I18nextProvider>, + ) + + it('renders without crashing', () => { + const wrapper = createWrapper() + wrapper.unmount() + }) + + it('renders defined fields', () => { + const wrapper = createWrapper() + expect(wrapper.find('.row').length).toEqual(7) + + expect(wrapper.find('.row').at(0).html()).toBe( + '<tr class="row"><td class="col1">locked</td><td class="col2">disabled</td></tr>', + ) + expect(wrapper.find('.row').at(1).html()).toBe( + '<tr class="row"><td class="col1">can_lock</td><td class="col2">disabled</td></tr>', + ) + expect(wrapper.find('.row').at(2).html()).toBe( + '<tr class="row"><td class="col1">require_auth</td><td class="col2">disabled</td></tr>', + ) + expect(wrapper.find('.row').at(3).html()).toBe( + '<tr class="row"><td class="col1">can_escrow</td><td class="col2">disabled</td></tr>', + ) + expect(wrapper.find('.row').at(4).html()).toBe( + '<tr class="row"><td class="col1">can_trade</td><td class="col2">disabled</td></tr>', + ) + expect(wrapper.find('.row').at(5).html()).toBe( + '<tr class="row"><td class="col1">can_transfer</td><td class="col2">enabled</td></tr>', + ) + expect(wrapper.find('.row').at(6).html()).toBe( + '<tr class="row"><td class="col1">can_clawback</td><td class="col2">enabled</td></tr>', + ) + wrapper.unmount() + }) +}) diff --git a/src/containers/MPT/styles.scss b/src/containers/MPT/styles.scss new file mode 100644 index 000000000..51c0c4fc3 --- /dev/null +++ b/src/containers/MPT/styles.scss @@ -0,0 +1,15 @@ +@import '../shared/css/variables'; + +.mpt-page { + width: 100%; + margin-top: 100px; + + .loader { + min-height: 100px; + } +} + +.mpt-warning { + font-size: 14px; + text-align: center; +} diff --git a/src/containers/MPT/test/MPT.test.js b/src/containers/MPT/test/MPT.test.js new file mode 100644 index 000000000..ae924fc10 --- /dev/null +++ b/src/containers/MPT/test/MPT.test.js @@ -0,0 +1,46 @@ +import * as React from 'react' +import { mount } from 'enzyme' +import { Route } from 'react-router-dom' +import { MPT } from '../MPT' +import i18n from '../../../i18n/testConfig' +import { QuickHarness } from '../../test/utils' +import { MPT_ROUTE } from '../../App/routes' + +describe('MPT container', () => { + const mptID = '00000F6D5186FB5C90A8112419BED54193EDC7218835C6F5' + + const createWrapper = (mpt = undefined) => + mount( + <QuickHarness i18n={i18n} initialEntries={[`/mpt/${mpt}`]}> + <Route path={MPT_ROUTE.path} element={<MPT />} /> + </QuickHarness>, + ) + + it('renders without crashing', () => { + const wrapper = createWrapper(mptID) + wrapper.unmount() + }) + + it('renders children', () => { + const wrapper = createWrapper(mptID) + expect(wrapper.find('MPTHeader').length).toBe(1) + wrapper.unmount() + }) + + it('does not render when no mpt provided', () => { + const wrapper = createWrapper() + expect(wrapper.find('MPTHeader').length).toBe(0) + wrapper.unmount() + }) + + it('renders error', () => { + jest.mock('../MPTHeader/MPTHeader', () => ({ + NFTHeader: ({ setError }) => { + setError(404) + }, + })) + + const wrapper = createWrapper('something') + expect(wrapper.find('NoMatch').length).toBe(1) + }) +}) diff --git a/src/containers/NFT/NFTHeader/NFTHeader.tsx b/src/containers/NFT/NFTHeader/NFTHeader.tsx index 1a46f7ac6..d53e2c233 100644 --- a/src/containers/NFT/NFTHeader/NFTHeader.tsx +++ b/src/containers/NFT/NFTHeader/NFTHeader.tsx @@ -7,7 +7,7 @@ import SocketContext from '../../shared/SocketContext' import { Tooltip, TooltipInstance } from '../../shared/components/Tooltip' import { getNFTInfo, getAccountInfo } from '../../../rippled/lib/rippled' import { formatNFTInfo, formatAccountInfo } from '../../../rippled/lib/utils' -import { localizeDate, BAD_REQUEST, HASH_REGEX } from '../../shared/utils' +import { localizeDate, BAD_REQUEST, HASH256_REGEX } from '../../shared/utils' import { Details } from './Details' import { Settings } from './Settings' import { Account } from '../../shared/components/Account' @@ -56,7 +56,7 @@ export const NFTHeader = (props: Props) => { ) useEffect(() => { - if (!HASH_REGEX.test(tokenId)) { + if (!HASH256_REGEX.test(tokenId)) { setError(BAD_REQUEST) } }, [setError, tokenId]) diff --git a/src/containers/Transactions/DetailTab/Meta/MPToken.jsx b/src/containers/Transactions/DetailTab/Meta/MPToken.jsx new file mode 100644 index 000000000..b94856e40 --- /dev/null +++ b/src/containers/Transactions/DetailTab/Meta/MPToken.jsx @@ -0,0 +1,43 @@ +import { Trans } from 'react-i18next' +import { Account } from '../../../shared/components/Account' +import { computeMPTokenBalanceChange } from '../../../shared/utils' + +const render = (t, language, action, node, index) => { + const { previousBalance, finalBalance, account, change } = + computeMPTokenBalanceChange(node) + const previousBalanceStr = previousBalance.toString(10) + const finalBalanceStr = finalBalance.toString(10) + const changeStr = change.toString(10) + + const line1 = ( + <Trans i18nKey="transaction_mptoken_line_one"> + It {action} an MPToken node of + <Account account={account} /> + </Trans> + ) + + const line2 = + change !== BigInt(0) ? ( + <ul key={`balance_${index}`} className="meta-line"> + <li> + <Trans i18nKey="transaction_balance_line_two"> + Balance changed by + <b>{changeStr}</b> + from + <b>{previousBalanceStr}</b> + to + <b>{finalBalanceStr}</b> + </Trans> + </li> + </ul> + ) : null + + return ( + <li key={`mptoken_${action}_${index}`} className="meta-line"> + {line1} + {line2} + </li> + ) +} + +export default render diff --git a/src/containers/Transactions/DetailTab/Meta/MPTokenIssuance.jsx b/src/containers/Transactions/DetailTab/Meta/MPTokenIssuance.jsx new file mode 100644 index 000000000..99305b59c --- /dev/null +++ b/src/containers/Transactions/DetailTab/Meta/MPTokenIssuance.jsx @@ -0,0 +1,43 @@ +import { Trans } from 'react-i18next' +import { Account } from '../../../shared/components/Account' +import { computeMPTIssuanceBalanceChange } from '../../../shared/utils' + +const render = (t, language, action, node, index) => { + const { previousBalance, finalBalance, account, change } = + computeMPTIssuanceBalanceChange(node) + const previousBalanceStr = previousBalance.toString(10) + const finalBalanceStr = finalBalance.toString(10) + const changeStr = change.toString(10) + + const line1 = ( + <Trans i18nKey="transaction_mpt_issuance_line_one"> + It {action} an MPTokenIssuance node of + <Account account={account} /> + </Trans> + ) + + const line2 = + change !== BigInt(0) ? ( + <ul key={`balance_${index}`} className="meta-line"> + <li> + <Trans i18nKey="transaction_outstanding_balance_line_two"> + Outstanding balance changed by + <b>{changeStr}</b> + from + <b>{previousBalanceStr}</b> + to + <b>{finalBalanceStr}</b> + </Trans> + </li> + </ul> + ) : null + + return ( + <li key={`mpt_issuance_${action}_${index}`} className="meta-line"> + {line1} + {line2} + </li> + ) +} + +export default render diff --git a/src/containers/Transactions/DetailTab/Meta/RippleState.jsx b/src/containers/Transactions/DetailTab/Meta/RippleState.jsx index 6d50ce114..2ea9539eb 100644 --- a/src/containers/Transactions/DetailTab/Meta/RippleState.jsx +++ b/src/containers/Transactions/DetailTab/Meta/RippleState.jsx @@ -1,6 +1,9 @@ import { Trans } from 'react-i18next' import { Account } from '../../../shared/components/Account' -import { localizeNumber, computeBalanceChange } from '../../../shared/utils' +import { + localizeNumber, + computeRippleStateBalanceChange, +} from '../../../shared/utils' const render = (t, language, action, node, index) => { const { @@ -11,7 +14,7 @@ const render = (t, language, action, node, index) => { currency, account, counterAccount, - } = computeBalanceChange(node) + } = computeRippleStateBalanceChange(node) const line1 = ( <Trans i18nKey="transaction_balance_line_one"> diff --git a/src/containers/Transactions/DetailTab/Meta/index.tsx b/src/containers/Transactions/DetailTab/Meta/index.tsx index 24335e480..a7a6cc226 100644 --- a/src/containers/Transactions/DetailTab/Meta/index.tsx +++ b/src/containers/Transactions/DetailTab/Meta/index.tsx @@ -5,6 +5,8 @@ import renderDirectoryNode from './DirectoryNode' import renderOffer from './Offer' import renderRippleState from './RippleState' import renderPayChannel from './PayChannel' +import renderMPToken from './MPToken' +import renderMPTokenIssuance from './MPTokenIssuance' import { groupAffectedNodes } from '../../../shared/transactionUtils' import { useLanguage } from '../../../shared/hooks' @@ -31,6 +33,10 @@ export const TransactionMeta: FC<{ data: any }> = ({ data }) => { return renderRippleState(t, language, action, node, index) case 'PayChannel': return renderPayChannel(t, language, action, node, index) + case 'MPTokenIssuance': + return renderMPTokenIssuance(t, language, action, node, index) + case 'MPToken': + return renderMPToken(t, language, action, node, index) default: return renderDefault(t, action, node, index) } diff --git a/src/containers/Transactions/index.tsx b/src/containers/Transactions/index.tsx index fa34e0e4f..2918e7674 100644 --- a/src/containers/Transactions/index.tsx +++ b/src/containers/Transactions/index.tsx @@ -6,7 +6,12 @@ import { useWindowSize } from 'usehooks-ts' import NoMatch from '../NoMatch' import { Loader } from '../shared/components/Loader' import { Tabs } from '../shared/components/Tabs' -import { NOT_FOUND, BAD_REQUEST, HASH_REGEX, CTID_REGEX } from '../shared/utils' +import { + NOT_FOUND, + BAD_REQUEST, + HASH256_REGEX, + CTID_REGEX, +} from '../shared/utils' import { SimpleTab } from './SimpleTab' import { DetailTab } from './DetailTab' import './transaction.scss' @@ -54,7 +59,7 @@ export const Transaction = () => { if (identifier === '') { return undefined } - if (HASH_REGEX.test(identifier) || CTID_REGEX.test(identifier)) { + if (HASH256_REGEX.test(identifier) || CTID_REGEX.test(identifier)) { return getTransaction(identifier, rippledSocket).catch( (transactionRequestError) => { const status = transactionRequestError.code diff --git a/src/containers/Transactions/test/Description.test.tsx b/src/containers/Transactions/test/Description.test.tsx index 04ae40ccb..4c6074494 100644 --- a/src/containers/Transactions/test/Description.test.tsx +++ b/src/containers/Transactions/test/Description.test.tsx @@ -1,19 +1,23 @@ import { mount } from 'enzyme' import { BrowserRouter as Router } from 'react-router-dom' import { I18nextProvider } from 'react-i18next' +import { QueryClientProvider } from 'react-query' import i18n from '../../../i18n/testConfigEnglish' import { TransactionDescription } from '../DetailTab/Description' import Transaction from './mock_data/Transaction.json' import OfferCreateTicket from './mock_data/OfferCreateTicket.json' import EmittedPayment from './mock_data/EmittedPayment.json' +import { queryClient } from '../../shared/QueryClient' describe('Description container', () => { const createWrapper = (data = {}) => mount( <Router> - <I18nextProvider i18n={i18n}> - <TransactionDescription data={data} /> - </I18nextProvider> + <QueryClientProvider client={queryClient}> + <I18nextProvider i18n={i18n}> + <TransactionDescription data={data} /> + </I18nextProvider> + </QueryClientProvider> </Router>, ) diff --git a/src/containers/Transactions/test/DetailTab.test.tsx b/src/containers/Transactions/test/DetailTab.test.tsx index 0e734c06c..46ff5488c 100644 --- a/src/containers/Transactions/test/DetailTab.test.tsx +++ b/src/containers/Transactions/test/DetailTab.test.tsx @@ -1,6 +1,7 @@ import { mount } from 'enzyme' import { BrowserRouter as Router } from 'react-router-dom' import { I18nextProvider } from 'react-i18next' +import { QueryClientProvider } from 'react-query' import Transaction from '../../shared/components/Transaction/EscrowCreate/test/mock_data/EscrowCreate.json' import FailedTransaction from '../../shared/components/Transaction/SignerListSet/test/mock_data/SignerListSet.json' import HookPayment from './mock_data/HookPayment.json' @@ -8,14 +9,17 @@ import EmittedPayment from './mock_data/EmittedPayment.json' import { DetailTab } from '../DetailTab' import i18n from '../../../i18n/testConfigEnglish' import { convertHexToString } from '../../../rippled/lib/utils' +import { queryClient } from '../../shared/QueryClient' describe('DetailTab container', () => { const createWrapper = (transaction: any = Transaction) => mount( <Router> - <I18nextProvider i18n={i18n}> - <DetailTab data={transaction} /> - </I18nextProvider> + <QueryClientProvider client={queryClient}> + <I18nextProvider i18n={i18n}> + <DetailTab data={transaction} /> + </I18nextProvider> + </QueryClientProvider> </Router>, ) diff --git a/src/containers/Transactions/test/Meta.test.tsx b/src/containers/Transactions/test/Meta.test.tsx index e6e2fe903..ac4195799 100644 --- a/src/containers/Transactions/test/Meta.test.tsx +++ b/src/containers/Transactions/test/Meta.test.tsx @@ -6,6 +6,7 @@ import Transaction from './mock_data/Transaction.json' import OfferCancel from '../../shared/components/Transaction/OfferCancel/test/mock_data/OfferCancel.json' import OfferCreateWithMissingPreviousFields from '../../shared/components/Transaction/OfferCreate/test/mock_data/OfferCreateWithMissingPreviousFields.json' import PaymentChannelClaim from '../../shared/components/Transaction/PaymentChannelClaim/test/mock_data/PaymentChannelClaim.json' +import DirectMPTPayment from './mock_data/DirectMPTPayment.json' import { TransactionMeta } from '../DetailTab/Meta' describe('TransactionMeta container', () => { @@ -160,4 +161,32 @@ describe('TransactionMeta container', () => { ) expect(w.find('li').length).toBe(4) }) + + it('renders MPT Payment Meta', () => { + const w = createWrapper(DirectMPTPayment) + + expect(w.find('.title').length).toBe(1) + expect(w.find('.detail-subsection').length).toBe(1) + expect(w.contains(<div>number_of_affected_node</div>)).toBe(true) + expect(w.contains(<div className="detail-subtitle">nodes_type</div>)).toBe( + true, + ) + expect(w.find('li').length).toBe(6) + + expect(w.find('li').at(2).html()).toBe( + '<li class="meta-line">It modified an MPToken node of<a title="rnNkvddM96FE2QsaFztLAn5xicjq5d6d8d" class="account" href="/accounts/rnNkvddM96FE2QsaFztLAn5xicjq5d6d8d">rnNkvddM96FE2QsaFztLAn5xicjq5d6d8d</a><ul class="meta-line"><li>Balance changed by<b>100</b>from<b>0</b>to<b>100</b></li></ul></li>', + ) + + expect(w.find('li').at(3).html()).toBe( + '<li>Balance changed by<b>100</b>from<b>0</b>to<b>100</b></li>', + ) + + expect(w.find('li').at(4).html()).toBe( + '<li class="meta-line">It modified an MPTokenIssuance node of<a title="rwREfyDU1SbcjN3xXZDbm8uNJV77T2ruKw" class="account" href="/accounts/rwREfyDU1SbcjN3xXZDbm8uNJV77T2ruKw">rwREfyDU1SbcjN3xXZDbm8uNJV77T2ruKw</a><ul class="meta-line"><li>Outstanding balance changed by<b>100</b>from<b>0</b>to<b>100</b></li></ul></li>', + ) + + expect(w.find('li').at(5).html()).toBe( + '<li>Outstanding balance changed by<b>100</b>from<b>0</b>to<b>100</b></li>', + ) + }) }) diff --git a/src/containers/Transactions/test/SimpleTab.test.tsx b/src/containers/Transactions/test/SimpleTab.test.tsx index 8fe7794eb..652ded5b7 100644 --- a/src/containers/Transactions/test/SimpleTab.test.tsx +++ b/src/containers/Transactions/test/SimpleTab.test.tsx @@ -2,23 +2,27 @@ import { mount } from 'enzyme' import { I18nextProvider } from 'react-i18next' import { BrowserRouter as Router } from 'react-router-dom' +import { QueryClientProvider } from 'react-query' import EnableAmendment from './mock_data/EnableAmendment.json' import Payment from '../../shared/components/Transaction/Payment/test/mock_data/Payment.json' import { SimpleTab } from '../SimpleTab' import summarize from '../../../rippled/lib/txSummary' import i18n from '../../../i18n/testConfig' import { expectSimpleRowText } from '../../shared/components/Transaction/test' +import { queryClient } from '../../shared/QueryClient' describe('SimpleTab container', () => { const createWrapper = (tx, width = 1200) => mount( <Router> - <I18nextProvider i18n={i18n}> - <SimpleTab - data={{ processed: tx, summary: summarize(tx, true).details }} - width={width} - /> - </I18nextProvider> + <QueryClientProvider client={queryClient}> + <I18nextProvider i18n={i18n}> + <SimpleTab + data={{ processed: tx, summary: summarize(tx, true).details }} + width={width} + /> + </I18nextProvider> + </QueryClientProvider> </Router>, ) diff --git a/src/containers/Transactions/test/mock_data/DirectMPTPayment.json b/src/containers/Transactions/test/mock_data/DirectMPTPayment.json new file mode 100644 index 000000000..87d3c374b --- /dev/null +++ b/src/containers/Transactions/test/mock_data/DirectMPTPayment.json @@ -0,0 +1,95 @@ +{ + "tx": { + "Account": "rwREfyDU1SbcjN3xXZDbm8uNJV77T2ruKw", + "Amount": { + "mpt_issuance_id": "0000301C674EE6ECD0374A628E2C442EF8E3BBBEE8C58CF3", + "value": "100" + }, + "DeliverMax": { + "mpt_issuance_id": "0000301C674EE6ECD0374A628E2C442EF8E3BBBEE8C58CF3", + "value": "100" + }, + "Destination": "rnNkvddM96FE2QsaFztLAn5xicjq5d6d8d", + "Fee": "10", + "Flags": 2147483648, + "Sequence": 12317, + "SigningPubKey": "ED1E43F90700506F98E45CC8E77563ACB8FF0338739229AC98F0E1AEB409E786F9", + "TransactionType": "Payment", + "TxnSignature": "9949EF3E718A6776586A1DD91256C4055E761CBF1CE7A351912C08FE1BB415F6638FA096CAAE88D30B32E684448CDC52DEB022A7E3576AFA0C6E5ABB7BE2FE02", + "ctid": "C000302000000000", + "date": 1712087804000, + "hash": "undefined", + "inLedger": "undefined", + "ledger_index": "undefined", + "meta": "undefined", + "validated": "undefined", + "metaData": "undefined", + "status": "undefined" + }, + "meta": { + "AffectedNodes": [ + { + "ModifiedNode": { + "FinalFields": { + "Account": "rwREfyDU1SbcjN3xXZDbm8uNJV77T2ruKw", + "Balance": "99999980", + "Flags": 0, + "OwnerCount": 1, + "Sequence": 12318 + }, + "LedgerEntryType": "AccountRoot", + "LedgerIndex": "80909CC95DCD7E5E08631635C559E218D42C49721A1285192885B46E4737CF60", + "PreviousFields": { + "Balance": "99999990", + "Sequence": 12317 + }, + "PreviousTxnID": "C9D0965E7A13F54186B6501D08ED54D74AA946A856D96BF7AAE18EA5FD5E93C2", + "PreviousTxnLgrSeq": 12318 + } + }, + { + "ModifiedNode": { + "FinalFields": { + "Account": "rnNkvddM96FE2QsaFztLAn5xicjq5d6d8d", + "Flags": 0, + "MPTAmount": "100", + "MPTokenIssuanceID": "0000301C674EE6ECD0374A628E2C442EF8E3BBBEE8C58CF3", + "OwnerNode": "0" + }, + "LedgerEntryType": "MPToken", + "LedgerIndex": "9B2E5EA9ACF16B591B941CAE5323EBED55E42495B16C92DC9FBEC0997E8E6804", + "PreviousFields": {}, + "PreviousTxnID": "4C41449D0C083746CC93DDA78F00E97AB8B857188E805F39C1A250F8C9467982", + "PreviousTxnLgrSeq": 12319 + } + }, + { + "ModifiedNode": { + "FinalFields": { + "Flags": 64, + "Issuer": "rwREfyDU1SbcjN3xXZDbm8uNJV77T2ruKw", + "OutstandingAmount": "100", + "OwnerNode": "0", + "Sequence": 12316 + }, + "LedgerEntryType": "MPTokenIssuance", + "LedgerIndex": "C38E54FD2C98FE848FE31CDA95F6F990A9A8715987171DA342A3296B7A9123B6", + "PreviousFields": { + "OutstandingAmount": "0" + }, + "PreviousTxnID": "C9D0965E7A13F54186B6501D08ED54D74AA946A856D96BF7AAE18EA5FD5E93C2", + "PreviousTxnLgrSeq": 12318 + } + } + ], + "TransactionIndex": 0, + "TransactionResult": "tesSUCCESS", + "delivered_amount": { + "mpt_issuance_id": "0000301C674EE6ECD0374A628E2C442EF8E3BBBEE8C58CF3", + "value": "100" + } + }, + "hash": "5E74603F7C2E11030E644E681508FD1F24CAEB4CC0CE1F35A6230689D9694E85", + "ledger_index": 12320, + "date": 1712087804000 +} diff --git a/src/containers/shared/Interfaces.tsx b/src/containers/shared/Interfaces.tsx index 201b0daea..83c03903f 100644 --- a/src/containers/shared/Interfaces.tsx +++ b/src/containers/shared/Interfaces.tsx @@ -36,6 +36,20 @@ export interface NFTFormattedInfo { warnings?: string[] } +/** + * Values returned by 'formatMPTIssuanceInfo' from /src/rippled/lib/utils.js + */ +export interface MPTIssuanceFormattedInfo { + issuer: string + sequence: number + assetScale?: number + maxAmt?: string + outstandingAmt?: string + flags?: string[] + transferFee?: number + metadata?: string +} + export interface ErrorMessage { title: string hints: string[] diff --git a/src/containers/shared/analytics.ts b/src/containers/shared/analytics.ts index bff40dcfb..b11d5c349 100644 --- a/src/containers/shared/analytics.ts +++ b/src/containers/shared/analytics.ts @@ -27,6 +27,7 @@ export interface AnalyticsFields { search_term?: string search_category?: string validator?: string + mpt_issuance_id?: string description?: string page_title?: string diff --git a/src/containers/shared/components/Amount.tsx b/src/containers/shared/components/Amount.tsx index 164b06737..e7fe6ecd5 100644 --- a/src/containers/shared/components/Amount.tsx +++ b/src/containers/shared/components/Amount.tsx @@ -1,8 +1,15 @@ +import { useQuery } from 'react-query' +import { useContext } from 'react' import { CURRENCY_OPTIONS, XRP_BASE } from '../transactionUtils' import { useLanguage } from '../hooks' -import { localizeNumber } from '../utils' +import { localizeNumber, convertScaledPrice } from '../utils' import Currency from './Currency' import { ExplorerAmount } from '../types' +import { MPTIssuanceFormattedInfo } from '../Interfaces' +import { getMPTIssuance } from '../../../rippled/lib/rippled' +import { formatMPTIssuanceInfo } from '../../../rippled/lib/utils' +import SocketContext from '../SocketContext' +import { useAnalytics } from '../analytics' export interface AmountProps { value: ExplorerAmount | string @@ -16,15 +23,17 @@ export const Amount = ({ value, }: AmountProps) => { const language = useLanguage() + const rippledSocket = useContext(SocketContext) + const { trackException } = useAnalytics() const issuer = typeof value === 'string' ? undefined : value.issuer const currency = typeof value === 'string' ? 'XRP' : value.currency const amount = typeof value === 'string' ? parseInt(value, 10) / XRP_BASE : value.amount + const isMPT = typeof value === 'string' ? false : value.isMPT const options = { ...CURRENCY_OPTIONS, currency } - const localizedAmount = localizeNumber(amount, language, options) - return ( + const renderAmount = (localizedAmount) => ( <span className="amount"> <span className="amount-localized"> {modifier && <span className="amount-modifier">{modifier}</span>} @@ -35,7 +44,43 @@ export const Amount = ({ currency={currency} link displaySymbol={false} + isMPT={isMPT} /> </span> ) + + const mptID = isMPT ? (value as ExplorerAmount).currency : null + + // fetch MPTIssuance only if isMPT is true + const { data: mptIssuanceData } = + useQuery<MPTIssuanceFormattedInfo>( + ['getMPTIssuanceScale', mptID], + async () => { + const info = await getMPTIssuance(rippledSocket, mptID) + return formatMPTIssuanceInfo(info) + }, + { + onError: (e: any) => { + trackException(`mptIssuance ${mptID} --- ${JSON.stringify(e)}`) + }, + enabled: isMPT, + }, + ) || {} + + // if amount is MPT type, we need to fetch the scale from the MPTokenIssuance + // object so we can show the scaled amount + if (isMPT && typeof value !== 'string') { + if (mptIssuanceData) { + const scale = mptIssuanceData.assetScale ?? 0 + const scaledAmount = convertScaledPrice( + parseInt(amount as string, 10).toString(16), + scale, + ) + + return renderAmount(localizeNumber(scaledAmount, language, {}, true)) + } + return null + } + + return renderAmount(localizeNumber(amount, language, options)) } diff --git a/src/containers/shared/components/Currency.tsx b/src/containers/shared/components/Currency.tsx index 64727ca0a..ac48efa7c 100644 --- a/src/containers/shared/components/Currency.tsx +++ b/src/containers/shared/components/Currency.tsx @@ -1,5 +1,5 @@ import { RouteLink } from '../routing' -import { TOKEN_ROUTE } from '../../App/routes' +import { TOKEN_ROUTE, MPT_ROUTE } from '../../App/routes' // https://xrpl.org/currency-formats.html#nonstandard-currency-codes const NON_STANDARD_CODE_LENGTH = 40 @@ -12,6 +12,7 @@ export interface Props { link?: boolean shortenIssuer?: boolean displaySymbol?: boolean + isMPT?: boolean } /* @@ -25,33 +26,46 @@ const Currency = (props: Props) => { link = true, shortenIssuer = false, displaySymbol = true, + isMPT = false, } = props + let content - const currencyCode = - currency?.length === NON_STANDARD_CODE_LENGTH && - currency?.substring(0, 2) !== LP_TOKEN_IDENTIFIER - ? hexToString(currency) - : currency - - let display = `${currencyCode}` - - if (currencyCode === XRP && displaySymbol) { - display = `\uE900 ${display}` - } - - if (issuer) { - display += '.' - display += shortenIssuer ? issuer.substring(0, 4) : issuer - } - - const content = - link && issuer ? ( - <RouteLink to={TOKEN_ROUTE} params={{ token: `${currency}.${issuer}` }}> + if (isMPT) { + const display = `MPT (${currency})` + content = link ? ( + <RouteLink to={MPT_ROUTE} params={{ id: currency }}> {display} </RouteLink> ) : ( display ) + } else { + const currencyCode = + currency?.length === NON_STANDARD_CODE_LENGTH && + currency?.substring(0, 2) !== LP_TOKEN_IDENTIFIER + ? hexToString(currency) + : currency + + let display = `${currencyCode}` + + if (currencyCode === XRP && displaySymbol) { + display = `\uE900 ${display}` + } + + if (issuer) { + display += '.' + display += shortenIssuer ? issuer.substring(0, 4) : issuer + } + + content = + link && issuer ? ( + <RouteLink to={TOKEN_ROUTE} params={{ token: `${currency}.${issuer}` }}> + {display} + </RouteLink> + ) : ( + display + ) + } return <span className="currency">{content}</span> } diff --git a/src/containers/shared/components/MPTokenLink.tsx b/src/containers/shared/components/MPTokenLink.tsx new file mode 100644 index 000000000..f1c2198bb --- /dev/null +++ b/src/containers/shared/components/MPTokenLink.tsx @@ -0,0 +1,12 @@ +import { RouteLink } from '../routing' +import { MPT_ROUTE } from '../../App/routes' + +export interface MPTokenLinkProps { + tokenID: string +} + +export const MPTokenLink = ({ tokenID }: MPTokenLinkProps) => ( + <RouteLink title={tokenID} to={MPT_ROUTE} params={{ id: tokenID }}> + {tokenID} + </RouteLink> +) diff --git a/src/containers/shared/components/Tooltip/Tooltip.tsx b/src/containers/shared/components/Tooltip/Tooltip.tsx index 7154eb8ca..673cd72de 100644 --- a/src/containers/shared/components/Tooltip/Tooltip.tsx +++ b/src/containers/shared/components/Tooltip/Tooltip.tsx @@ -91,6 +91,8 @@ export const Tooltip = ({ tooltip }: { tooltip?: TooltipInstance }) => { </> ) + const renderMPTId = () => <div className="mpt">{data.tokenId}</div> + const { x, y, mode } = tooltip const style: CSSProperties = { top: y + PADDING_Y, left: x } const modeMap = { @@ -100,6 +102,7 @@ export const Tooltip = ({ tooltip }: { tooltip?: TooltipInstance }) => { missing: renderMissingValidators, paystring: renderPayStringToolTip, nftId: renderNFTId, + mptId: renderMPTId, } return modeMap[mode] ? ( diff --git a/src/containers/shared/components/Transaction/Clawback/Description.tsx b/src/containers/shared/components/Transaction/Clawback/Description.tsx index ec59c0a96..c92397c35 100644 --- a/src/containers/shared/components/Transaction/Clawback/Description.tsx +++ b/src/containers/shared/components/Transaction/Clawback/Description.tsx @@ -6,8 +6,8 @@ import { formatAmount } from '../../../../../rippled/lib/txSummary/formatAmount' export const Description = ({ data }: TransactionDescriptionProps) => { const issuer = data.tx.Account - const holder = data.tx.Amount.issuer const amount = formatAmount(data.tx.Amount) + const holder = amount.isMPT ? data.tx.MPTokenHolder : data.tx.Amount.issuer amount.issuer = issuer return ( <> diff --git a/src/containers/shared/components/Transaction/Clawback/parser.ts b/src/containers/shared/components/Transaction/Clawback/parser.ts index 0da7126b7..f5ce6f6a0 100644 --- a/src/containers/shared/components/Transaction/Clawback/parser.ts +++ b/src/containers/shared/components/Transaction/Clawback/parser.ts @@ -1,7 +1,10 @@ import { Clawback, ClawbackInstructions } from './types' import { TransactionParser } from '../types' import { formatAmount } from '../../../../../rippled/lib/txSummary/formatAmount' -import { computeBalanceChange } from '../../../utils' +import { + computeRippleStateBalanceChange, + computeMPTokenBalanceChange, +} from '../../../utils' export const parser: TransactionParser<Clawback, ClawbackInstructions> = ( tx, @@ -9,6 +12,37 @@ export const parser: TransactionParser<Clawback, ClawbackInstructions> = ( ) => { const account = tx.Account const amount = formatAmount(tx.Amount) + + if (amount.isMPT === true) { + const holder = tx.MPTokenHolder + + const filteredMptNode = meta.AffectedNodes.filter( + (node: any) => node.ModifiedNode?.LedgerEntryType === 'MPToken', + ) + + // If no mpt is modified, it means the tx failed. + // We just return the amount that was attempted to claw. + if (!filteredMptNode || filteredMptNode.length !== 1) + return { + amount, + account, + holder, + } + + const mptNode = filteredMptNode[0].ModifiedNode + const { change } = computeMPTokenBalanceChange(mptNode) + amount.amount = + BigInt(change) < 0 + ? BigInt(-change).toString(10) + : BigInt(change).toString(10) + + return { + account, + amount, + holder, + } + } + const holder = amount.issuer amount.issuer = account @@ -30,7 +64,7 @@ export const parser: TransactionParser<Clawback, ClawbackInstructions> = ( holder, } - const { change } = computeBalanceChange( + const { change } = computeRippleStateBalanceChange( trustlineNode[0].ModifiedNode ?? trustlineNode[0].DeletedNode, ) diff --git a/src/containers/shared/components/Transaction/Clawback/test/ClawbackSimple.test.tsx b/src/containers/shared/components/Transaction/Clawback/test/ClawbackSimple.test.tsx index 6110b2b41..1a7e19ee7 100644 --- a/src/containers/shared/components/Transaction/Clawback/test/ClawbackSimple.test.tsx +++ b/src/containers/shared/components/Transaction/Clawback/test/ClawbackSimple.test.tsx @@ -1,7 +1,15 @@ +import { useQuery } from 'react-query' import { createSimpleWrapperFactory, expectSimpleRowText } from '../../test' import { Simple } from '../Simple' import transaction from './mock_data/Clawback.json' import transactionFailure from './mock_data/Clawback_Failure.json' +import transactionMPT from './mock_data/ClawbackMPT.json' +import transactionMPTFailure from './mock_data/ClawbackMPT_Failure.json' + +jest.mock('react-query', () => ({ + ...jest.requireActual('react-query'), + useQuery: jest.fn(), +})) const createWrapper = createSimpleWrapperFactory(Simple) @@ -17,6 +25,26 @@ describe('Clawback', () => { wrapper.unmount() }) + it('handles MPT Clawback simple view ', () => { + const data = { + assetScale: 3, + } + + // @ts-ignore + useQuery.mockImplementation(() => ({ + data, + })) + const wrapper = createWrapper(transactionMPT) + expectSimpleRowText(wrapper, 'holder', 'rUZTPFN7MBJkjiZ48rak6q7MbhT4ur2kAD') + expectSimpleRowText( + wrapper, + 'amount', + '0.05 MPT (00000D668E702F54A27C42EF98C13B0787D1766CC9162A47)', + ) + + wrapper.unmount() + }) + it('handles failed Clawback simple view ', () => { const wrapper = createWrapper(transactionFailure) expectSimpleRowText(wrapper, 'holder', 'rDZ713igKfedN4hhY6SjQse4Mv3ZrBxnn9') @@ -27,4 +55,24 @@ describe('Clawback', () => { ) wrapper.unmount() }) + + it('handles failed MPT Clawback simple view ', () => { + const data = { + assetScale: 3, + } + + // @ts-ignore + useQuery.mockImplementation(() => ({ + data, + })) + const wrapper = createWrapper(transactionMPTFailure) + + expectSimpleRowText(wrapper, 'holder', 'r9rAqX8Jjo4uACsimYDVsy5thHDPivujqf') + expectSimpleRowText( + wrapper, + 'amount', + '0.05 MPT (000010952ECE2AFC727F1C67EF568F360A2D92CB7C29FF7C)', + ) + wrapper.unmount() + }) }) diff --git a/src/containers/shared/components/Transaction/Clawback/test/mock_data/ClawbackMPT.json b/src/containers/shared/components/Transaction/Clawback/test/mock_data/ClawbackMPT.json new file mode 100644 index 000000000..2a7d4513a --- /dev/null +++ b/src/containers/shared/components/Transaction/Clawback/test/mock_data/ClawbackMPT.json @@ -0,0 +1,85 @@ +{ + "tx": { + "Account": "rDz9LyymZh4C1jJvFK6v6qXeeARLdYKuEW", + "Amount": { + "mpt_issuance_id": "00000D668E702F54A27C42EF98C13B0787D1766CC9162A47", + "value": "50" + }, + "Fee": "10", + "Flags": 2147483648, + "MPTokenHolder": "rUZTPFN7MBJkjiZ48rak6q7MbhT4ur2kAD", + "Sequence": 3432, + "SigningPubKey": "ED0C1DE70A8762E6C98EC78CF13D278D6950ECDFE8E87BAD3732730845E2D9AB6A", + "TransactionType": "Clawback", + "TxnSignature": "8099CED925A463A2A24F55A496D2BB40108B75840770DFBA9796FBBD40AA482126EE9DAF2512D5D2E8268BCBFC277828E66A28CF3394702611290B45FBA88109", + "ctid": "C0000D6D00000000", + "date": 1728575981000 + }, + "meta": { + "AffectedNodes": [ + { + "ModifiedNode": { + "FinalFields": { + "Account": "rDz9LyymZh4C1jJvFK6v6qXeeARLdYKuEW", + "Balance": "99999970", + "Flags": 0, + "OwnerCount": 1, + "Sequence": 3433 + }, + "LedgerEntryType": "AccountRoot", + "LedgerIndex": "06A3654A4A8829FD0575ADDD068BD04F7483C407E027CB43F77C2A5CA575368B", + "PreviousFields": { + "Balance": "99999980", + "Sequence": 3432 + }, + "PreviousTxnID": "4B6D63C7AA15899EC1CB3D84C923B08A62D6643A75D28B254F7A0C082B2C0D75", + "PreviousTxnLgrSeq": 3436 + } + }, + { + "ModifiedNode": { + "FinalFields": { + "AssetScale": 3, + "Flags": 98, + "Issuer": "rDz9LyymZh4C1jJvFK6v6qXeeARLdYKuEW", + "MPTokenMetadata": "7B226E616D65223A2255532054726561737572792042696C6C20546F6B656E222C2273796D626F6C223A225553544254222C22646563696D616C73223A322C22746F74616C537570706C79223A313030303030302C22697373756572223A225553205472656173757279222C22697373756544617465223A22323032342D30332D3235222C226D6174757269747944617465223A22323032352D30332D3235222C226661636556616C7565223A2231303030222C22696E74657265737452617465223A22322E35222C22696E7465726573744672657175656E6379223A22517561727465726C79222C22636F6C6C61746572616C223A22555320476F7665726E6D656E74222C226A7572697364696374696F6E223A22556E6974656420537461746573222C22726567756C61746F7279436F6D706C69616E6365223A2253454320526567756C6174696F6E73222C22736563757269747954797065223A2254726561737572792042696C6C222C2265787465726E616C5F75726C223A2268747470733A2F2F6578616D706C652E636F6D2F742D62696C6C2D746F6B656E2D6D657461646174612E6A736F6E227D", + "MaximumAmount": "9223372036854775807", + "OutstandingAmount": "50", + "OwnerNode": "0", + "Sequence": 3430 + }, + "LedgerEntryType": "MPTokenIssuance", + "LedgerIndex": "0EABDC95DBBC52F8A95A5F49C38211A30B916BC329774F46CC081D502F9E1895", + "PreviousFields": { + "OutstandingAmount": "100" + }, + "PreviousTxnID": "4B6D63C7AA15899EC1CB3D84C923B08A62D6643A75D28B254F7A0C082B2C0D75", + "PreviousTxnLgrSeq": 3436 + } + }, + { + "ModifiedNode": { + "FinalFields": { + "Account": "rUZTPFN7MBJkjiZ48rak6q7MbhT4ur2kAD", + "Flags": 0, + "MPTAmount": "50", + "MPTokenIssuanceID": "00000D668E702F54A27C42EF98C13B0787D1766CC9162A47", + "OwnerNode": "0" + }, + "LedgerEntryType": "MPToken", + "LedgerIndex": "DA40BA069F110465BD90BF5732163836F011E3E761CCF7B6949FAA24D97132F6", + "PreviousFields": { + "MPTAmount": "100" + }, + "PreviousTxnID": "4B6D63C7AA15899EC1CB3D84C923B08A62D6643A75D28B254F7A0C082B2C0D75", + "PreviousTxnLgrSeq": 3436 + } + } + ], + "TransactionIndex": 0, + "TransactionResult": "tesSUCCESS" + }, + "hash": "46B686335794B911B3B76C2F4B76AF424F9978C3E82B2F6488801C359AA71856", + "ledger_index": 3437, + "date": 1728575981000 +} diff --git a/src/containers/shared/components/Transaction/Clawback/test/mock_data/ClawbackMPT_Failure.json b/src/containers/shared/components/Transaction/Clawback/test/mock_data/ClawbackMPT_Failure.json new file mode 100644 index 000000000..b0c7d31c8 --- /dev/null +++ b/src/containers/shared/components/Transaction/Clawback/test/mock_data/ClawbackMPT_Failure.json @@ -0,0 +1,46 @@ +{ + "tx": { + "Account": "rnGVhdnWv7g3fW8UNJyFHj6eyngsMdwA8c", + "Amount": { + "mpt_issuance_id": "000010952ECE2AFC727F1C67EF568F360A2D92CB7C29FF7C", + "value": "50" + }, + "Fee": "10", + "Flags": 2147483648, + "MPTokenHolder": "r9rAqX8Jjo4uACsimYDVsy5thHDPivujqf", + "Sequence": 4246, + "SigningPubKey": "ED4F6FF2241860884D4DD6C5797BDA553155D194F07B1BFC67129F183322DA7DC3", + "TransactionType": "Clawback", + "TxnSignature": "C54F175F0AFD950507C059E0EA5E6FA0079E7CDE5DF62BB122B56DC34A351C2369E208B31F7C27B1E9D21753506E195B147500D033884C44373899C84A97680B", + "ctid": "C000109B00000000", + "date": 1728577343000 + }, + "meta": { + "AffectedNodes": [ + { + "ModifiedNode": { + "FinalFields": { + "Account": "rnGVhdnWv7g3fW8UNJyFHj6eyngsMdwA8c", + "Balance": "99999980", + "Flags": 0, + "OwnerCount": 1, + "Sequence": 4247 + }, + "LedgerEntryType": "AccountRoot", + "LedgerIndex": "95A16157D164CD90D64BC94DE3EA7758AE3088391C9AC44AFCAC90C5153D83D5", + "PreviousFields": { + "Balance": "99999990", + "Sequence": 4246 + }, + "PreviousTxnID": "8ACD0682CB1EDDCF6C61F15E6B9637D2719FDA2EC32EB384A68F36F0A0297D91", + "PreviousTxnLgrSeq": 4248 + } + } + ], + "TransactionIndex": 0, + "TransactionResult": "tecINSUFFICIENT_FUNDS" + }, + "hash": "26E6E7AEA4F78801EB0408D802FEBA11B962BFD680501DF0D0C58F30C6EA8951", + "ledger_index": 4251, + "date": 1728577343000 +} diff --git a/src/containers/shared/components/Transaction/Clawback/types.ts b/src/containers/shared/components/Transaction/Clawback/types.ts index 81930d4c2..bbfaa9067 100644 --- a/src/containers/shared/components/Transaction/Clawback/types.ts +++ b/src/containers/shared/components/Transaction/Clawback/types.ts @@ -3,6 +3,7 @@ import { Amount, ExplorerAmount } from '../../../types' export interface Clawback extends TransactionCommonFields { Amount: Amount + MPTokenHolder?: string } export interface ClawbackInstructions { diff --git a/src/containers/shared/components/Transaction/MPTokenAuthorize/Simple.tsx b/src/containers/shared/components/Transaction/MPTokenAuthorize/Simple.tsx new file mode 100644 index 000000000..9823dfe4f --- /dev/null +++ b/src/containers/shared/components/Transaction/MPTokenAuthorize/Simple.tsx @@ -0,0 +1,26 @@ +import { useTranslation } from 'react-i18next' +import { SimpleRow } from '../SimpleRow' +import { TransactionSimpleComponent, TransactionSimpleProps } from '../types' +import { MPTokenAuthorize } from './types' +import { Account } from '../../Account' +import { MPTokenLink } from '../../MPTokenLink' + +export const Simple: TransactionSimpleComponent = ({ + data, +}: TransactionSimpleProps<MPTokenAuthorize>) => { + const { MPTokenIssuanceID, MPTokenHolder } = data.instructions + const { t } = useTranslation() + + return ( + <> + <SimpleRow label={t('mpt_issuance_id')} data-test="mpt-issuance-id"> + <MPTokenLink tokenID={MPTokenIssuanceID} /> + </SimpleRow> + {MPTokenHolder && ( + <SimpleRow label={t('mpt_holder')} data-test="mpt-holder"> + <Account account={MPTokenHolder} /> + </SimpleRow> + )} + </> + ) +} diff --git a/src/containers/shared/components/Transaction/MPTokenAuthorize/index.ts b/src/containers/shared/components/Transaction/MPTokenAuthorize/index.ts new file mode 100644 index 000000000..707282fdf --- /dev/null +++ b/src/containers/shared/components/Transaction/MPTokenAuthorize/index.ts @@ -0,0 +1,13 @@ +import { + TransactionAction, + TransactionCategory, + TransactionMapping, +} from '../types' + +import { Simple } from './Simple' + +export const MPTokenAuthorizeTransaction: TransactionMapping = { + Simple, + action: TransactionAction.MODIFY, + category: TransactionCategory.MPT, +} diff --git a/src/containers/shared/components/Transaction/MPTokenAuthorize/test/MPTokenAuthorizeSimple.test.jsx b/src/containers/shared/components/Transaction/MPTokenAuthorize/test/MPTokenAuthorizeSimple.test.jsx new file mode 100644 index 000000000..932a18cc1 --- /dev/null +++ b/src/containers/shared/components/Transaction/MPTokenAuthorize/test/MPTokenAuthorizeSimple.test.jsx @@ -0,0 +1,66 @@ +import { createSimpleWrapperFactory } from '../../test/createWrapperFactory' +import { Simple } from '../Simple' +import { expectSimpleRowText, expectSimpleRowNotToExist } from '../../test' +import transactionSuccess from './mock_data/MPTokenAuthorize.json' +import transactionFail from './mock_data/MPTokenAuthorize_Fail.json' +import transactionWithHolder from './mock_data/MPTokenAuthorize_WithHolder.json' +import transactionWithHolderFail from './mock_data/MPTokenAuthorize_WithHolderFail.json' + +const createWrapper = createSimpleWrapperFactory(Simple) + +describe('MPTokenAuthorize', () => { + it('handles MPTokenAuthorize w/o holder simple view ', () => { + const wrapper = createWrapper(transactionSuccess) + + expectSimpleRowText( + wrapper, + 'mpt-issuance-id', + '000005F398B624EBD06822198649C920C8B20ADB8EBE745E', + ) + expectSimpleRowNotToExist(wrapper, 'mpt-holder') + wrapper.unmount() + }) + + it('handles MPTokenAuthorize view w/ holder simple view ', () => { + const wrapper = createWrapper(transactionWithHolder) + + expectSimpleRowText( + wrapper, + 'mpt-issuance-id', + '0000130B63FC523E33FDF4D1318D8D484B0D1111098CFD0B', + ) + expectSimpleRowText( + wrapper, + 'mpt-holder', + 'rK3bB9myvWoMaLbLnpksGx2Zz58BL225am', + ) + wrapper.unmount() + }) + + it('handles failed MPTokenAuthorize view w/ holder simple view ', () => { + const wrapper = createWrapper(transactionWithHolderFail) + + expectSimpleRowText( + wrapper, + 'mpt-issuance-id', + '00000F76D46440EE21F74E5B2398315BC1CFEB9A7EB48A14', + ) + expectSimpleRowText( + wrapper, + 'mpt-holder', + 'rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh', + ) + wrapper.unmount() + }) + + it('handles failed MPTokenAuthorize w/o holder simple view ', () => { + const wrapper = createWrapper(transactionFail) + expectSimpleRowText( + wrapper, + 'mpt-issuance-id', + '0000098410531B842DEECCF4ABB1268C931EB71D9F6A1B64', + ) + expectSimpleRowNotToExist(wrapper, 'mpt-holder') + wrapper.unmount() + }) +}) diff --git a/src/containers/shared/components/Transaction/MPTokenAuthorize/test/mock_data/MPTokenAuthorize.json b/src/containers/shared/components/Transaction/MPTokenAuthorize/test/mock_data/MPTokenAuthorize.json new file mode 100644 index 000000000..e41a47854 --- /dev/null +++ b/src/containers/shared/components/Transaction/MPTokenAuthorize/test/mock_data/MPTokenAuthorize.json @@ -0,0 +1,70 @@ +{ + "tx": { + "Account": "rnLz9TWQAvaLpdyrtb1WbMgp7jZdNQ47Ny", + "Fee": "10", + "Flags": 2147483648, + "MPTokenIssuanceID": "000005F398B624EBD06822198649C920C8B20ADB8EBE745E", + "Sequence": 1524, + "SigningPubKey": "ED97BAFB2D380AF67DA2C1968C3A1DC38797E9BA0653CE620F6BC97FFD66925EBB", + "TransactionType": "MPTokenAuthorize", + "TxnSignature": "28879892AF0D465063993BD1DDCA147C7CA0AB9C8429DAB3A0030AA4AC57AA80F725F295622913C07E4CAFB3160DEF7E8D0209429390B0FBD78F96B28E700A07", + "ctid": "C00005F600000000", + "date": 1711397033000, + "hash": "undefined", + "inLedger": "undefined", + "ledger_index": "undefined", + "meta": "undefined", + "validated": "undefined", + "metaData": "undefined", + "status": "undefined" + }, + "meta": { + "AffectedNodes": [ + { + "ModifiedNode": { + "FinalFields": { + "Account": "rnLz9TWQAvaLpdyrtb1WbMgp7jZdNQ47Ny", + "Balance": "99999990", + "Flags": 0, + "OwnerCount": 1, + "Sequence": 1525 + }, + "LedgerEntryType": "AccountRoot", + "LedgerIndex": "424AAE60FE8A4B7EF77DA492F9561AAFA1D09DB56BE5804B055235BCD662C9FE", + "PreviousFields": { + "Balance": "100000000", + "OwnerCount": 0, + "Sequence": 1524 + }, + "PreviousTxnID": "B6301327D79A93DC211043ABF66A60DC9C70BD2962FC42E0EAD0A829680ABAE8", + "PreviousTxnLgrSeq": 1524 + } + }, + { + "CreatedNode": { + "LedgerEntryType": "DirectoryNode", + "LedgerIndex": "65BCF554A41D30521B876D012D3DC167F9E886E02D88231E9DEBD2501A4A7BB5", + "NewFields": { + "Owner": "rnLz9TWQAvaLpdyrtb1WbMgp7jZdNQ47Ny", + "RootIndex": "65BCF554A41D30521B876D012D3DC167F9E886E02D88231E9DEBD2501A4A7BB5" + } + } + }, + { + "CreatedNode": { + "LedgerEntryType": "MPToken", + "LedgerIndex": "91D261494BB3D64D5D3D12BD480EB58C5E2B21F3222B12FE442BC73276C27266", + "NewFields": { + "Account": "rnLz9TWQAvaLpdyrtb1WbMgp7jZdNQ47Ny", + "MPTokenIssuanceID": "000005F398B624EBD06822198649C920C8B20ADB8EBE745E" + } + } + } + ], + "TransactionIndex": 0, + "TransactionResult": "tesSUCCESS" + }, + "hash": "9592E76A725CF4A5A441024EE80596DFE8809D1AD1EC28A8D9DB2CEC2CB81EDC", + "ledger_index": 1526, + "date": 1711397033000 +} diff --git a/src/containers/shared/components/Transaction/MPTokenAuthorize/test/mock_data/MPTokenAuthorize_Fail.json b/src/containers/shared/components/Transaction/MPTokenAuthorize/test/mock_data/MPTokenAuthorize_Fail.json new file mode 100644 index 000000000..8d305ae95 --- /dev/null +++ b/src/containers/shared/components/Transaction/MPTokenAuthorize/test/mock_data/MPTokenAuthorize_Fail.json @@ -0,0 +1,49 @@ +{ + "tx": { + "Account": "rJtok1j4okh4HkKxC3ArAvZbMD1vcDSteo", + "Fee": "10", + "Flags": 2147483648, + "MPTokenIssuanceID": "0000098410531B842DEECCF4ABB1268C931EB71D9F6A1B64", + "Sequence": 2438, + "SigningPubKey": "EDE493F0B7846A102A5C6EF4FDD9E95D1A84B0BEB99DED06C4436C0D61E5FA0B67", + "TransactionType": "MPTokenAuthorize", + "TxnSignature": "C903E4BA935BA27424D05CA230385FBA392CB4B48C136E37EF5DABE07814A2A8FA0AAEE34FCAB994D1AED7A663EB4CA121FA07B83E3C5A74289ABA258AA45F00", + "ctid": "C000098800000000", + "date": 1711398512000, + "hash": "undefined", + "inLedger": "undefined", + "ledger_index": "undefined", + "meta": "undefined", + "validated": "undefined", + "metaData": "undefined", + "status": "undefined" + }, + "meta": { + "AffectedNodes": [ + { + "ModifiedNode": { + "FinalFields": { + "Account": "rJtok1j4okh4HkKxC3ArAvZbMD1vcDSteo", + "Balance": "99999980", + "Flags": 0, + "OwnerCount": 1, + "Sequence": 2439 + }, + "LedgerEntryType": "AccountRoot", + "LedgerIndex": "FE496E6B5CBE4778460846E5B93648B41E15463E691311EA4CD7E578561CA20E", + "PreviousFields": { + "Balance": "99999990", + "Sequence": 2438 + }, + "PreviousTxnID": "26BB8D3B11AA0C967470DBA5D6B09A10608B4D1DADE0408668A45C010F4B8DDC", + "PreviousTxnLgrSeq": 2439 + } + } + ], + "TransactionIndex": 0, + "TransactionResult": "tecMPTOKEN_EXISTS" + }, + "hash": "7B785C2D172D8FAE35DBBA66868D147747F32B5D6AA41F62D698E872643CE2B6", + "ledger_index": 2440, + "date": 1711398512000 +} diff --git a/src/containers/shared/components/Transaction/MPTokenAuthorize/test/mock_data/MPTokenAuthorize_WithHolder.json b/src/containers/shared/components/Transaction/MPTokenAuthorize/test/mock_data/MPTokenAuthorize_WithHolder.json new file mode 100644 index 000000000..3cce1b4e2 --- /dev/null +++ b/src/containers/shared/components/Transaction/MPTokenAuthorize/test/mock_data/MPTokenAuthorize_WithHolder.json @@ -0,0 +1,67 @@ +{ + "tx": { + "Account": "rwfgw2dWqUAexB46z5QRq2dJcgTK9piw5w", + "Fee": "10", + "Flags": 2147483648, + "MPTokenHolder": "rK3bB9myvWoMaLbLnpksGx2Zz58BL225am", + "MPTokenIssuanceID": "0000130B63FC523E33FDF4D1318D8D484B0D1111098CFD0B", + "Sequence": 4876, + "SigningPubKey": "ED936E848B8E37D20991C2E1C5C76ABAEC0625D693CEB85BA495B58E16712DA627", + "TransactionType": "MPTokenAuthorize", + "TxnSignature": "3F31AD3682B9261975E27895DFCB9F373C33C174A076445C33AE13A6713D7FC8C8305A4D05C4918979C9EAD0230A61CE9998B71BEE21653D6BFCCC65F599100E", + "ctid": "C000130F00000000", + "date": 1711400951000, + "hash": "undefined", + "inLedger": "undefined", + "ledger_index": "undefined", + "meta": "undefined", + "validated": "undefined", + "metaData": "undefined", + "status": "undefined" + }, + "meta": { + "AffectedNodes": [ + { + "ModifiedNode": { + "FinalFields": { + "Account": "rwfgw2dWqUAexB46z5QRq2dJcgTK9piw5w", + "Balance": "99999980", + "Flags": 0, + "OwnerCount": 1, + "Sequence": 4877 + }, + "LedgerEntryType": "AccountRoot", + "LedgerIndex": "C688ECD4065B909634121581E792188424F29B48C062F1D1D4FED180DEAF3A23", + "PreviousFields": { + "Balance": "99999990", + "Sequence": 4876 + }, + "PreviousTxnID": "D12E5ED52F495449A537DB9293174209CC132CDCD4EFBBACCEB7F8E8FC582BBC", + "PreviousTxnLgrSeq": 4877 + } + }, + { + "ModifiedNode": { + "FinalFields": { + "Account": "rK3bB9myvWoMaLbLnpksGx2Zz58BL225am", + "Flags": 2, + "MPTokenIssuanceID": "0000130B63FC523E33FDF4D1318D8D484B0D1111098CFD0B", + "OwnerNode": "0" + }, + "LedgerEntryType": "MPToken", + "LedgerIndex": "E6BC3F027146E5A2A50C01C37E7C5320E608C9D1D5BE763F32748865DB6EF3DE", + "PreviousFields": { + "Flags": 0 + }, + "PreviousTxnID": "FA5F2B8CE18C33D09E0243A2D20319AB9AF9D6CF5F1C2568B0CC4764DEC31F7A", + "PreviousTxnLgrSeq": 4878 + } + } + ], + "TransactionIndex": 0, + "TransactionResult": "tesSUCCESS" + }, + "hash": "5F92E78273BCF8A71E129F2CC9B8B0D5611E79D4CF81B530BF7B69892A579060", + "ledger_index": 4879, + "date": 1711400951000 +} diff --git a/src/containers/shared/components/Transaction/MPTokenAuthorize/test/mock_data/MPTokenAuthorize_WithHolderFail.json b/src/containers/shared/components/Transaction/MPTokenAuthorize/test/mock_data/MPTokenAuthorize_WithHolderFail.json new file mode 100644 index 000000000..69b7eaa8c --- /dev/null +++ b/src/containers/shared/components/Transaction/MPTokenAuthorize/test/mock_data/MPTokenAuthorize_WithHolderFail.json @@ -0,0 +1,50 @@ +{ + "tx": { + "Account": "rL4pMQAa3V7s9QNw1wEk2znnhjbfYo4GQC", + "Fee": "10", + "Flags": 2147483648, + "MPTokenHolder": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", + "MPTokenIssuanceID": "00000F76D46440EE21F74E5B2398315BC1CFEB9A7EB48A14", + "Sequence": 3959, + "SigningPubKey": "EDF7A3D93CE3AA46168649283C20C2D4FC36642FDD87449F1CCF068638BF17B10E", + "TransactionType": "MPTokenAuthorize", + "TxnSignature": "2795F1DC9C54493ADE475800A67FD5B3BC7B65F4E343CEEA0950E994F0FC10D0DAED13B4B0FD345E92BFD2B4F42A09A44906D5B2CD1D8FD7A4B3D28983F51806", + "ctid": "C0000F7900000000", + "date": 1711400033000, + "hash": "undefined", + "inLedger": "undefined", + "ledger_index": "undefined", + "meta": "undefined", + "validated": "undefined", + "metaData": "undefined", + "status": "undefined" + }, + "meta": { + "AffectedNodes": [ + { + "ModifiedNode": { + "FinalFields": { + "Account": "rL4pMQAa3V7s9QNw1wEk2znnhjbfYo4GQC", + "Balance": "99999980", + "Flags": 0, + "OwnerCount": 1, + "Sequence": 3960 + }, + "LedgerEntryType": "AccountRoot", + "LedgerIndex": "00BFE84169F6CAA5D03348856B57D47788B6856ABA9FA6EC7A16E6DA1B99B9D7", + "PreviousFields": { + "Balance": "99999990", + "Sequence": 3959 + }, + "PreviousTxnID": "E07D68B9728EE8954C66219FF713782933612A7D5EF44B50F5485557629DFE3D", + "PreviousTxnLgrSeq": 3960 + } + } + ], + "TransactionIndex": 0, + "TransactionResult": "tecNO_AUTH" + }, + "hash": "95AE2E382D6CFBFCECC012DDC52458E753FB9208A5040D2F441B5DE5BEA535CF", + "ledger_index": 3961, + "date": 1711400033000 +} diff --git a/src/containers/shared/components/Transaction/MPTokenAuthorize/types.ts b/src/containers/shared/components/Transaction/MPTokenAuthorize/types.ts new file mode 100644 index 000000000..878129a9f --- /dev/null +++ b/src/containers/shared/components/Transaction/MPTokenAuthorize/types.ts @@ -0,0 +1,6 @@ +import { TransactionCommonFields } from '../types' + +export interface MPTokenAuthorize extends TransactionCommonFields { + MPTokenIssuanceID: string + MPTokenHolder?: string +} diff --git a/src/containers/shared/components/Transaction/MPTokenIssuanceCreate/Simple.tsx b/src/containers/shared/components/Transaction/MPTokenIssuanceCreate/Simple.tsx new file mode 100644 index 000000000..dc80d5625 --- /dev/null +++ b/src/containers/shared/components/Transaction/MPTokenIssuanceCreate/Simple.tsx @@ -0,0 +1,63 @@ +import { useTranslation } from 'react-i18next' +import { SimpleRow } from '../SimpleRow' +import { TransactionSimpleComponent, TransactionSimpleProps } from '../types' +import { MPTokenIssuanceCreateInstructions } from './types' +import { useLanguage } from '../../../hooks' +import { localizeNumber } from '../../../utils' +import { MPTokenLink } from '../../MPTokenLink' + +export const Simple: TransactionSimpleComponent = ({ + data, +}: TransactionSimpleProps<MPTokenIssuanceCreateInstructions>) => { + const { issuanceID, metadata, assetScale, transferFee, maxAmount } = + data.instructions + const { t } = useTranslation() + const language = useLanguage() + const formattedFee = + transferFee && + `${localizeNumber((transferFee / 1000).toPrecision(5), language, { + minimumFractionDigits: 3, + })}%` + + return ( + <> + {issuanceID && ( + <SimpleRow label={t('mpt_issuance_id')} data-test="mpt-issuance-id"> + <MPTokenLink tokenID={issuanceID} /> + </SimpleRow> + )} + {assetScale && ( + <SimpleRow + label={t('asset_scale')} + className="dt" + data-test="mpt-asset-scale" + > + {assetScale} + </SimpleRow> + )} + {transferFee && ( + <SimpleRow label={t('transfer_fee')} data-test="mpt-fee"> + {formattedFee} + </SimpleRow> + )} + {maxAmount && ( + <SimpleRow + label={t('max_amount')} + className="dt" + data-test="mpt-max-amount" + > + {maxAmount} + </SimpleRow> + )} + {metadata && ( + <SimpleRow + label={t('metadata')} + className="dt" + data-test="mpt-metadata" + > + {metadata} + </SimpleRow> + )} + </> + ) +} diff --git a/src/containers/shared/components/Transaction/MPTokenIssuanceCreate/index.ts b/src/containers/shared/components/Transaction/MPTokenIssuanceCreate/index.ts new file mode 100644 index 000000000..03275f8f7 --- /dev/null +++ b/src/containers/shared/components/Transaction/MPTokenIssuanceCreate/index.ts @@ -0,0 +1,15 @@ +import { + TransactionAction, + TransactionCategory, + TransactionMapping, +} from '../types' + +import { Simple } from './Simple' +import { parser } from './parser' + +export const MPTokenIssuanceCreateTransaction: TransactionMapping = { + Simple, + action: TransactionAction.CREATE, + category: TransactionCategory.MPT, + parser, +} diff --git a/src/containers/shared/components/Transaction/MPTokenIssuanceCreate/parser.ts b/src/containers/shared/components/Transaction/MPTokenIssuanceCreate/parser.ts new file mode 100644 index 000000000..d24770bc7 --- /dev/null +++ b/src/containers/shared/components/Transaction/MPTokenIssuanceCreate/parser.ts @@ -0,0 +1,21 @@ +import { + MPTokenIssuanceCreate, + MPTokenIssuanceCreateInstructions, +} from './types' +import { TransactionParser } from '../types' +import { convertHexToString } from '../../../../../rippled/lib/utils' + +export const parser: TransactionParser< + MPTokenIssuanceCreate, + MPTokenIssuanceCreateInstructions +> = (tx, meta) => ({ + issuanceID: meta.mpt_issuance_id, + metadata: tx.MPTokenMetadata + ? convertHexToString(tx.MPTokenMetadata) + : undefined, + transferFee: tx.TransferFee, + assetScale: tx.AssetScale, + maxAmount: tx.MaximumAmount + ? BigInt(tx.MaximumAmount).toString(10) + : undefined, +}) diff --git a/src/containers/shared/components/Transaction/MPTokenIssuanceCreate/test/MPTokenIssuanceCreateSimple.test.jsx b/src/containers/shared/components/Transaction/MPTokenIssuanceCreate/test/MPTokenIssuanceCreateSimple.test.jsx new file mode 100644 index 000000000..0c82efab4 --- /dev/null +++ b/src/containers/shared/components/Transaction/MPTokenIssuanceCreate/test/MPTokenIssuanceCreateSimple.test.jsx @@ -0,0 +1,27 @@ +import { createSimpleWrapperFactory } from '../../test/createWrapperFactory' +import { Simple } from '../Simple' +import { expectSimpleRowText } from '../../test' +import transactionSuccess from './mock_data/MPTokenIssuanceCreate.json' + +const createWrapper = createSimpleWrapperFactory(Simple) + +describe('MPTokenIssuanceCreate', () => { + it('handles MPTokenIssuanceCreate simple view ', () => { + const wrapper = createWrapper(transactionSuccess) + + expectSimpleRowText( + wrapper, + 'mpt-issuance-id', + '0000157844C3F3B57A8B579FEE1033CC8E8498729D063617', + ) + expectSimpleRowText(wrapper, 'mpt-asset-scale', '2') + expectSimpleRowText(wrapper, 'mpt-max-amount', '9223372036854775807') + expectSimpleRowText( + wrapper, + 'mpt-metadata', + 'https://ipfs.io/ipfs/QmZnjmB9Tk4xaA9E679ytrPXda3beWMLUnMB5RFj1eStLp', + ) + expectSimpleRowText(wrapper, 'mpt-fee', '0.010%') + wrapper.unmount() + }) +}) diff --git a/src/containers/shared/components/Transaction/MPTokenIssuanceCreate/test/mock_data/MPTokenIssuanceCreate.json b/src/containers/shared/components/Transaction/MPTokenIssuanceCreate/test/mock_data/MPTokenIssuanceCreate.json new file mode 100644 index 000000000..2b5b91b7d --- /dev/null +++ b/src/containers/shared/components/Transaction/MPTokenIssuanceCreate/test/mock_data/MPTokenIssuanceCreate.json @@ -0,0 +1,79 @@ +{ + "tx": { + "Account": "rfGb6p2kWy3zQweWnYNxSFYoHeymcx7mhg", + "AssetScale": 2, + "Fee": "10", + "Flags": 34, + "MPTokenMetadata": "68747470733A2F2F697066732E696F2F697066732F516D5A6E6A6D4239546B34786141394536373979747250586461336265574D4C556E4D423552466A316553744C70", + "MaximumAmount": "9223372036854775807", + "Sequence": 5496, + "SigningPubKey": "EDAD408FAEE57EB4A347E6FE395B834DD47C6531C3C37B09ACC35528161CAD4B0E", + "TransactionType": "MPTokenIssuanceCreate", + "TransferFee": 10, + "TxnSignature": "F7AA8083EE7D7EFD10E11FF5A12B73D2D45A80094AEED4B41FBF2A90C9E03E5E4D162E91FA1EC156BF94E770E70E7633DF09665A5C2D5408178FC376BFC9B100", + "ctid": "C000157A00000000", + "date": 1710949602000, + "hash": "undefined", + "inLedger": "undefined", + "ledger_index": "undefined", + "meta": "undefined", + "validated": "undefined", + "metaData": "undefined", + "status": "undefined" + }, + "meta": { + "AffectedNodes": [ + { + "ModifiedNode": { + "FinalFields": { + "Account": "rfGb6p2kWy3zQweWnYNxSFYoHeymcx7mhg", + "Balance": "99999990", + "Flags": 0, + "OwnerCount": 1, + "Sequence": 5497 + }, + "LedgerEntryType": "AccountRoot", + "LedgerIndex": "1996F74D57092C1AC261F55CB16A45A63C785993691869A431D72A5BF8AF47A0", + "PreviousFields": { + "Balance": "100000000", + "OwnerCount": 0, + "Sequence": 5496 + }, + "PreviousTxnID": "531254FC0F1599CCAF9ABCDBE0854B6BFBBA225ADD7CA341D2897CBDC3E78E5E", + "PreviousTxnLgrSeq": 5496 + } + }, + { + "CreatedNode": { + "LedgerEntryType": "MPTokenIssuance", + "LedgerIndex": "265CEA78D8246B8B51D5CCC20AF4DB95569DE09E53115C888B176A3D1D05048A", + "NewFields": { + "AssetScale": 2, + "Flags": 34, + "Issuer": "rfGb6p2kWy3zQweWnYNxSFYoHeymcx7mhg", + "MPTokenMetadata": "68747470733A2F2F697066732E696F2F697066732F516D5A6E6A6D4239546B34786141394536373979747250586461336265574D4C556E4D423552466A316553744C70", + "MaximumAmount": "9223372036854775807", + "Sequence": 5496, + "TransferFee": 10 + } + } + }, + { + "CreatedNode": { + "LedgerEntryType": "DirectoryNode", + "LedgerIndex": "3A6F809498F6C0E3664BD8451BBAE5F972E45AF17537354D1C28F3A00B35BDFE", + "NewFields": { + "Owner": "rfGb6p2kWy3zQweWnYNxSFYoHeymcx7mhg", + "RootIndex": "3A6F809498F6C0E3664BD8451BBAE5F972E45AF17537354D1C28F3A00B35BDFE" + } + } + } + ], + "TransactionIndex": 0, + "TransactionResult": "tesSUCCESS", + "mpt_issuance_id": "0000157844C3F3B57A8B579FEE1033CC8E8498729D063617" + }, + "hash": "9686DA1322D2D8F9CD97C5848A8E3CADB9D3F73154DA59BB3A3CACC4CA43671C", + "ledger_index": 5498, + "date": 1710949602000 +} diff --git a/src/containers/shared/components/Transaction/MPTokenIssuanceCreate/types.ts b/src/containers/shared/components/Transaction/MPTokenIssuanceCreate/types.ts new file mode 100644 index 000000000..2cce5aa21 --- /dev/null +++ b/src/containers/shared/components/Transaction/MPTokenIssuanceCreate/types.ts @@ -0,0 +1,16 @@ +import { TransactionCommonFields } from '../types' + +export interface MPTokenIssuanceCreate extends TransactionCommonFields { + AssetScale?: number + MaximumAmount?: string + TransferFee?: number + MPTokenMetadata?: string +} + +export interface MPTokenIssuanceCreateInstructions { + issuanceID?: string + metadata?: string + transferFee?: number + assetScale?: number + maxAmount?: string +} diff --git a/src/containers/shared/components/Transaction/MPTokenIssuanceDestroy/Simple.tsx b/src/containers/shared/components/Transaction/MPTokenIssuanceDestroy/Simple.tsx new file mode 100644 index 000000000..2b9bb6676 --- /dev/null +++ b/src/containers/shared/components/Transaction/MPTokenIssuanceDestroy/Simple.tsx @@ -0,0 +1,18 @@ +import { useTranslation } from 'react-i18next' +import { SimpleRow } from '../SimpleRow' +import { TransactionSimpleComponent, TransactionSimpleProps } from '../types' +import { MPTokenIssuanceDestroy } from './types' +import { MPTokenLink } from '../../MPTokenLink' + +export const Simple: TransactionSimpleComponent = ({ + data, +}: TransactionSimpleProps<MPTokenIssuanceDestroy>) => { + const { MPTokenIssuanceID } = data.instructions + const { t } = useTranslation() + + return ( + <SimpleRow label={t('mpt_issuance_id')} data-test="mpt-issuance-id"> + <MPTokenLink tokenID={MPTokenIssuanceID} /> + </SimpleRow> + ) +} diff --git a/src/containers/shared/components/Transaction/MPTokenIssuanceDestroy/index.ts b/src/containers/shared/components/Transaction/MPTokenIssuanceDestroy/index.ts new file mode 100644 index 000000000..52f730f68 --- /dev/null +++ b/src/containers/shared/components/Transaction/MPTokenIssuanceDestroy/index.ts @@ -0,0 +1,13 @@ +import { + TransactionAction, + TransactionCategory, + TransactionMapping, +} from '../types' + +import { Simple } from './Simple' + +export const MPTokenIssuanceDestroyTransaction: TransactionMapping = { + Simple, + action: TransactionAction.CANCEL, + category: TransactionCategory.MPT, +} diff --git a/src/containers/shared/components/Transaction/MPTokenIssuanceDestroy/test/MPTokenIssuanceDestroySimple.test.jsx b/src/containers/shared/components/Transaction/MPTokenIssuanceDestroy/test/MPTokenIssuanceDestroySimple.test.jsx new file mode 100644 index 000000000..ee9a5b7c0 --- /dev/null +++ b/src/containers/shared/components/Transaction/MPTokenIssuanceDestroy/test/MPTokenIssuanceDestroySimple.test.jsx @@ -0,0 +1,29 @@ +import { createSimpleWrapperFactory } from '../../test/createWrapperFactory' +import { Simple } from '../Simple' +import { expectSimpleRowText } from '../../test' +import transactionSuccess from './mock_data/MPTokenIssuanceDestroy.json' +import transactionFail from './mock_data/MPTokenIssuanceDestroy_Fail.json' + +const createWrapper = createSimpleWrapperFactory(Simple) + +describe('MPTokenIssuanceDestroy', () => { + it('handles MPTokenIssuanceDestroy simple view ', () => { + const wrapper = createWrapper(transactionSuccess) + expectSimpleRowText( + wrapper, + 'mpt-issuance-id', + '0000071E15A457415B9A921957CA1958F0E3B8A049BE8627', + ) + wrapper.unmount() + }) + + it('handles failed MPTokenIssuanceDestroy simple view ', () => { + const wrapper = createWrapper(transactionFail) + expectSimpleRowText( + wrapper, + 'mpt-issuance-id', + '0000097E2ACB52C693EABBB156034140B2ED5E9522C4ACF4', + ) + wrapper.unmount() + }) +}) diff --git a/src/containers/shared/components/Transaction/MPTokenIssuanceDestroy/test/mock_data/MPTokenIssuanceDestroy.json b/src/containers/shared/components/Transaction/MPTokenIssuanceDestroy/test/mock_data/MPTokenIssuanceDestroy.json new file mode 100644 index 000000000..3ac12863b --- /dev/null +++ b/src/containers/shared/components/Transaction/MPTokenIssuanceDestroy/test/mock_data/MPTokenIssuanceDestroy.json @@ -0,0 +1,76 @@ +{ + "tx": { + "Account": "rpyShdZBMVC9p6tesouh97JEEWZgYGYTW1", + "Fee": "10", + "Flags": 2147483648, + "MPTokenIssuanceID": "0000071E15A457415B9A921957CA1958F0E3B8A049BE8627", + "Sequence": 1823, + "SigningPubKey": "ED31ED6E308C928DA72935A03526C3C5422353EB686908D3ADAD9D573921DBDFB5", + "TransactionType": "MPTokenIssuanceDestroy", + "TxnSignature": "432417F93E86710B50619E4B9EAA43A7F636546A70D4A854E619AF01108A400519A4022B7BABE4807263CDD7EB43217B9ABB8F9745B988981B1A556D11C83200", + "ctid": "C000072100000000", + "date": 1710968140000, + "hash": "undefined", + "inLedger": "undefined", + "ledger_index": "undefined", + "meta": "undefined", + "validated": "undefined", + "metaData": "undefined", + "status": "undefined" + }, + "meta": { + "AffectedNodes": [ + { + "ModifiedNode": { + "FinalFields": { + "Account": "rpyShdZBMVC9p6tesouh97JEEWZgYGYTW1", + "Balance": "99999980", + "Flags": 0, + "OwnerCount": 0, + "Sequence": 1824 + }, + "LedgerEntryType": "AccountRoot", + "LedgerIndex": "27F062565B9B9226F10C5AA25E1AD5C3E70A6A93FF2AB4851614A2C43D083850", + "PreviousFields": { + "Balance": "99999990", + "OwnerCount": 1, + "Sequence": 1823 + }, + "PreviousTxnID": "E6DFD28EDD7213F43B7D0DB1296D09460458709583BEEA29F17C2F63B4DA9FC4", + "PreviousTxnLgrSeq": 1824 + } + }, + { + "DeletedNode": { + "FinalFields": { + "Flags": 0, + "Issuer": "rpyShdZBMVC9p6tesouh97JEEWZgYGYTW1", + "OutstandingAmount": "0", + "OwnerNode": "0", + "PreviousTxnID": "E6DFD28EDD7213F43B7D0DB1296D09460458709583BEEA29F17C2F63B4DA9FC4", + "PreviousTxnLgrSeq": 1824, + "Sequence": 1822 + }, + "LedgerEntryType": "MPTokenIssuance", + "LedgerIndex": "9C882DA4DF7B92FC968A0ADCA8BAFB7842264F98A5E147348C6E6077EAB24AA8" + } + }, + { + "DeletedNode": { + "FinalFields": { + "Flags": 0, + "Owner": "rpyShdZBMVC9p6tesouh97JEEWZgYGYTW1", + "RootIndex": "B8124B2AD6A85560C73E1748E2C8B0E5C0871F4439F10B042DD7E4017D864287" + }, + "LedgerEntryType": "DirectoryNode", + "LedgerIndex": "B8124B2AD6A85560C73E1748E2C8B0E5C0871F4439F10B042DD7E4017D864287" + } + } + ], + "TransactionIndex": 0, + "TransactionResult": "tesSUCCESS" + }, + "hash": "9EB556D18BFB67F31C8716C7F3CBBB070E1E7B120DEDDC423D25DFAD850BD93A", + "ledger_index": 1825, + "date": 1710968140000 +} diff --git a/src/containers/shared/components/Transaction/MPTokenIssuanceDestroy/test/mock_data/MPTokenIssuanceDestroy_Fail.json b/src/containers/shared/components/Transaction/MPTokenIssuanceDestroy/test/mock_data/MPTokenIssuanceDestroy_Fail.json new file mode 100644 index 000000000..88b5cc651 --- /dev/null +++ b/src/containers/shared/components/Transaction/MPTokenIssuanceDestroy/test/mock_data/MPTokenIssuanceDestroy_Fail.json @@ -0,0 +1,49 @@ +{ + "tx": { + "Account": "rJbNXmT1uhmbghSQAFcgxAAN9yCRCu9y7g", + "Fee": "10", + "Flags": 2147483648, + "MPTokenIssuanceID": "0000097E2ACB52C693EABBB156034140B2ED5E9522C4ACF4", + "Sequence": 2431, + "SigningPubKey": "EDF5A4F08EDD12BB89658B8DE56558600342AD92D42FEDFAD682F4DAD9647EF5AA", + "TransactionType": "MPTokenIssuanceDestroy", + "TxnSignature": "C3B5F7D9A21A5EF85663058790DE7F458EA903C0010F3C2E1FEA45647052C2D85231ED4C17EB324A97AC2D4DE9A71F46D277B8A0A7AFB42D30A3EDA42E8E4106", + "ctid": "C000098100000000", + "date": 1710970247000, + "hash": "undefined", + "inLedger": "undefined", + "ledger_index": "undefined", + "meta": "undefined", + "validated": "undefined", + "metaData": "undefined", + "status": "undefined" + }, + "meta": { + "AffectedNodes": [ + { + "ModifiedNode": { + "FinalFields": { + "Account": "rJbNXmT1uhmbghSQAFcgxAAN9yCRCu9y7g", + "Balance": "99999990", + "Flags": 0, + "OwnerCount": 0, + "Sequence": 2432 + }, + "LedgerEntryType": "AccountRoot", + "LedgerIndex": "BA6DF5388FF6BF026D3F8C91893534890F87309A32D30749CC70BCB1C6F1BEF6", + "PreviousFields": { + "Balance": "100000000", + "Sequence": 2431 + }, + "PreviousTxnID": "07F74CD4BD3E54410E436F9895BC2EC98D35E05F7584CB95D6660AF0411E9283", + "PreviousTxnLgrSeq": 2431 + } + } + ], + "TransactionIndex": 0, + "TransactionResult": "tecNO_PERMISSION" + }, + "hash": "2F31C86C343B2D2DB3D8B01BDE84E5BFA0BCB86321365A16D93DF806B79B16FD", + "ledger_index": 2433, + "date": 1710970247000 +} diff --git a/src/containers/shared/components/Transaction/MPTokenIssuanceDestroy/types.ts b/src/containers/shared/components/Transaction/MPTokenIssuanceDestroy/types.ts new file mode 100644 index 000000000..db9b812f9 --- /dev/null +++ b/src/containers/shared/components/Transaction/MPTokenIssuanceDestroy/types.ts @@ -0,0 +1,5 @@ +import { TransactionCommonFields } from '../types' + +export interface MPTokenIssuanceDestroy extends TransactionCommonFields { + MPTokenIssuanceID: string +} diff --git a/src/containers/shared/components/Transaction/MPTokenIssuanceSet/Simple.tsx b/src/containers/shared/components/Transaction/MPTokenIssuanceSet/Simple.tsx new file mode 100644 index 000000000..9f0b13ca8 --- /dev/null +++ b/src/containers/shared/components/Transaction/MPTokenIssuanceSet/Simple.tsx @@ -0,0 +1,26 @@ +import { useTranslation } from 'react-i18next' +import { SimpleRow } from '../SimpleRow' +import { TransactionSimpleComponent, TransactionSimpleProps } from '../types' +import { MPTokenIssuanceSet } from './types' +import { Account } from '../../Account' +import { MPTokenLink } from '../../MPTokenLink' + +export const Simple: TransactionSimpleComponent = ({ + data, +}: TransactionSimpleProps<MPTokenIssuanceSet>) => { + const { MPTokenIssuanceID, MPTokenHolder } = data.instructions + const { t } = useTranslation() + + return ( + <> + <SimpleRow label={t('mpt_issuance_id')} data-test="mpt-issuance-id"> + <MPTokenLink tokenID={MPTokenIssuanceID} /> + </SimpleRow> + {MPTokenHolder && ( + <SimpleRow label={t('mpt_holder')} data-test="mpt-holder"> + <Account account={MPTokenHolder} /> + </SimpleRow> + )} + </> + ) +} diff --git a/src/containers/shared/components/Transaction/MPTokenIssuanceSet/index.ts b/src/containers/shared/components/Transaction/MPTokenIssuanceSet/index.ts new file mode 100644 index 000000000..acbe8d389 --- /dev/null +++ b/src/containers/shared/components/Transaction/MPTokenIssuanceSet/index.ts @@ -0,0 +1,13 @@ +import { + TransactionAction, + TransactionCategory, + TransactionMapping, +} from '../types' + +import { Simple } from './Simple' + +export const MPTokenIssuanceSetTransaction: TransactionMapping = { + Simple, + action: TransactionAction.MODIFY, + category: TransactionCategory.MPT, +} diff --git a/src/containers/shared/components/Transaction/MPTokenIssuanceSet/test/MPTokenIssuanceSetSimple.test.jsx b/src/containers/shared/components/Transaction/MPTokenIssuanceSet/test/MPTokenIssuanceSetSimple.test.jsx new file mode 100644 index 000000000..2083e158c --- /dev/null +++ b/src/containers/shared/components/Transaction/MPTokenIssuanceSet/test/MPTokenIssuanceSetSimple.test.jsx @@ -0,0 +1,53 @@ +import { createSimpleWrapperFactory } from '../../test/createWrapperFactory' +import { Simple } from '../Simple' +import { expectSimpleRowText, expectSimpleRowNotToExist } from '../../test' +import transactionSuccess from './mock_data/MPTokenIssuanceSet.json' +import transactionNoHolder from './mock_data/MPTokenIssuanceSet_NoHolder.json' +import transactionFail from './mock_data/MPTokenIssuanceSet_Fail.json' + +const createWrapper = createSimpleWrapperFactory(Simple) + +describe('MPTokenIssuanceSet', () => { + it('handles MPTokenIssuanceSet simple view ', () => { + const wrapper = createWrapper(transactionSuccess) + + expectSimpleRowText( + wrapper, + 'mpt-issuance-id', + '00000BED9E4ADA3DCC1BE78683C4B623A74013818160590C', + ) + expectSimpleRowText( + wrapper, + 'mpt-holder', + 'r9hF4e3e6kLuxLobPwfQa2wzXZMDvBDeUg', + ) + wrapper.unmount() + }) + + it('handles MPTokenIssuanceSet simple view w/o holder ', () => { + const wrapper = createWrapper(transactionNoHolder) + + expectSimpleRowText( + wrapper, + 'mpt-issuance-id', + '000002609BB39CEC721B5AB337B6BD862ACD2811CBBB5F18', + ) + expectSimpleRowNotToExist(wrapper, 'mpt-holder') + wrapper.unmount() + }) + + it('handles failed MPTokenIssuanceSet simple view ', () => { + const wrapper = createWrapper(transactionFail) + expectSimpleRowText( + wrapper, + 'mpt-issuance-id', + '00000F83146C83112AED215CD345F8E7327459BFCF6B8062', + ) + expectSimpleRowText( + wrapper, + 'mpt-holder', + 'rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh', + ) + wrapper.unmount() + }) +}) diff --git a/src/containers/shared/components/Transaction/MPTokenIssuanceSet/test/mock_data/MPTokenIssuanceSet.json b/src/containers/shared/components/Transaction/MPTokenIssuanceSet/test/mock_data/MPTokenIssuanceSet.json new file mode 100644 index 000000000..e78513a6c --- /dev/null +++ b/src/containers/shared/components/Transaction/MPTokenIssuanceSet/test/mock_data/MPTokenIssuanceSet.json @@ -0,0 +1,67 @@ +{ + "tx": { + "Account": "rERyS9qtwky94UMMjjmbku3uo5aQwAoJ58", + "Fee": "10", + "Flags": 1, + "MPTokenHolder": "r9hF4e3e6kLuxLobPwfQa2wzXZMDvBDeUg", + "MPTokenIssuanceID": "00000BED9E4ADA3DCC1BE78683C4B623A74013818160590C", + "Sequence": 3054, + "SigningPubKey": "EDF73A1C528F5BFBD6FF2B05D0C71760D7D2DF1DE3496935612E47BCB440F28040", + "TransactionType": "MPTokenIssuanceSet", + "TxnSignature": "5BC9ABE91A10F86440E301F17DFADD08D2E55E0699441372BE73D843B4481869BD6224ED461BC4F9894E97F1F99562D3CF2CD1A4E991BD7993DC24EDA63F5B05", + "ctid": "C0000BF100000000", + "date": 1711047580000, + "hash": "undefined", + "inLedger": "undefined", + "ledger_index": "undefined", + "meta": "undefined", + "validated": "undefined", + "metaData": "undefined", + "status": "undefined" + }, + "meta": { + "AffectedNodes": [ + { + "ModifiedNode": { + "FinalFields": { + "Account": "r9hF4e3e6kLuxLobPwfQa2wzXZMDvBDeUg", + "Flags": 1, + "MPTokenIssuanceID": "00000BED9E4ADA3DCC1BE78683C4B623A74013818160590C", + "OwnerNode": "0" + }, + "LedgerEntryType": "MPToken", + "LedgerIndex": "DDA698915F22D7CEA45896CB70DCC0DF803E1F573B92B6F0178F1688208EED04", + "PreviousFields": { + "Flags": 0 + }, + "PreviousTxnID": "39709CA66D9103354D09070234A14253EC779846BB73477EEB21C5A65144C844", + "PreviousTxnLgrSeq": 3056 + } + }, + { + "ModifiedNode": { + "FinalFields": { + "Account": "rERyS9qtwky94UMMjjmbku3uo5aQwAoJ58", + "Balance": "99999980", + "Flags": 0, + "OwnerCount": 1, + "Sequence": 3055 + }, + "LedgerEntryType": "AccountRoot", + "LedgerIndex": "EDD52DA05DAB16BAF6A3B7D47CCB9FEAB7AAC2BDD9CB007F6A3B8E0DBCE50A45", + "PreviousFields": { + "Balance": "99999990", + "Sequence": 3054 + }, + "PreviousTxnID": "41A99F7E107F813C132B105AB930FD8C6960530DDFA5D98FCEF5A5600DA39D38", + "PreviousTxnLgrSeq": 3055 + } + } + ], + "TransactionIndex": 0, + "TransactionResult": "tesSUCCESS" + }, + "hash": "4993E5B875E0217ABC92EFC395805F1344D8A9A3D75437EEA457C05EDB3AB20B", + "ledger_index": 3057, + "date": 1711047580000 +} diff --git a/src/containers/shared/components/Transaction/MPTokenIssuanceSet/test/mock_data/MPTokenIssuanceSet_Fail.json b/src/containers/shared/components/Transaction/MPTokenIssuanceSet/test/mock_data/MPTokenIssuanceSet_Fail.json new file mode 100644 index 000000000..60062ffc1 --- /dev/null +++ b/src/containers/shared/components/Transaction/MPTokenIssuanceSet/test/mock_data/MPTokenIssuanceSet_Fail.json @@ -0,0 +1,50 @@ +{ + "tx": { + "Account": "rpizWPf4g8JLWFUT7143Zn9A1n2Dy9bnji", + "Fee": "10", + "Flags": 1, + "MPTokenHolder": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", + "MPTokenIssuanceID": "00000F83146C83112AED215CD345F8E7327459BFCF6B8062", + "Sequence": 3972, + "SigningPubKey": "ED4EC06184C745D99AEAAA16526C900DC181C8546899F462C3D105C11A6677A65A", + "TransactionType": "MPTokenIssuanceSet", + "TxnSignature": "2A9D1795983016A162F05CEBBD35E65B955BD67AB96B8A2DB2E31027EA67DDF082B1C4D67F9219CBF9893520ACB0ACB80E2ED3CE96496AA4668BCCF4A46EAE0A", + "ctid": "C0000F8700000000", + "date": 1711048704000, + "hash": "undefined", + "inLedger": "undefined", + "ledger_index": "undefined", + "meta": "undefined", + "validated": "undefined", + "metaData": "undefined", + "status": "undefined" + }, + "meta": { + "AffectedNodes": [ + { + "ModifiedNode": { + "FinalFields": { + "Account": "rpizWPf4g8JLWFUT7143Zn9A1n2Dy9bnji", + "Balance": "99999980", + "Flags": 0, + "OwnerCount": 1, + "Sequence": 3973 + }, + "LedgerEntryType": "AccountRoot", + "LedgerIndex": "F937A006AB86775D475946D43BA1612F3BC24A2C144550D4EC0266C2F08303D5", + "PreviousFields": { + "Balance": "99999990", + "Sequence": 3972 + }, + "PreviousTxnID": "8D322CBF8A965E64FB903551C80A2E1DF9E2480A7AD0B1D98BE56574BC9FE215", + "PreviousTxnLgrSeq": 3973 + } + } + ], + "TransactionIndex": 0, + "TransactionResult": "tecOBJECT_NOT_FOUND" + }, + "hash": "E47D5242B7E210B9E1DAEFF90DC19DA9310C04CF4444C76F2C76A44533EEC48F", + "ledger_index": 3975, + "date": 1711048704000 +} diff --git a/src/containers/shared/components/Transaction/MPTokenIssuanceSet/test/mock_data/MPTokenIssuanceSet_NoHolder.json b/src/containers/shared/components/Transaction/MPTokenIssuanceSet/test/mock_data/MPTokenIssuanceSet_NoHolder.json new file mode 100644 index 000000000..165596d2a --- /dev/null +++ b/src/containers/shared/components/Transaction/MPTokenIssuanceSet/test/mock_data/MPTokenIssuanceSet_NoHolder.json @@ -0,0 +1,67 @@ +{ + "tx": { + "Account": "rEUGuTqrySk9o1rZSVx8seuvcsEZymeEYM", + "Fee": "10", + "Flags": 1, + "MPTokenIssuanceID": "000002609BB39CEC721B5AB337B6BD862ACD2811CBBB5F18", + "Sequence": 609, + "SigningPubKey": "ED92DDE49AA689EC63589623067968B85E4885A9874B3CAB89E07D192EBFA42FF9", + "TransactionType": "MPTokenIssuanceSet", + "TxnSignature": "6678BF017A62360DAA39156112960D934440467D2E4098958F053B6758A2D237DA82CD27FDA3B35BAB610D74669BF6C4DEB12D77984E48158B2D79C8BAEC3303", + "ctid": "C000026400000000", + "date": 1711133159000, + "hash": "undefined", + "inLedger": "undefined", + "ledger_index": "undefined", + "meta": "undefined", + "validated": "undefined", + "metaData": "undefined", + "status": "undefined" + }, + "meta": { + "AffectedNodes": [ + { + "ModifiedNode": { + "FinalFields": { + "Account": "rEUGuTqrySk9o1rZSVx8seuvcsEZymeEYM", + "Balance": "99999980", + "Flags": 0, + "OwnerCount": 1, + "Sequence": 610 + }, + "LedgerEntryType": "AccountRoot", + "LedgerIndex": "1D54D263727856612FC7C7A27D93532ED0C41B74FA651992C125AD19C900669D", + "PreviousFields": { + "Balance": "99999990", + "Sequence": 609 + }, + "PreviousTxnID": "CF68A8D929F089F6F53B071250935DD7C3F52F6E175D82E53118265D776D4BF7", + "PreviousTxnLgrSeq": 610 + } + }, + { + "ModifiedNode": { + "FinalFields": { + "Flags": 35, + "Issuer": "rEUGuTqrySk9o1rZSVx8seuvcsEZymeEYM", + "OutstandingAmount": "0", + "OwnerNode": "0", + "Sequence": 608 + }, + "LedgerEntryType": "MPTokenIssuance", + "LedgerIndex": "E8DF796110B1FBD9086A4637491E49843D33D897FBC32F03A33140F76378EE86", + "PreviousFields": { + "Flags": 34 + }, + "PreviousTxnID": "CF68A8D929F089F6F53B071250935DD7C3F52F6E175D82E53118265D776D4BF7", + "PreviousTxnLgrSeq": 610 + } + } + ], + "TransactionIndex": 0, + "TransactionResult": "tesSUCCESS" + }, + "hash": "73C21D8B5DFBF5DE03FCAF0D69C00E9E2918280561E9898C556A1C743A566D47", + "ledger_index": 612, + "date": 1711133159000 +} diff --git a/src/containers/shared/components/Transaction/MPTokenIssuanceSet/types.ts b/src/containers/shared/components/Transaction/MPTokenIssuanceSet/types.ts new file mode 100644 index 000000000..5e15d49e8 --- /dev/null +++ b/src/containers/shared/components/Transaction/MPTokenIssuanceSet/types.ts @@ -0,0 +1,6 @@ +import { TransactionCommonFields } from '../types' + +export interface MPTokenIssuanceSet extends TransactionCommonFields { + MPTokenIssuanceID: string + MPTokenHolder?: string +} diff --git a/src/containers/shared/components/Transaction/NFTokenAcceptOffer/types.ts b/src/containers/shared/components/Transaction/NFTokenAcceptOffer/types.ts index 249a9632d..5091a827e 100644 --- a/src/containers/shared/components/Transaction/NFTokenAcceptOffer/types.ts +++ b/src/containers/shared/components/Transaction/NFTokenAcceptOffer/types.ts @@ -1,6 +1,8 @@ +import { ExplorerAmount } from '../../../types' + export interface NFTokenAcceptOfferInstructions { acceptedOfferIDs: string[] - amount?: { currency: string; amount: number; issuer?: string } + amount?: ExplorerAmount tokenID?: string seller?: string buyer?: string diff --git a/src/containers/shared/components/Transaction/NFTokenCancelOffer/test/NFTokenCancelOfferSimple.test.jsx b/src/containers/shared/components/Transaction/NFTokenCancelOffer/test/NFTokenCancelOfferSimple.test.jsx index b16576254..ec58e6280 100644 --- a/src/containers/shared/components/Transaction/NFTokenCancelOffer/test/NFTokenCancelOfferSimple.test.jsx +++ b/src/containers/shared/components/Transaction/NFTokenCancelOffer/test/NFTokenCancelOfferSimple.test.jsx @@ -1,21 +1,25 @@ import { BrowserRouter as Router } from 'react-router-dom' import { mount } from 'enzyme' import { I18nextProvider } from 'react-i18next' +import { QueryClientProvider } from 'react-query' import { Simple as NFTokenCancelOffer } from '../Simple' import transaction from './mock_data/NFTokenCancelOffer.json' import summarizeTransaction from '../../../../../../rippled/lib/txSummary' import i18n from '../../../../../../i18n/testConfig' +import { queryClient } from '../../../../QueryClient' describe('NFTokenCancelOffer', () => { it.only('handles NFTokenCancelOffer simple view ', () => { const wrapper = mount( - <I18nextProvider i18n={i18n}> - <Router> - <NFTokenCancelOffer - data={summarizeTransaction(transaction, true).details} - /> - </Router> - </I18nextProvider>, + <QueryClientProvider client={queryClient}> + <I18nextProvider i18n={i18n}> + <Router> + <NFTokenCancelOffer + data={summarizeTransaction(transaction, true).details} + /> + </Router> + </I18nextProvider> + </QueryClientProvider>, ) expect(wrapper.find('[data-test="token-id"] .value')).toHaveText( '000800006203F49C21D5D6E022CB16DE3538F248662FC73C258BA1B200000018', diff --git a/src/containers/shared/components/Transaction/NFTokenCreateOffer/types.ts b/src/containers/shared/components/Transaction/NFTokenCreateOffer/types.ts index 624c2dc47..e25ed0359 100644 --- a/src/containers/shared/components/Transaction/NFTokenCreateOffer/types.ts +++ b/src/containers/shared/components/Transaction/NFTokenCreateOffer/types.ts @@ -1,6 +1,8 @@ +import { ExplorerAmount } from '../../../types' + export interface NFTokenCreateOfferInstructions { account: string - amount: { currency: string; amount: number; issuer?: string } + amount: ExplorerAmount tokenID: string isSellOffer: boolean owner?: string diff --git a/src/containers/shared/components/Transaction/OfferCreate/parser.ts b/src/containers/shared/components/Transaction/OfferCreate/parser.ts index e895c2b5c..238bfd6a5 100644 --- a/src/containers/shared/components/Transaction/OfferCreate/parser.ts +++ b/src/containers/shared/components/Transaction/OfferCreate/parser.ts @@ -6,7 +6,7 @@ export function parser(tx: any) { const base = tx.TakerGets.currency ? tx.TakerGets : { currency: 'XRP' } const counter = tx.TakerPays.currency ? tx.TakerPays : { currency: 'XRP' } const pays = formatAmount(tx.TakerPays) - const price = pays.amount / gets.amount + const price = Number(pays.amount) / Number(gets.amount) const invert = CURRENCY_ORDER.indexOf(counter.currency) > CURRENCY_ORDER.indexOf(base.currency) diff --git a/src/containers/shared/components/Transaction/OracleSet/parser.ts b/src/containers/shared/components/Transaction/OracleSet/parser.ts index bca503f5f..b27a3ba04 100644 --- a/src/containers/shared/components/Transaction/OracleSet/parser.ts +++ b/src/containers/shared/components/Transaction/OracleSet/parser.ts @@ -1,19 +1,6 @@ import { convertHexToString } from '../../../../../rippled/lib/utils' import { OracleSet } from './types' - -// Convert scaled price (assetPrice) to original price using formula: -// originalPrice = assetPrice / 10**scale -// More details: https://github.com/XRPLF/XRPL-Standards/tree/master/XLS-47d-PriceOracles -export function convertScaledPrice(assetPrice: string, scale: number) { - const scaledPriceInBigInt = BigInt(`0x${assetPrice}`) - const divisor = BigInt(10 ** scale) - const integerPart = scaledPriceInBigInt / divisor - const remainder = scaledPriceInBigInt % divisor - const fractionalPart = (remainder * BigInt(10 ** scale)) / divisor - return fractionalPart > 0 - ? `${integerPart}.${fractionalPart.toString().padStart(scale, '0')}` - : `${integerPart}` -} +import { convertScaledPrice } from '../../../utils' export function parser(tx: OracleSet) { const priceDataSeries = tx.PriceDataSeries.map((priceDataObj) => ({ diff --git a/src/containers/shared/components/Transaction/OracleSet/test/ConvertScalePrice.test.ts b/src/containers/shared/components/Transaction/OracleSet/test/ConvertScalePrice.test.ts index 984c63e2b..2437a40c9 100644 --- a/src/containers/shared/components/Transaction/OracleSet/test/ConvertScalePrice.test.ts +++ b/src/containers/shared/components/Transaction/OracleSet/test/ConvertScalePrice.test.ts @@ -1,4 +1,4 @@ -import { convertScaledPrice } from '../parser' +import { convertScaledPrice } from '../../../../utils' const numberToHex = (number) => number.toString(16) describe('convertScaledPrice', () => { diff --git a/src/containers/shared/components/Transaction/Payment/parser.ts b/src/containers/shared/components/Transaction/Payment/parser.ts index 743c05367..57dc16157 100644 --- a/src/containers/shared/components/Transaction/Payment/parser.ts +++ b/src/containers/shared/components/Transaction/Payment/parser.ts @@ -1,4 +1,4 @@ -import type { Payment } from 'xrpl' +// import type { Payment } from 'xrpl' import { formatAmount } from '../../../../../rippled/lib/txSummary/formatAmount' import { PaymentInstructions } from './types' import { Amount, ExplorerAmount } from '../../../types' @@ -10,7 +10,8 @@ const formatFailedPartialAmount = (d: Amount): ExplorerAmount => ({ export const isPartialPayment = (flags: any) => 0x00020000 & flags -export const parser = (tx: Payment, meta: any): PaymentInstructions => { +// TODO: use MPTAmount type from xrpl.js +export const parser = (tx: any, meta: any): PaymentInstructions => { const max = tx.SendMax ? formatAmount(tx.SendMax) : undefined const partial = !!isPartialPayment(tx.Flags) const failedPartial = partial && meta.TransactionResult !== 'tesSUCCESS' diff --git a/src/containers/shared/components/Transaction/Payment/test/PaymentSimple.test.tsx b/src/containers/shared/components/Transaction/Payment/test/PaymentSimple.test.tsx index 60c9ab4b3..5166c919f 100644 --- a/src/containers/shared/components/Transaction/Payment/test/PaymentSimple.test.tsx +++ b/src/containers/shared/components/Transaction/Payment/test/PaymentSimple.test.tsx @@ -1,3 +1,4 @@ +import { useQuery } from 'react-query' import { createSimpleWrapperFactory, expectSimpleRowLabel, @@ -10,6 +11,12 @@ import mockPaymentDestinationTag from './mock_data/PaymentWithDestinationTag.jso import mockPaymentPartial from './mock_data/PaymentWithPartial.json' import mockPaymentSendMax from './mock_data/PaymentWithSendMax.json' import mockPaymentSourceTag from './mock_data/PaymentWithSourceTag.json' +import mockPaymentMPT from './mock_data/PaymentMPT.json' + +jest.mock('react-query', () => ({ + ...jest.requireActual('react-query'), + useQuery: jest.fn(), +})) const createWrapper = createSimpleWrapperFactory(Simple) @@ -114,4 +121,32 @@ describe('Payment: Simple', () => { wrapper.unmount() }) + + it('renders direct MPT payment', () => { + const data = { + assetScale: 3, + } + + // @ts-ignore + useQuery.mockImplementation(() => ({ + data, + })) + + const wrapper = createWrapper(mockPaymentMPT) + + expectSimpleRowText( + wrapper, + 'amount', + `0.1 MPT (000003C31D321B7DDA58324DC38CDF18934FAFFFCDF69D5F)`, + ) + expectSimpleRowLabel(wrapper, 'amount', `send`) + + expectSimpleRowText( + wrapper, + 'destination', + `rw6UtpfBFaGht6SiC1HpDPNw6Yt25pKvnu`, + ) + + wrapper.unmount() + }) }) diff --git a/src/containers/shared/components/Transaction/Payment/test/mock_data/PaymentMPT.json b/src/containers/shared/components/Transaction/Payment/test/mock_data/PaymentMPT.json new file mode 100644 index 000000000..d35339b88 --- /dev/null +++ b/src/containers/shared/components/Transaction/Payment/test/mock_data/PaymentMPT.json @@ -0,0 +1,91 @@ +{ + "tx": { + "Account": "rsC4dnxCb66FQT4XmCUeuQ7dYeqNio4rWg", + "Amount": { + "mpt_issuance_id": "000003C31D321B7DDA58324DC38CDF18934FAFFFCDF69D5F", + "value": "100" + }, + "DeliverMax": { + "mpt_issuance_id": "000003C31D321B7DDA58324DC38CDF18934FAFFFCDF69D5F", + "value": "100" + }, + "Destination": "rw6UtpfBFaGht6SiC1HpDPNw6Yt25pKvnu", + "Fee": "10", + "Flags": 2147483648, + "Sequence": 964, + "SigningPubKey": "ED35B07F41420220332C35B9F4D1F7AF26E67EBD5AD6C9E106D0F774DA15924169", + "TransactionType": "Payment", + "TxnSignature": "2C5CB9740457222F928667DC1196060EF7E61B4E3A8824727AE63ACCFDE35ED5CBEE69E982423592DF0464C57C2C445B4271573DE7A3346630024287844F2502", + "ctid": "C00003C900000000", + "date": 1727802036000 + }, + "meta": { + "AffectedNodes": [ + { + "ModifiedNode": { + "FinalFields": { + "AssetScale": 3, + "Flags": 34, + "Issuer": "rsC4dnxCb66FQT4XmCUeuQ7dYeqNio4rWg", + "MPTokenMetadata": "7B226E616D65223A2255532054726561737572792042696C6C20546F6B656E222C2273796D626F6C223A225553544254222C22646563696D616C73223A322C22746F74616C537570706C79223A313030303030302C22697373756572223A225553205472656173757279222C22697373756544617465223A22323032342D30332D3235222C226D6174757269747944617465223A22323032352D30332D3235222C226661636556616C7565223A2231303030222C22696E74657265737452617465223A22322E35222C22696E7465726573744672657175656E6379223A22517561727465726C79222C22636F6C6C61746572616C223A22555320476F7665726E6D656E74222C226A7572697364696374696F6E223A22556E6974656420537461746573222C22726567756C61746F7279436F6D706C69616E6365223A2253454320526567756C6174696F6E73222C22736563757269747954797065223A2254726561737572792042696C6C222C2265787465726E616C5F75726C223A2268747470733A2F2F6578616D706C652E636F6D2F742D62696C6C2D746F6B656E2D6D657461646174612E6A736F6E227D", + "MaximumAmount": "9223372036854775807", + "OutstandingAmount": "100", + "OwnerNode": "0", + "Sequence": 963 + }, + "LedgerEntryType": "MPTokenIssuance", + "LedgerIndex": "1CFF89335B544E0D6EEC35D74C0D26FF407DC02670F1C4E35A36CC875D34B1C3", + "PreviousFields": { + "OutstandingAmount": "0" + }, + "PreviousTxnID": "6329586F264E4A6E2224318DCFC9B5F28048D84060B78A92CFFE65840DF8D970", + "PreviousTxnLgrSeq": 966 + } + }, + { + "ModifiedNode": { + "FinalFields": { + "Account": "rw6UtpfBFaGht6SiC1HpDPNw6Yt25pKvnu", + "Flags": 0, + "MPTAmount": "100", + "MPTokenIssuanceID": "000003C31D321B7DDA58324DC38CDF18934FAFFFCDF69D5F", + "OwnerNode": "0" + }, + "LedgerEntryType": "MPToken", + "LedgerIndex": "3BAA73912496683A414494218D3CCA33D02F80D588F80C1257C691448E00E486", + "PreviousFields": {}, + "PreviousTxnID": "60F99C8A23C4A366D19F43EA4BD43414AD4D4B7C21D0228FB7539D1C893E4A74", + "PreviousTxnLgrSeq": 967 + } + }, + { + "ModifiedNode": { + "FinalFields": { + "Account": "rsC4dnxCb66FQT4XmCUeuQ7dYeqNio4rWg", + "Balance": "99999980", + "Flags": 0, + "OwnerCount": 1, + "Sequence": 965 + }, + "LedgerEntryType": "AccountRoot", + "LedgerIndex": "77ECC02B8A7F16EB19A7BFBE8494E959497B4EC7734088583BD4F6B8C82878A5", + "PreviousFields": { + "Balance": "99999990", + "Sequence": 964 + }, + "PreviousTxnID": "6329586F264E4A6E2224318DCFC9B5F28048D84060B78A92CFFE65840DF8D970", + "PreviousTxnLgrSeq": 966 + } + } + ], + "TransactionIndex": 0, + "TransactionResult": "tesSUCCESS", + "delivered_amount": { + "mpt_issuance_id": "000003C31D321B7DDA58324DC38CDF18934FAFFFCDF69D5F", + "value": "100" + } + }, + "hash": "CD9EC015E68D3027919598E0466CFEF19950D0BC688A568DF8822A8BB0AFF98F", + "ledger_index": 11707, + "date": 1712072515000 +} diff --git a/src/containers/shared/components/Transaction/index.ts b/src/containers/shared/components/Transaction/index.ts index babf265fc..c483a22cb 100644 --- a/src/containers/shared/components/Transaction/index.ts +++ b/src/containers/shared/components/Transaction/index.ts @@ -9,6 +9,10 @@ import { AccountSetTransaction as AccountSet } from './AccountSet' import { DIDSetTransaction as DIDSet } from './DIDSet' import { DepositPreauthTransaction as DepositPreauth } from './DepositPreauth' import { EnableAmendmentTransaction as EnableAmendment } from './EnableAmendment' +import { MPTokenAuthorizeTransaction as MPTokenAuthorize } from './MPTokenAuthorize' +import { MPTokenIssuanceCreateTransaction as MPTokenIssuanceCreate } from './MPTokenIssuanceCreate' +import { MPTokenIssuanceDestroyTransaction as MPTokenIssuanceDestroy } from './MPTokenIssuanceDestroy' +import { MPTokenIssuanceSetTransaction as MPTokenIssuanceSet } from './MPTokenIssuanceSet' import { NFTokenMintTransaction as NFTokenMint } from './NFTokenMint' import { NFTokenCancelOfferTransaction as NFTokenCancelOffer } from './NFTokenCancelOffer' import { NFTokenBurnTransaction as NFTokenBurn } from './NFTokenBurn' @@ -55,6 +59,10 @@ export const transactionTypes: { [key: string]: TransactionMapping } = { DIDSet, DepositPreauth, EnableAmendment, + MPTokenAuthorize, + MPTokenIssuanceCreate, + MPTokenIssuanceDestroy, + MPTokenIssuanceSet, NFTokenMint, NFTokenCancelOffer, NFTokenBurn, diff --git a/src/containers/shared/components/Transaction/test/createWrapperFactory.tsx b/src/containers/shared/components/Transaction/test/createWrapperFactory.tsx index 709d242ee..9c93c4a01 100644 --- a/src/containers/shared/components/Transaction/test/createWrapperFactory.tsx +++ b/src/containers/shared/components/Transaction/test/createWrapperFactory.tsx @@ -3,6 +3,7 @@ import { ReactElement } from 'react' import { I18nextProvider } from 'react-i18next' import { BrowserRouter } from 'react-router-dom' import { i18n } from 'i18next' +import { QueryClientProvider } from 'react-query' import defaultI18nConfig from '../../../../../i18n/testConfig' import summarizeTransaction from '../../../../../rippled/lib/txSummary' import { @@ -10,6 +11,7 @@ import { TransactionSimpleComponent, TransactionTableDetailComponent, } from '../types' +import { testQueryClient } from '../../../../test/QueryClient' /** * Methods that produce createWrapper function for tests @@ -22,9 +24,11 @@ export function createWrapper( i18nConfig?: i18n, ): ReactWrapper { return mount( - <I18nextProvider i18n={i18nConfig || defaultI18nConfig}> - <BrowserRouter>{TestComponent}</BrowserRouter> - </I18nextProvider>, + <QueryClientProvider client={testQueryClient}> + <I18nextProvider i18n={i18nConfig || defaultI18nConfig}> + <BrowserRouter>{TestComponent}</BrowserRouter> + </I18nextProvider> + </QueryClientProvider>, ) } diff --git a/src/containers/shared/components/Transaction/types.ts b/src/containers/shared/components/Transaction/types.ts index d1154be4a..722687b69 100644 --- a/src/containers/shared/components/Transaction/types.ts +++ b/src/containers/shared/components/Transaction/types.ts @@ -8,6 +8,7 @@ export enum TransactionCategory { PAYMENT = 'PAYMENT', NFT = 'NFT', XCHAIN = 'XCHAIN', + MPT = 'MPT', PSEUDO = 'PSEUDO', UNKNOWN = 'UNKNOWN', } diff --git a/src/containers/shared/components/TransactionTable/test/TransactionTable.test.js b/src/containers/shared/components/TransactionTable/test/TransactionTable.test.js index 54517c301..734e4f0d5 100644 --- a/src/containers/shared/components/TransactionTable/test/TransactionTable.test.js +++ b/src/containers/shared/components/TransactionTable/test/TransactionTable.test.js @@ -1,9 +1,11 @@ import { mount } from 'enzyme' import { I18nextProvider } from 'react-i18next' import { BrowserRouter } from 'react-router-dom' +import { QueryClientProvider } from 'react-query' import { TransactionTable } from '../TransactionTable' import i18n from '../../../../../i18n/testConfig' import mockTx from './mockTransactions.json' +import { queryClient } from '../../../QueryClient' const loadMore = jest.fn() @@ -16,17 +18,19 @@ describe('Transaction Table container', () => { hasAdditionalResults = false, ) => mount( - <I18nextProvider i18n={i18n}> - <BrowserRouter> - <TransactionTable - transactions={transactions} - emptyMessage={emptyMessage} - loading={loading} - onLoadMore={onLoadMore} - hasAdditionalResults={hasAdditionalResults} - /> - </BrowserRouter> - </I18nextProvider>, + <QueryClientProvider client={queryClient}> + <I18nextProvider i18n={i18n}> + <BrowserRouter> + <TransactionTable + transactions={transactions} + emptyMessage={emptyMessage} + loading={loading} + onLoadMore={onLoadMore} + hasAdditionalResults={hasAdditionalResults} + /> + </BrowserRouter> + </I18nextProvider> + </QueryClientProvider>, ) it('renders without crashing', () => { diff --git a/src/containers/shared/components/test/Amount.test.tsx b/src/containers/shared/components/test/Amount.test.tsx index acbe14315..749f62033 100644 --- a/src/containers/shared/components/test/Amount.test.tsx +++ b/src/containers/shared/components/test/Amount.test.tsx @@ -1,9 +1,15 @@ import { I18nextProvider } from 'react-i18next' import { BrowserRouter } from 'react-router-dom' import { mount } from 'enzyme' +import { useQuery } from 'react-query' import { Amount } from '../Amount' import i18n from '../../../../i18n/testConfig' +jest.mock('react-query', () => ({ + ...jest.requireActual('react-query'), + useQuery: jest.fn(), +})) + describe('Amount', () => { const createWrapper = (component: JSX.Element) => mount( @@ -117,4 +123,34 @@ describe('Amount', () => { expect(wrapper.find('.amount-localized').text()).toEqual('+\uE9000.009') wrapper.unmount() }) + + it('handles MPT amount', async () => { + const data = { + issuer: 'rL2LzUhsBJMqsaVCXVvzedPjePbjVzBCC', + assetScale: 3, + maxAmt: '100000000', + outstandingAmt: '1043001', + sequence: 2447, + metadata: + '{"name":"US Treasury Bill Token","symbol":"USTBT","decimals":2,"totalSupply":1000000,"issuer":"US Treasury","issueDate":"2024-03-25","maturityDate":"2025-03-25","faceValue":"1000","interestRate":"2.5","interestFrequency":"Quarterly","collateral":"US Government","jurisdiction":"United States","regulatoryCompliance":"SEC Regulations","securityType":"Treasury Bill","external_url":"https://example.com/t-bill-token-metadata.json"}', + flags: [], + } + + // @ts-ignore + useQuery.mockImplementation(() => ({ + data, + })) + + const value = { + amount: '1043001', + currency: '0000098F03B3BCE934EE8CAA1DF25A42032388361B9E5A65', + isMPT: true, + } + const wrapper = createWrapper( + <Amount value={value} displayIssuer={false} />, + ) + + expect(wrapper.find('.amount-localized').text()).toEqual('1,043.001') + wrapper.unmount() + }) }) diff --git a/src/containers/shared/components/test/Currency.test.tsx b/src/containers/shared/components/test/Currency.test.tsx index e3d218090..8d7de259c 100644 --- a/src/containers/shared/components/test/Currency.test.tsx +++ b/src/containers/shared/components/test/Currency.test.tsx @@ -63,4 +63,26 @@ describe('Currency', () => { expect(wrapper.find('.currency').text()).toEqual('\uE900 XRP') wrapper.unmount() }) + + it('handles MPT ID ', () => { + const wrapper = mount( + <BrowserRouter> + <Currency + currency="00000BDE5B4F868ECE457207E2C1750065987730B8839E0D" + issuer="r9Kokzc4FC1BW81pDarodghf3n8w2vufhW" + isMPT + /> + </BrowserRouter>, + ) + const mpt = wrapper.find('.currency').at(0) + + expect(mpt).toHaveText( + 'MPT (00000BDE5B4F868ECE457207E2C1750065987730B8839E0D)', + ) + expect(mpt.find('a')).toHaveProp( + 'href', + '/mpt/00000BDE5B4F868ECE457207E2C1750065987730B8839E0D', + ) + wrapper.unmount() + }) }) diff --git a/src/containers/shared/css/global.scss b/src/containers/shared/css/global.scss index 327c74065..8d7bf9b0d 100644 --- a/src/containers/shared/css/global.scss +++ b/src/containers/shared/css/global.scss @@ -121,6 +121,7 @@ div.react-stockchart div { @include transaction-category(XCHAIN, $yellow, $yellow-30, $yellow-90); @include transaction-category(PSEUDO, $white, $white, $black-80); @include transaction-category(UNKNOWN, $black-50, $black-30, $black-90); +@include transaction-category(MPT, $blue, $blue-30, $blue-90); .tx-result { &.success { diff --git a/src/containers/shared/css/variables.scss b/src/containers/shared/css/variables.scss index a1987f372..91b259bed 100644 --- a/src/containers/shared/css/variables.scss +++ b/src/containers/shared/css/variables.scss @@ -120,6 +120,7 @@ $custom: $yellow-50; // Feature Sets $amm: $blue; $nft: $blue-purple; +$mpt: $blue; // Currency colors $CURRENCY_DEFAULT: #aedbf7; diff --git a/src/containers/shared/transactionUtils.ts b/src/containers/shared/transactionUtils.ts index e39c28ef1..0ccd26bd9 100644 --- a/src/containers/shared/transactionUtils.ts +++ b/src/containers/shared/transactionUtils.ts @@ -41,6 +41,21 @@ export const TX_FLAGS: Record<string, Record<number, string>> = { 0x00200000: 'tfOneAssetLPToken', 0x00400000: 'tfLimitLPToken', }, + MPTokenAuthorize: { + 0x00000001: 'tfMPTUnauthorize', + }, + MPTokenIssuanceCreate: { + 0x00000002: 'tfMPTCanLock', + 0x00000004: 'tfMPTRequireAuth', + 0x00000008: 'tfMPTCanEscrow', + 0x00000010: 'tfMPTCanTrade', + 0x00000020: 'tfMPTCanTransfer', + 0x00000040: 'tfMPTCanClawback', + }, + MPTokenIssuanceSet: { + 0x00000001: 'tfMPTLock', + 0x00000002: 'tfMPTUnlock', + }, NFTokenMint: { 0x00000001: 'tfBurnable', 0x00000002: 'tfOnlyXRP', diff --git a/src/containers/shared/types.ts b/src/containers/shared/types.ts index d219bc63e..3ae210e27 100644 --- a/src/containers/shared/types.ts +++ b/src/containers/shared/types.ts @@ -17,12 +17,18 @@ export interface IssuedCurrencyAmount extends IssuedCurrency { value: string } -export type Amount = IssuedCurrencyAmount | string +export interface MPTAmount { + mpt_issuance_id: string + value: string +} + +export type Amount = IssuedCurrencyAmount | MPTAmount | string export type ExplorerAmount = { issuer?: string currency: string - amount: number + amount: number | string + isMPT?: boolean } export interface Tx { diff --git a/src/containers/shared/utils.js b/src/containers/shared/utils.js index bdeae56e2..ac510adeb 100644 --- a/src/containers/shared/utils.js +++ b/src/containers/shared/utils.js @@ -23,7 +23,8 @@ export const FETCH_INTERVAL_NODES_MILLIS = 60000 export const FETCH_INTERVAL_ERROR_MILLIS = 300 export const DECIMAL_REGEX = /^\d+$/ -export const HASH_REGEX = /[0-9A-Fa-f]{64}/i +export const HASH256_REGEX = /[0-9A-Fa-f]{64}/i +export const HASH192_REGEX = /[0-9A-Fa-f]{48}/i export const CURRENCY_REGEX = /^[a-zA-Z0-9]{3,}[.:+-]r[rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz]{27,35}$/ export const FULL_CURRENCY_REGEX = @@ -129,14 +130,19 @@ export const isEarlierVersion = (source, target) => { } // Document: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NumberFormat -export const localizeNumber = (num, lang = 'en-US', options = {}) => { +export const localizeNumber = ( + num, + lang = 'en-US', + options = {}, + isMPT = false, +) => { const number = Number.parseFloat(num) const config = { ...NUMBER_DEFAULT_OPTIONS, ...options } if (Number.isNaN(number)) { return null } - if (config.style === 'currency') { + if (config.style === 'currency' && !isMPT) { try { const neg = number < 0 ? '-' : '' const d = new Intl.NumberFormat(lang, config).format(number) @@ -255,6 +261,8 @@ export const formatLargeNumber = (d = 0, digits = 4) => { } } +export const convertHexToBigInt = (s) => BigInt(`0x${s}`) + export const durationToHuman = (s, decimal = 2) => { const d = {} const seconds = Math.abs(s) @@ -301,7 +309,7 @@ export const formatTradingFee = (tradingFee) => }) : undefined -export const computeBalanceChange = (node) => { +export const computeRippleStateBalanceChange = (node) => { const fields = node.FinalFields || node.NewFields const prev = node.PreviousFields const { currency } = fields.Balance @@ -333,7 +341,50 @@ export const computeBalanceChange = (node) => { } } +export const computeMPTokenBalanceChange = (node) => { + const final = node.FinalFields || node.NewFields + const prev = node.PreviousFields + const prevAmount = prev && prev.MPTAmount ? prev.MPTAmount : '0' + const finalAmount = final.MPTAmount ?? '0' + + return { + previousBalance: BigInt(prevAmount), + finalBalance: BigInt(finalAmount), + account: final.Account, + change: BigInt(finalAmount) - BigInt(prevAmount), + } +} + +export const computeMPTIssuanceBalanceChange = (node) => { + const final = node.FinalFields || node.NewFields + const prev = node.PreviousFields + const prevAmount = + prev && prev.OutstandingAmount ? prev.OutstandingAmount : '0' + const finalAmount = final.OutstandingAmount ?? '0' + + return { + previousBalance: BigInt(prevAmount), + finalBalance: BigInt(finalAmount), + account: final.Issuer, + change: BigInt(finalAmount) - BigInt(prevAmount), + } +} + export const renderXRP = (d, language) => { const options = { ...CURRENCY_OPTIONS, currency: 'XRP' } return localizeNumber(d, language, options) } + +// Convert scaled price (assetPrice) in hex string to original price using formula: +// originalPrice = assetPrice / 10**scale +// More details: https://github.com/XRPLF/XRPL-Standards/tree/master/XLS-47d-PriceOracles +export function convertScaledPrice(assetPrice, scale) { + const scaledPriceInBigInt = BigInt(`0x${assetPrice}`) + const divisor = BigInt(10 ** scale) + const integerPart = scaledPriceInBigInt / divisor + const remainder = scaledPriceInBigInt % divisor + const fractionalPart = (remainder * BigInt(10 ** scale)) / divisor + return fractionalPart > 0 + ? `${integerPart}.${fractionalPart.toString().padStart(scale, '0')}` + : `${integerPart}` +} diff --git a/src/rippled/lib/rippled.js b/src/rippled/lib/rippled.js index 598a57e63..c77c6584d 100644 --- a/src/rippled/lib/rippled.js +++ b/src/rippled/lib/rippled.js @@ -1,4 +1,4 @@ -import { CTID_REGEX, HASH_REGEX } from '../../containers/shared/utils' +import { CTID_REGEX, HASH256_REGEX } from '../../containers/shared/utils' import { formatAmount } from './txSummary/formatAmount' import { Error, XRP_BASE, convertRippleDate } from './utils' @@ -144,7 +144,7 @@ const getTransaction = (rippledSocket, txId) => { const params = { command: 'tx', } - if (HASH_REGEX.test(txId)) { + if (HASH256_REGEX.test(txId)) { params.transaction = txId } else if (CTID_REGEX.test(txId)) { params.ctid = txId @@ -557,6 +557,54 @@ const getAMMInfo = (rippledSocket, asset, asset2) => { }) } +const getMPTIssuance = (rippledSocket, tokenId) => + query(rippledSocket, { + command: 'ledger_entry', + mpt_issuance: tokenId, + ledger_index: 'validated', + }).then((resp) => { + if ( + resp.error === 'entryNotFound' || + resp.error === 'lgrNotFound' || + resp.error === 'objectNotFound' + ) { + throw new Error('MPT not found', 404) + } + + if (resp.error_message) { + throw new Error(resp.error_message, 500) + } + return resp + }) + +const getAccountMPTs = ( + rippledSocket, + account, + marker = '', + ledgerIndex = 'validated', +) => + query(rippledSocket, { + command: 'account_objects', + account, + ledger_index: ledgerIndex, + type: 'mptoken', + marker: marker || undefined, + limit: 400, + }).then((resp) => { + if (resp.error === 'actNotFound') { + throw new Error('account not found', 404) + } + if (resp.error === 'invalidParams') { + return undefined + } + + if (resp.error_message) { + throw new Error(resp.error_message, 500) + } + + return resp + }) + export { getLedger, getLedgerEntry, @@ -576,4 +624,6 @@ export { getSellNFToffers, getNFTTransactions, getAMMInfo, + getMPTIssuance, + getAccountMPTs, } diff --git a/src/rippled/lib/txSummary/formatAmount.ts b/src/rippled/lib/txSummary/formatAmount.ts index 7eaf91239..c8cccd4d5 100644 --- a/src/rippled/lib/txSummary/formatAmount.ts +++ b/src/rippled/lib/txSummary/formatAmount.ts @@ -1,18 +1,34 @@ -import { Amount, ExplorerAmount } from '../../../containers/shared/types' +import { + Amount, + ExplorerAmount, + MPTAmount, +} from '../../../containers/shared/types' import { XRP_BASE } from '../utils' +export const isMPTAmount = (amount: Amount): amount is MPTAmount => + (amount as MPTAmount).mpt_issuance_id !== undefined && + (amount as MPTAmount).value !== undefined + export const formatAmount = (d: Amount | number): ExplorerAmount => { if (d == null) { return d } - return typeof d !== 'string' && typeof d !== 'number' + + if (typeof d === 'string' || typeof d === 'number') + return { + currency: 'XRP', + amount: Number(d) / XRP_BASE, + } + + return isMPTAmount(d) ? { + currency: d.mpt_issuance_id, + amount: d.value, + isMPT: true, + } + : { currency: d.currency, issuer: d.issuer, amount: Number(d.value), } - : { - currency: 'XRP', - amount: Number(d) / XRP_BASE, - } } diff --git a/src/rippled/lib/utils.js b/src/rippled/lib/utils.js index 2c95c4db4..a1b19680e 100644 --- a/src/rippled/lib/utils.js +++ b/src/rippled/lib/utils.js @@ -1,4 +1,5 @@ -import { hexToString } from '@xrplf/isomorphic/utils' +import { hexToString, hexToBytes } from '@xrplf/isomorphic/utils' +import { encodeAccountID } from 'ripple-address-codec' import { convertRippleDate } from './convertRippleDate' import { formatSignerList } from './formatSignerList' import { decodeHex } from '../../containers/shared/transactionUtils' @@ -27,6 +28,19 @@ const NFT_FLAGS = { 0x00000002: 'lsfOnlyXRP', 0x00000008: 'lsfTransferable', } +const MPT_ISSUANCE_FLAGS = { + 0x00000001: 'lsfMPTLocked', + 0x00000002: 'lsfMPTCanLock', + 0x00000004: 'lsfMPTRequireAuth', + 0x00000008: 'lsfMPTCanEscrow', + 0x00000010: 'lsfMPTCanTrade', + 0x00000020: 'lsfMPTCanTransfer', + 0x00000040: 'lsfMPTCanClawback', +} +const MPTOKEN_FLAGS = { + 0x00000001: 'lsfMPTLocked', + 0x00000002: 'lsfMPTAuthorized', +} const hex32 = (d) => { const int = d & 0xffffffff const hex = int.toString(16).toUpperCase() @@ -128,6 +142,33 @@ const formatNFTInfo = (info) => ({ warnings: info.warnings, }) +const formatMPTIssuanceInfo = (info) => ({ + issuer: info.node.Issuer, + assetScale: info.node.AssetScale, + maxAmt: info.node.MaximumAmount + ? BigInt(info.node.MaximumAmount).toString(10) + : undefined, // default is undefined because the default maxAmt is the largest 63-bit int + outstandingAmt: info.node.OutstandingAmount + ? BigInt(info.node.OutstandingAmount).toString(10) + : '0', + transferFee: info.node.TransferFee, + sequence: info.node.Sequence, + metadata: info.node.MPTokenMetadata + ? decodeHex(info.node.MPTokenMetadata) + : info.node.MPTokenMetadata, + flags: buildFlags(info.node.Flags, MPT_ISSUANCE_FLAGS), +}) + +const formatMPTokenInfo = (info) => ({ + account: info.Account, + flags: buildFlags(info.Flags, MPTOKEN_FLAGS), + mptIssuanceID: info.MPTokenIssuanceID, + mptIssuer: encodeAccountID( + hexToBytes(info.MPTokenIssuanceID.substring(8, 48)), + ), + mptAmount: info.MPTAmount ? info.MPTAmount.toString(10) : '0', +}) + export { XRP_BASE, RippledError as Error, @@ -137,4 +178,6 @@ export { formatAccountInfo, convertHexToString, formatNFTInfo, + formatMPTIssuanceInfo, + formatMPTokenInfo, } From 6d1d9d14b9ec234d6a8ff5fe32931f335c8dafb7 Mon Sep 17 00:00:00 2001 From: pdp2121 <71317875+pdp2121@users.noreply.github.com> Date: Mon, 14 Oct 2024 14:05:00 -0400 Subject: [PATCH 47/79] Add metadata styling for Multi Purpose Token (#1057) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## High Level Overview of Change <!-- Please include a summary/list of the changes. If too broad, please consider splitting into multiple PRs. --> MPTokenMetadata is an essential part of a MPT token as it allows issuers to define their own metadata standards, tailored to their specific requirements, encompassing details like asset codes, common names, symbols, or even visual representations. This PR formats the display of this metadata field in the Explorer by adding json formatter for readability. ### Context of Change <!-- Please include the context of a change. If a bug fix, when was the bug introduced? What was the behavior? If a new feature, why was this architecture chosen? What were the alternatives? If a refactor, how is this better than the previous implementation? If there is a design document for this feature, please link it here. --> Spec: https://github.com/XRPLF/XRPL-Standards/tree/master/XLS-0033d-multi-purpose-tokens ### Type of Change <!-- Please check relevant options, delete irrelevant ones. --> - [ ] Bug fix (non-breaking change which fixes an issue) - [x] New feature (non-breaking change which adds functionality) - [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected) - [ ] Refactor (non-breaking change that only restructures code) - [ ] Tests (You added tests for code that already exists, or your new feature included in this PR) - [ ] Documentation Updates - [ ] Translation Updates - [ ] Release ## Before / After <!-- If just refactoring / back-end changes, this can be just an in-English description of the change at a technical level. If a UI change, screenshots should be included. --> MPTokenIssuanceCreate Page:  MPT Page:  --- src/containers/MPT/MPTHeader/Details.tsx | 16 ++++++++++++++-- src/containers/MPT/MPTHeader/styles.scss | 4 ++++ .../Transaction/MPTokenIssuanceCreate/Simple.tsx | 10 ++++++++-- .../MPTokenIssuanceCreate/styles.scss | 3 +++ src/containers/shared/utils.js | 9 +++++++++ 5 files changed, 38 insertions(+), 4 deletions(-) create mode 100644 src/containers/shared/components/Transaction/MPTokenIssuanceCreate/styles.scss diff --git a/src/containers/MPT/MPTHeader/Details.tsx b/src/containers/MPT/MPTHeader/Details.tsx index b980380c0..6a0e3d9f1 100644 --- a/src/containers/MPT/MPTHeader/Details.tsx +++ b/src/containers/MPT/MPTHeader/Details.tsx @@ -1,9 +1,10 @@ import { useTranslation } from 'react-i18next' import './styles.scss' import { useLanguage } from '../../shared/hooks' -import { localizeNumber } from '../../shared/utils' +import { isValidJsonString, localizeNumber } from '../../shared/utils' import { MPTIssuanceFormattedInfo } from '../../shared/Interfaces' import { TokenTableRow } from '../../shared/components/TokenTableRow' +import { JsonView } from '../../shared/components/JsonView' interface Props { data: MPTIssuanceFormattedInfo @@ -41,7 +42,18 @@ export const Details = ({ data }: Props) => { )} <TokenTableRow label={t('transfer_fee')} value={formattedFee ?? '0%'} /> <TokenTableRow label={t('sequence_number_short')} value={sequence} /> - {metadata && <TokenTableRow label={t('metadata')} value={metadata} />} + {metadata && ( + <TokenTableRow + label={t('metadata')} + value={ + isValidJsonString(metadata) ? ( + <JsonView data={JSON.parse(metadata)} /> + ) : ( + metadata + ) + } + /> + )} </tbody> </table> ) diff --git a/src/containers/MPT/MPTHeader/styles.scss b/src/containers/MPT/MPTHeader/styles.scss index fc1b25e01..682ea36e4 100644 --- a/src/containers/MPT/MPTHeader/styles.scss +++ b/src/containers/MPT/MPTHeader/styles.scss @@ -17,6 +17,10 @@ @include for-size(desktop-up) { width: 490px; } + + .jv-indent { + border-left: none; + } } .settings { diff --git a/src/containers/shared/components/Transaction/MPTokenIssuanceCreate/Simple.tsx b/src/containers/shared/components/Transaction/MPTokenIssuanceCreate/Simple.tsx index dc80d5625..218ae93d2 100644 --- a/src/containers/shared/components/Transaction/MPTokenIssuanceCreate/Simple.tsx +++ b/src/containers/shared/components/Transaction/MPTokenIssuanceCreate/Simple.tsx @@ -3,8 +3,10 @@ import { SimpleRow } from '../SimpleRow' import { TransactionSimpleComponent, TransactionSimpleProps } from '../types' import { MPTokenIssuanceCreateInstructions } from './types' import { useLanguage } from '../../../hooks' -import { localizeNumber } from '../../../utils' +import { isValidJsonString, localizeNumber } from '../../../utils' import { MPTokenLink } from '../../MPTokenLink' +import { JsonView } from '../../JsonView' +import './styles.scss' export const Simple: TransactionSimpleComponent = ({ data, @@ -55,7 +57,11 @@ export const Simple: TransactionSimpleComponent = ({ className="dt" data-test="mpt-metadata" > - {metadata} + {isValidJsonString(metadata) ? ( + <JsonView data={JSON.parse(metadata)} /> + ) : ( + metadata + )} </SimpleRow> )} </> diff --git a/src/containers/shared/components/Transaction/MPTokenIssuanceCreate/styles.scss b/src/containers/shared/components/Transaction/MPTokenIssuanceCreate/styles.scss new file mode 100644 index 000000000..f7ce40841 --- /dev/null +++ b/src/containers/shared/components/Transaction/MPTokenIssuanceCreate/styles.scss @@ -0,0 +1,3 @@ +.jv-indent { + border-left: none; +} diff --git a/src/containers/shared/utils.js b/src/containers/shared/utils.js index ac510adeb..9046410e0 100644 --- a/src/containers/shared/utils.js +++ b/src/containers/shared/utils.js @@ -129,6 +129,15 @@ export const isEarlierVersion = (source, target) => { return false } +export const isValidJsonString = (str) => { + try { + JSON.parse(str) + return true + } catch (e) { + return false + } +} + // Document: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NumberFormat export const localizeNumber = ( num, From 22795133e0ea18556dcd8c2230dd5eea845977f4 Mon Sep 17 00:00:00 2001 From: pdp2121 <71317875+pdp2121@users.noreply.github.com> Date: Tue, 15 Oct 2024 11:00:42 -0400 Subject: [PATCH 48/79] Use feature rpc for EnableAmendment (#1052) ## High Level Overview of Change <!-- Please include a summary/list of the changes. If too broad, please consider splitting into multiple PRs. --> With the new feature RPC introduced in [rippled 2.2.0](https://github.com/XRPLF/rippled/releases/tag/2.2.0), EnableAmendment tx Simple page can populate its data using amendment id without dependence on xrpl.org and rippled docs (which change pretty frequently): https://github.com/ripple/explorer/blob/staging/src/containers/shared/amendmentUtils.ts The logic would be simplified and consistency would be improved This resolves: https://github.com/ripple/explorer/issues/1001 ### Type of Change <!-- Please check relevant options, delete irrelevant ones. --> - [x] Bug fix (non-breaking change which fixes an issue) - [ ] New feature (non-breaking change which adds functionality) - [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected) - [ ] Refactor (non-breaking change that only restructures code) - [ ] Tests (You added tests for code that already exists, or your new feature included in this PR) - [ ] Documentation Updates - [ ] Translation Updates - [ ] Release --- .../Transactions/test/SimpleTab.test.tsx | 21 ++- src/containers/shared/amendmentUtils.ts | 41 ----- .../Transaction/EnableAmendment/Simple.tsx | 40 ++--- .../test/EnableAmendmentSimple.test.tsx | 51 ++++-- .../mock_data/FeatureExpandedSignerList.json | 7 + .../test/mock_data/FeatureNegativeUNL.json | 7 + .../shared/test/amendmentUtils.test.ts | 168 +----------------- src/rippled/lib/rippled.js | 16 ++ 8 files changed, 94 insertions(+), 257 deletions(-) create mode 100644 src/containers/shared/components/Transaction/EnableAmendment/test/mock_data/FeatureExpandedSignerList.json create mode 100644 src/containers/shared/components/Transaction/EnableAmendment/test/mock_data/FeatureNegativeUNL.json diff --git a/src/containers/Transactions/test/SimpleTab.test.tsx b/src/containers/Transactions/test/SimpleTab.test.tsx index 652ded5b7..bce4d5502 100644 --- a/src/containers/Transactions/test/SimpleTab.test.tsx +++ b/src/containers/Transactions/test/SimpleTab.test.tsx @@ -9,23 +9,36 @@ import { SimpleTab } from '../SimpleTab' import summarize from '../../../rippled/lib/txSummary' import i18n from '../../../i18n/testConfig' import { expectSimpleRowText } from '../../shared/components/Transaction/test' +import SocketContext from '../../shared/SocketContext' +import MockWsClient from '../../test/mockWsClient' import { queryClient } from '../../shared/QueryClient' describe('SimpleTab container', () => { + let client const createWrapper = (tx, width = 1200) => mount( <Router> <QueryClientProvider client={queryClient}> <I18nextProvider i18n={i18n}> - <SimpleTab - data={{ processed: tx, summary: summarize(tx, true).details }} - width={width} - /> + <SocketContext.Provider value={client}> + <SimpleTab + data={{ processed: tx, summary: summarize(tx, true).details }} + width={width} + /> + </SocketContext.Provider> </I18nextProvider> </QueryClientProvider> </Router>, ) + beforeEach(() => { + client = new MockWsClient() + }) + + afterEach(() => { + client.close() + }) + it('renders EnableAmendment without crashing', () => { const wrapper = createWrapper(EnableAmendment) wrapper.unmount() diff --git a/src/containers/shared/amendmentUtils.ts b/src/containers/shared/amendmentUtils.ts index 96e189e33..b9e21af55 100644 --- a/src/containers/shared/amendmentUtils.ts +++ b/src/containers/shared/amendmentUtils.ts @@ -1,14 +1,9 @@ -import { sha512 } from '@xrplf/isomorphic/sha512' -import { hexToBytes, bytesToHex, stringToHex } from '@xrplf/isomorphic/utils' import axios from 'axios' import { localizeDate } from './utils' -const cachedAmendmentIDs: any = {} let cachedRippledVersions: any = {} -const ACTIVE_AMENDMENT_REGEX = /^\s*REGISTER_F[A-Z]+\s*\((\S+),\s*.*$/ -const RETIRED_AMENDMENT_REGEX = /^ .*retireFeature\("(\S+)"\)[,;].*$/ const TIME_ZONE = 'UTC' const DATE_OPTIONS = { hour: 'numeric', @@ -31,42 +26,6 @@ export function getExpectedDate(date: string, language: string) { ) } -async function fetchAmendmentNames() { - const response = await axios.get( - 'https://raw.githubusercontent.com/XRPLF/rippled/develop/src/libxrpl/protocol/Feature.cpp', - ) - const text = response.data - - const amendmentNames: string[] = [] - text.split('\n').forEach((line: string) => { - const name = line.match(ACTIVE_AMENDMENT_REGEX) - if (name) { - amendmentNames.push(name[1]) - } else { - const name2 = line.match(RETIRED_AMENDMENT_REGEX) - name2 && amendmentNames.push(name2[1]) - } - }) - return amendmentNames -} - -function sha512Half(bytes: Uint8Array) { - return bytesToHex(sha512(bytes)).slice(0, 64) -} - -export async function nameOfAmendmentID(id: string) { - if (cachedAmendmentIDs[id]) { - return cachedAmendmentIDs[id] - } - // The Amendment ID is the hash of the Amendment name - const amendmentNames = await fetchAmendmentNames() - amendmentNames.forEach((name) => { - cachedAmendmentIDs[sha512Half(hexToBytes(stringToHex(name)))] = name - }) - - return cachedAmendmentIDs[id] -} - async function fetchMinRippledVersions() { const response = await axios.get( 'https://raw.githubusercontent.com/XRPLF/xrpl-dev-portal/master/resources/known-amendments.md', diff --git a/src/containers/shared/components/Transaction/EnableAmendment/Simple.tsx b/src/containers/shared/components/Transaction/EnableAmendment/Simple.tsx index 184faee53..35f885c53 100644 --- a/src/containers/shared/components/Transaction/EnableAmendment/Simple.tsx +++ b/src/containers/shared/components/Transaction/EnableAmendment/Simple.tsx @@ -1,15 +1,13 @@ -import { useEffect, useState } from 'react' +import { useContext, useEffect, useState } from 'react' import { useLanguage } from '../../../hooks' import { SimpleRow } from '../SimpleRow' import { TransactionSimpleProps } from '../types' import { EnableAmendment } from './types' -import { - getExpectedDate, - getRippledVersion, - nameOfAmendmentID, -} from '../../../amendmentUtils' +import { getExpectedDate, getRippledVersion } from '../../../amendmentUtils' import { AMENDMENT_ROUTE } from '../../../../App/routes' import { RouteLink } from '../../../routing' +import SocketContext from '../../../SocketContext' +import { getFeature } from '../../../../../rippled/lib/rippled' const states = { loading: 'Loading', @@ -22,31 +20,21 @@ export const Simple = ({ data }: TransactionSimpleProps<EnableAmendment>) => { name: states.loading, minRippledVersion: states.loading, }) + const rippledSocket = useContext(SocketContext) useEffect(() => { - nameOfAmendmentID(data.instructions.Amendment).then((name: string) => { - if (name) { - getRippledVersion(name).then((rippledVersion) => { - if (rippledVersion) { - setAmendmentDetails({ - name, - minRippledVersion: rippledVersion, - }) - } else { - setAmendmentDetails({ - name, - minRippledVersion: states.unknown, - }) - } - }) - } else { + const amendmentId = data.instructions.Amendment + getFeature(rippledSocket, amendmentId).then((feature) => { + const name = + feature && feature[amendmentId] ? feature[amendmentId].name : '' + getRippledVersion(name).then((rippledVersion) => { setAmendmentDetails({ - name: states.unknown, - minRippledVersion: states.unknown, + name: name || states.unknown, + minRippledVersion: rippledVersion || states.unknown, }) - } + }) }) - }, [data.instructions.Amendment]) + }, [data.instructions.Amendment, rippledSocket]) let amendmentStatus = states.unknown let expectedDate: string | null = states.unknown diff --git a/src/containers/shared/components/Transaction/EnableAmendment/test/EnableAmendmentSimple.test.tsx b/src/containers/shared/components/Transaction/EnableAmendment/test/EnableAmendmentSimple.test.tsx index d04002da3..476931b4d 100644 --- a/src/containers/shared/components/Transaction/EnableAmendment/test/EnableAmendmentSimple.test.tsx +++ b/src/containers/shared/components/Transaction/EnableAmendment/test/EnableAmendmentSimple.test.tsx @@ -6,11 +6,11 @@ import { Simple } from '../Simple' import mockEnableAmendmentWithEnabled from './mock_data/EnableAmendmentWithEnabled.json' import mockEnableAmendmentWithMinority from './mock_data/EnableAmendmentWithMinority.json' import mockEnableAmendmentWithMajority from './mock_data/EnableAmendmentWithMajority.json' -import { - getRippledVersion, - nameOfAmendmentID, -} from '../../../../amendmentUtils' +import mockFeatureExpandedSignerList from './mock_data/FeatureExpandedSignerList.json' +import mockFeatureNegativeUNL from './mock_data/FeatureNegativeUNL.json' +import { getRippledVersion } from '../../../../amendmentUtils' import { flushPromises } from '../../../../../test/utils' +import { getFeature } from '../../../../../../rippled/lib/rippled' const createWrapper = createSimpleWrapperFactory(Simple, i18n) @@ -21,22 +21,35 @@ jest.mock('../../../../amendmentUtils', () => { __esModule: true, ...originalModule, getRippledVersion: jest.fn(), - nameOfAmendmentID: jest.fn(), + } +}) + +jest.mock('../../../../../../rippled/lib/rippled', () => { + const originalModule = jest.requireActual( + '../../../../../../rippled/lib/rippled', + ) + + return { + __esModule: true, + ...originalModule, + getFeature: jest.fn(), } }) const mockedGetRippledVersion = getRippledVersion as jest.MockedFunction< typeof getRippledVersion > -const mockedNameOfAmendmentID = nameOfAmendmentID as jest.MockedFunction< - typeof nameOfAmendmentID -> + +const mockedGetFeature = getFeature as jest.MockedFunction<typeof getFeature> describe('EnableAmendment: Simple', () => { + afterEach(() => { + mockedGetFeature.mockReset() + }) it('renders tx that causes an amendment to loose majority', async () => { mockedGetRippledVersion.mockImplementation(() => Promise.resolve('v1.9.1')) - mockedNameOfAmendmentID.mockImplementation(() => - Promise.resolve('ExpandedSignerList'), + mockedGetFeature.mockImplementation(() => + Promise.resolve(mockFeatureExpandedSignerList), ) const wrapper = createWrapper(mockEnableAmendmentWithMinority) expectSimpleRowLabel(wrapper, 'name', 'Amendment Name') @@ -58,8 +71,8 @@ describe('EnableAmendment: Simple', () => { it('renders tx that causes an amendment to gain majority', async () => { mockedGetRippledVersion.mockImplementation(() => Promise.resolve('v1.9.1')) - mockedNameOfAmendmentID.mockImplementation(() => - Promise.resolve('ExpandedSignerList'), + mockedGetFeature.mockImplementation(() => + Promise.resolve(mockFeatureExpandedSignerList), ) const wrapper = createWrapper(mockEnableAmendmentWithMajority) expectSimpleRowLabel(wrapper, 'name', 'Amendment Name') @@ -86,8 +99,8 @@ describe('EnableAmendment: Simple', () => { it('renders tx that enables an amendment', async () => { mockedGetRippledVersion.mockImplementation(() => Promise.resolve('v1.7.3')) - mockedNameOfAmendmentID.mockImplementation(() => - Promise.resolve('NegativeUNL'), + mockedGetFeature.mockImplementation(() => + Promise.resolve(mockFeatureNegativeUNL), ) const wrapper = createWrapper(mockEnableAmendmentWithEnabled) expectSimpleRowLabel(wrapper, 'name', 'Amendment Name') @@ -108,7 +121,7 @@ describe('EnableAmendment: Simple', () => { it('renders tx that cannot determine version or name', async () => { mockedGetRippledVersion.mockImplementation(() => Promise.resolve('')) - mockedNameOfAmendmentID.mockImplementation(() => Promise.resolve('')) + mockedGetFeature.mockImplementation(() => Promise.resolve(null)) const wrapper = createWrapper(mockEnableAmendmentWithEnabled) expectSimpleRowLabel(wrapper, 'name', 'Amendment Name') expectSimpleRowText(wrapper, 'name', 'Loading') @@ -124,8 +137,8 @@ describe('EnableAmendment: Simple', () => { it('renders tx that cannot determine version', async () => { mockedGetRippledVersion.mockImplementation(() => Promise.resolve('')) - mockedNameOfAmendmentID.mockImplementation(() => - Promise.resolve('NegativeUNL'), + mockedGetFeature.mockImplementation(() => + Promise.resolve(mockFeatureNegativeUNL), ) const wrapper = createWrapper(mockEnableAmendmentWithEnabled) expectSimpleRowLabel(wrapper, 'name', 'Amendment Name') @@ -142,7 +155,7 @@ describe('EnableAmendment: Simple', () => { it('renders tx that cannot determine name', async () => { mockedGetRippledVersion.mockImplementation(() => Promise.resolve('v1.7.3')) - mockedNameOfAmendmentID.mockImplementation(() => Promise.resolve('')) + mockedGetFeature.mockImplementation(() => Promise.resolve(null)) const wrapper = createWrapper(mockEnableAmendmentWithEnabled) expectSimpleRowLabel(wrapper, 'name', 'Amendment Name') expectSimpleRowText(wrapper, 'name', 'Loading') @@ -153,6 +166,6 @@ describe('EnableAmendment: Simple', () => { wrapper.update() expectSimpleRowText(wrapper, 'name', 'Unknown') - expectSimpleRowText(wrapper, 'version', 'Unknown') + expectSimpleRowText(wrapper, 'version', 'v1.7.3') }) }) diff --git a/src/containers/shared/components/Transaction/EnableAmendment/test/mock_data/FeatureExpandedSignerList.json b/src/containers/shared/components/Transaction/EnableAmendment/test/mock_data/FeatureExpandedSignerList.json new file mode 100644 index 000000000..09635f407 --- /dev/null +++ b/src/containers/shared/components/Transaction/EnableAmendment/test/mock_data/FeatureExpandedSignerList.json @@ -0,0 +1,7 @@ +{ + "B2A4DB846F0891BF2C76AB2F2ACC8F5B4EC64437135C6E56F3F859DE5FFD5856": { + "enabled": false, + "name": "ExpandedSignerList", + "supported": true + } +} diff --git a/src/containers/shared/components/Transaction/EnableAmendment/test/mock_data/FeatureNegativeUNL.json b/src/containers/shared/components/Transaction/EnableAmendment/test/mock_data/FeatureNegativeUNL.json new file mode 100644 index 000000000..56341a552 --- /dev/null +++ b/src/containers/shared/components/Transaction/EnableAmendment/test/mock_data/FeatureNegativeUNL.json @@ -0,0 +1,7 @@ +{ + "B4E4F5D2D6FB84DF7399960A732309C9FD530EAE5941838160042833625A6076": { + "enabled": false, + "name": "NegativeUNL", + "supported": true + } +} diff --git a/src/containers/shared/test/amendmentUtils.test.ts b/src/containers/shared/test/amendmentUtils.test.ts index f7f21e645..e4ef9d4e6 100644 --- a/src/containers/shared/test/amendmentUtils.test.ts +++ b/src/containers/shared/test/amendmentUtils.test.ts @@ -1,170 +1,4 @@ -import { getRippledVersion, nameOfAmendmentID } from '../amendmentUtils' - -const nameTable = [ - [ - '32A122F1352A4C7B3A6D790362CC34749C5E57FCE896377BFDC6CCD14F6CD627', - 'NonFungibleTokensV1_1', - ], - [ - '4C97EBA926031A7CF7D7B36FDE3ED66DDA5421192D63DE53FFB46E43B9DC8373', - 'MultiSign', - ], - [ - '6781F8368C4771B83E8B821D88F580202BCB4228075297B19E4FDC5233F1EFDC', - 'TrustSetAuth', - ], - [ - '42426C4D4F1009EE67080A9B7965B44656D7714D104A72F9B4369F97ABF044EE', - 'FeeEscalation', - ], - [ - '08DE7D96082187F6E6578530258C77FAABABE4C20474BDB82F04B021F1A68647', - 'PayChan', - ], - ['740352F2412A9909880C23A559FCECEDA3BE2126FED62FC7660D628A06927F11', 'Flow'], - [ - '1562511F573A19AE9BD103B5D6B9E01B3B46805AEC5D3C4805C902B514399146', - 'CryptoConditions', - ], - [ - '532651B4FD58DF8922A49BA101AB3E996E5BFBF95A913B3E392504863E63B164', - 'TickSize', - ], - [ - 'E2E6F2866106419B88C50045ACE96368558C345566AC8F2BDF5A5B5587F0E6FA', - 'fix1368', - ], - [ - '07D43DCE529B15A10827E5E04943B496762F9A88E3268269D69C44BE49E21104', - 'Escrow', - ], - [ - '86E83A7D2ECE3AD5FA87AB2195AE015C950469ABF0B72EAACED318F74886AE90', - 'CryptoConditionsSuite', - ], - [ - '42EEA5E28A97824821D4EF97081FE36A54E9593C6E4F20CBAE098C69D2E072DC', - 'fix1373', - ], - [ - 'DC9CA96AEA1DCF83E527D1AFC916EFAF5D27388ECA4060A88817C1238CAEE0BF', - 'EnforceInvariants', - ], - [ - '3012E8230864E95A58C60FD61430D7E1B4D3353195F2981DC12B0C7C0950FFAC', - 'FlowCross', - ], - [ - 'CC5ABAE4F3EC92E94A59B1908C2BE82D2228B6485C00AFF8F22DF930D89C194E', - 'SortedDirectories', - ], - [ - 'B4D44CC3111ADD964E846FC57760C8B50FFCD5A82C86A72756F6B058DDDF96AD', - 'fix1201', - ], - [ - '6C92211186613F9647A89DFFBAB8F94C99D4C7E956D495270789128569177DA1', - 'fix1512', - ], - [ - '67A34F2CF55BFC0F93AACD5B281413176FEE195269FA6D95219A2DF738671172', - 'fix1513', - ], - [ - 'B9E739B8296B4A1BB29BE990B17D66E21B62A300A909F25AC55C22D6C72E1F9D', - 'fix1523', - ], - [ - '1D3463A5891F9E589C5AE839FFAC4A917CE96197098A1EF22304E1BC5B98A454', - 'fix1528', - ], - [ - 'F64E1EABBE79D55B3BB82020516CEC2C582A98A6BFE20FBE9BB6A0D233418064', - 'DepositAuth', - ], - [ - '157D2D480E006395B76F948E3E07A45A05FE10230D88A7993C71F97AE4B1F2D1', - 'Checks', - ], - [ - '7117E2EC2DBF119CA55181D69819F1999ECEE1A0225A7FD2B9ED47940968479C', - 'fix1571', - ], - [ - 'CA7C02118BA27599528543DFE77BA6838D1B0F43B447D4D7F53523CE6A0E9AC2', - 'fix1543', - ], - [ - '58BE9B5968C4DA7C59BA900961828B113E5490699B21877DEF9A31E9D0FE5D5F', - 'fix1623', - ], - [ - '3CBC5C4E630A1B82380295CDA84B32B49DD066602E74E39B85EF64137FA65194', - 'DepositPreauth', - ], - [ - '5D08145F0A4983F23AFFFF514E83FAD355C5ABFBB6CAB76FB5BC8519FF5F33BE', - 'fix1515', - ], - [ - 'FBD513F1B893AC765B78F250E6FFA6A11B573209D1842ADC787C850696741288', - 'fix1578', - ], - [ - '586480873651E106F1D6339B0C4A8945BA705A777F3F4524626FF1FC07EFE41D', - 'MultiSignReserve', - ], - [ - '2CD5286D8D687E98B41102BDD797198E81EA41DF7BD104E6561FEB104EFF2561', - 'fixTakerDryOfferRemoval', - ], - [ - 'C4483A1896170C66C098DEA5B0E024309C60DC960DE5F01CD7AF986AA3D9AD37', - 'fixMasterKeyAsRegularKey', - ], - [ - '8F81B066ED20DAECA20DF57187767685EEF3980B228E0667A650BAF24426D3B4', - 'fixCheckThreading', - ], - [ - '621A0B264970359869E3C0363A899909AAB7A887C8B73519E4ECF952D33258A8', - 'fixPayChanRecipientOwnerDir', - ], - [ - '30CD365592B8EE40489BA01AE2F7555CAC9C983145871DC82A42A31CF5BAE7D9', - 'DeletableAccounts', - ], - [ - '89308AF3B8B10B7192C4E613E1D2E4D9BA64B2EE2D5232402AE82A6A7220D953', - 'fixQualityUpperBound', - ], - [ - '00C1FC4A53E60AB02C864641002B3172F38677E29C26C5406685179B37E1EDAC', - 'RequireFullyCanonicalSig', - ], - [ - '25BA44241B3BD880770BFA4DA21C7180576831855368CBEC6A3154FDE4A7676E', - 'fix1781', - ], - [ - '1F4AFA8FA1BC8827AD4C0F682C03A8B671DCDF6B5C4DE36D44243A684103EF88', - 'HardenedValidations', - ], - [ - '4F46DF03559967AC60F2EB272FEFE3928A7594A45FF774B87A7E540DB0F8F068', - 'fixAmendmentMajorityCalc', - ], -] - -describe('nameOfAmendmentID: ', () => { - it.each(nameTable)( - `should resolve amendment id "%s" to "%s"`, - async (id, name) => { - const retrievedName = await nameOfAmendmentID(id) - return expect(retrievedName).toEqual(name) - }, - ) -}) +import { getRippledVersion } from '../amendmentUtils' const versionTable = [ ['NonFungibleTokensV1_1', 'v1.9.2'], diff --git a/src/rippled/lib/rippled.js b/src/rippled/lib/rippled.js index c77c6584d..dc7737309 100644 --- a/src/rippled/lib/rippled.js +++ b/src/rippled/lib/rippled.js @@ -557,6 +557,21 @@ const getAMMInfo = (rippledSocket, asset, asset2) => { }) } +// get feature +const getFeature = (rippledSocket, amendmentId) => { + const request = { + command: 'feature', + feature: amendmentId, + } + return query(rippledSocket, request).then((resp) => { + if (resp == null || resp.error_message) { + return null + } + + return resp + }) +} + const getMPTIssuance = (rippledSocket, tokenId) => query(rippledSocket, { command: 'ledger_entry', @@ -624,6 +639,7 @@ export { getSellNFToffers, getNFTTransactions, getAMMInfo, + getFeature, getMPTIssuance, getAccountMPTs, } From 3df3fb47320e2400b26c5fff4d1e809c446cde04 Mon Sep 17 00:00:00 2001 From: achowdhry-ripple <achowdhry@ripple.com> Date: Tue, 15 Oct 2024 15:13:10 -0400 Subject: [PATCH 49/79] Change icon URL to correct path (#1055) ## High Level Overview of Change Google chrome search result icon was broken, edited links to point to correct assets. <!-- Please include a summary/list of the changes. If too broad, please consider splitting into multiple PRs. --> ### Context of Change <!-- Please include the context of a change. If a bug fix, when was the bug introduced? What was the behavior? If a new feature, why was this architecture chosen? What were the alternatives? If a refactor, how is this better than the previous implementation? If there is a design document for this feature, please link it here. --> ### Type of Change <!-- Please check relevant options, delete irrelevant ones. --> - [x] Bug fix (non-breaking change which fixes an issue) - [ ] New feature (non-breaking change which adds functionality) - [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected) - [ ] Refactor (non-breaking change that only restructures code) - [ ] Tests (You added tests for code that already exists, or your new feature included in this PR) - [ ] Documentation Updates - [ ] Translation Updates - [ ] Release ### TypeScript/Hooks Update <!-- In an effort to modernize the codebase, you should convert the files that you work with to React Hooks and TypeScript. If this is not possible (e.g. it's too many changes, touching too many files, etc.) please explain why here. --> - [ ] Updated files to React Hooks - [ ] Updated files to TypeScript ## Before / After <!-- If just refactoring / back-end changes, this can be just an in-English description of the change at a technical level. If a UI change, screenshots should be included. --> ## Test Plan <!-- Please describe the tests that you ran to verify your changes and provide instructions so that others can reproduce. --> <!-- ## Future Tasks For future tasks related to PR. --> --- src/index.html | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/index.html b/src/index.html index 514732776..8109d44f4 100644 --- a/src/index.html +++ b/src/index.html @@ -15,8 +15,9 @@ --> <link rel="manifest" href="/manifest.json"> <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon"> - <link href="/apple-touch-icon.png" rel="apple-touch-icon" /> - <link href="/android-icon.png" rel="icon" sizes=”192×192″ /> + <link href="../public/apple-touch-icon.png" rel="apple-touch-icon" /> + <link href="../public/android-icon.png" rel="icon" sizes="192×192" /> + <link href="../public/favicon.ico" type="image/x-icon" rel="icon" sizes="64x64 32x32 24x24 16x16" /> <link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link href="https://fonts.googleapis.com/css2?family=Work+Sans:ital,wght@0,400;0,500;0,600;0,700;1,400;1,700&display=swap" rel="stylesheet"> From 98195b0cdef78d91c2e22d1fdc51c35a1780e476 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 1 Nov 2024 16:13:29 +0000 Subject: [PATCH 50/79] chore(deps-dev): bump eslint-plugin-import from 2.29.1 to 2.31.0 (#1068) --- package-lock.json | 158 ++++++++++++++++++++++++++-------------------- package.json | 2 +- 2 files changed, 91 insertions(+), 69 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0c886fb87..648ef38b2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -84,7 +84,7 @@ "eslint-config-prettier": "^9.1.0", "eslint-config-react-app": "^7.0.1", "eslint-plugin-flowtype": "^8.0.3", - "eslint-plugin-import": "^2.29.1", + "eslint-plugin-import": "^2.31.0", "eslint-plugin-jsx-a11y": "^6.9.0", "eslint-plugin-prettier": "^5.1.3", "eslint-plugin-react": "^7.34.2", @@ -5723,6 +5723,12 @@ "win32" ] }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "dev": true + }, "node_modules/@rushstack/eslint-patch": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.3.0.tgz", @@ -7447,16 +7453,17 @@ } }, "node_modules/array.prototype.findlastindex": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", - "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", + "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.2.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -11450,9 +11457,9 @@ } }, "node_modules/eslint-module-utils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", - "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", + "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", "dev": true, "dependencies": { "debug": "^3.2.7" @@ -11494,34 +11501,36 @@ } }, "node_modules/eslint-plugin-import": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", - "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", + "version": "2.31.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", + "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", "dev": true, "dependencies": { - "array-includes": "^3.1.7", - "array.prototype.findlastindex": "^1.2.3", + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.8", + "array.prototype.findlastindex": "^1.2.5", "array.prototype.flat": "^1.3.2", "array.prototype.flatmap": "^1.3.2", "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.8.0", - "hasown": "^2.0.0", - "is-core-module": "^2.13.1", + "eslint-module-utils": "^2.12.0", + "hasown": "^2.0.2", + "is-core-module": "^2.15.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", - "object.fromentries": "^2.0.7", - "object.groupby": "^1.0.1", - "object.values": "^1.1.7", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.0", "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.8", "tsconfig-paths": "^3.15.0" }, "engines": { "node": ">=4" }, "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" } }, "node_modules/eslint-plugin-import/node_modules/debug": { @@ -14166,12 +14175,15 @@ } }, "node_modules/is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", "dev": true, "dependencies": { - "hasown": "^2.0.0" + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -22796,15 +22808,17 @@ } }, "node_modules/object.groupby": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", - "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/object.hasown": { @@ -32322,6 +32336,12 @@ "integrity": "sha512-fbMkAF7fufku0N2dE5TBXcNlg0pt0cJue4xBRE2Qc5Vqikxr4VCgKj/ht6SMdFcOacVA9rqF70APJ8RN/4vMJw==", "optional": true }, + "@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "dev": true + }, "@rushstack/eslint-patch": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.3.0.tgz", @@ -33493,16 +33513,17 @@ } }, "array.prototype.findlastindex": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", - "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", + "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.2.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" } }, "array.prototype.flat": { @@ -36535,9 +36556,9 @@ } }, "eslint-module-utils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", - "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", + "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", "dev": true, "requires": { "debug": "^3.2.7" @@ -36565,27 +36586,29 @@ } }, "eslint-plugin-import": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", - "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", + "version": "2.31.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", + "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", "dev": true, "requires": { - "array-includes": "^3.1.7", - "array.prototype.findlastindex": "^1.2.3", + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.8", + "array.prototype.findlastindex": "^1.2.5", "array.prototype.flat": "^1.3.2", "array.prototype.flatmap": "^1.3.2", "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.8.0", - "hasown": "^2.0.0", - "is-core-module": "^2.13.1", + "eslint-module-utils": "^2.12.0", + "hasown": "^2.0.2", + "is-core-module": "^2.15.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", - "object.fromentries": "^2.0.7", - "object.groupby": "^1.0.1", - "object.values": "^1.1.7", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.0", "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.8", "tsconfig-paths": "^3.15.0" }, "dependencies": { @@ -38144,12 +38167,12 @@ } }, "is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", "dev": true, "requires": { - "hasown": "^2.0.0" + "hasown": "^2.0.2" } }, "is-data-descriptor": { @@ -44107,15 +44130,14 @@ } }, "object.groupby": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", - "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" } }, "object.hasown": { diff --git a/package.json b/package.json index f04822efe..cf01b376e 100644 --- a/package.json +++ b/package.json @@ -79,7 +79,7 @@ "eslint-config-prettier": "^9.1.0", "eslint-config-react-app": "^7.0.1", "eslint-plugin-flowtype": "^8.0.3", - "eslint-plugin-import": "^2.29.1", + "eslint-plugin-import": "^2.31.0", "eslint-plugin-jsx-a11y": "^6.9.0", "eslint-plugin-prettier": "^5.1.3", "eslint-plugin-react": "^7.34.2", From a59444ab947a02d178502ff5b335a7d23ef24868 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 1 Nov 2024 16:19:42 +0000 Subject: [PATCH 51/79] chore(deps): bump vite-plugin-html from 3.2.0 to 3.2.2 (#1065) --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 648ef38b2..891292ded 100644 --- a/package-lock.json +++ b/package-lock.json @@ -56,7 +56,7 @@ "usehooks-ts": "^3.1.0", "vite": "^5.4.8", "vite-plugin-environment": "^1.1.3", - "vite-plugin-html": "^3.2.0", + "vite-plugin-html": "^3.2.2", "vite-plugin-svgr": "^4.2.0", "vite-tsconfig-paths": "^4.2.0", "xrpl-client": "^2.4.0" @@ -27662,9 +27662,9 @@ } }, "node_modules/vite-plugin-html": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/vite-plugin-html/-/vite-plugin-html-3.2.0.tgz", - "integrity": "sha512-2VLCeDiHmV/BqqNn5h2V+4280KRgQzCFN47cst3WiNK848klESPQnzuC3okH5XHtgwHH/6s1Ho/YV6yIO0pgoQ==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/vite-plugin-html/-/vite-plugin-html-3.2.2.tgz", + "integrity": "sha512-vb9C9kcdzcIo/Oc3CLZVS03dL5pDlOFuhGlZYDCJ840BhWl/0nGeZWf3Qy7NlOayscY4Cm/QRgULCQkEZige5Q==", "dependencies": { "@rollup/pluginutils": "^4.2.0", "colorette": "^2.0.16", @@ -47532,9 +47532,9 @@ "requires": {} }, "vite-plugin-html": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/vite-plugin-html/-/vite-plugin-html-3.2.0.tgz", - "integrity": "sha512-2VLCeDiHmV/BqqNn5h2V+4280KRgQzCFN47cst3WiNK848klESPQnzuC3okH5XHtgwHH/6s1Ho/YV6yIO0pgoQ==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/vite-plugin-html/-/vite-plugin-html-3.2.2.tgz", + "integrity": "sha512-vb9C9kcdzcIo/Oc3CLZVS03dL5pDlOFuhGlZYDCJ840BhWl/0nGeZWf3Qy7NlOayscY4Cm/QRgULCQkEZige5Q==", "requires": { "@rollup/pluginutils": "^4.2.0", "colorette": "^2.0.16", diff --git a/package.json b/package.json index cf01b376e..ac4945fac 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,7 @@ "usehooks-ts": "^3.1.0", "vite": "^5.4.8", "vite-plugin-environment": "^1.1.3", - "vite-plugin-html": "^3.2.0", + "vite-plugin-html": "^3.2.2", "vite-plugin-svgr": "^4.2.0", "vite-tsconfig-paths": "^4.2.0", "xrpl-client": "^2.4.0" From 4cb097520fadbe1b2acbff7cd347b204e7f3c1c6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 1 Nov 2024 16:25:18 +0000 Subject: [PATCH 52/79] chore(deps): bump autoprefixer from 10.4.17 to 10.4.20 (#1066) --- package-lock.json | 26 +++++++++++++------------- package.json | 2 +- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/package-lock.json b/package-lock.json index 891292ded..f5af62c42 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,7 +16,7 @@ "@xrplf/isomorphic": "^1.0.0-beta.1", "@xrplf/prettier-config": "^1.9.1", "assert": "^2.1.0", - "autoprefixer": "^10.4.17", + "autoprefixer": "^10.4.20", "axios": "^1.6.5", "body-parser": "^1.20.2", "bunyan": "^1.8.15", @@ -7649,9 +7649,9 @@ } }, "node_modules/autoprefixer": { - "version": "10.4.17", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.17.tgz", - "integrity": "sha512-/cpVNRLSfhOtcGflT13P2794gVSgmPgTR+erw5ifnMLZb0UnSlkK4tquLmkd3BhA+nLo5tX8Cu0upUsGKvKbmg==", + "version": "10.4.20", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", + "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", "funding": [ { "type": "opencollective", @@ -7667,11 +7667,11 @@ } ], "dependencies": { - "browserslist": "^4.22.2", - "caniuse-lite": "^1.0.30001578", + "browserslist": "^4.23.3", + "caniuse-lite": "^1.0.30001646", "fraction.js": "^4.3.7", "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", + "picocolors": "^1.0.1", "postcss-value-parser": "^4.2.0" }, "bin": { @@ -33659,15 +33659,15 @@ "dev": true }, "autoprefixer": { - "version": "10.4.17", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.17.tgz", - "integrity": "sha512-/cpVNRLSfhOtcGflT13P2794gVSgmPgTR+erw5ifnMLZb0UnSlkK4tquLmkd3BhA+nLo5tX8Cu0upUsGKvKbmg==", + "version": "10.4.20", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", + "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", "requires": { - "browserslist": "^4.22.2", - "caniuse-lite": "^1.0.30001578", + "browserslist": "^4.23.3", + "caniuse-lite": "^1.0.30001646", "fraction.js": "^4.3.7", "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", + "picocolors": "^1.0.1", "postcss-value-parser": "^4.2.0" } }, diff --git a/package.json b/package.json index ac4945fac..2118505fd 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "@xrplf/isomorphic": "^1.0.0-beta.1", "@xrplf/prettier-config": "^1.9.1", "assert": "^2.1.0", - "autoprefixer": "^10.4.17", + "autoprefixer": "^10.4.20", "axios": "^1.6.5", "body-parser": "^1.20.2", "bunyan": "^1.8.15", From 5a93a6d133a11b27968536811266261f475d9e99 Mon Sep 17 00:00:00 2001 From: achowdhry-ripple <achowdhry@ripple.com> Date: Wed, 6 Nov 2024 12:48:16 -0500 Subject: [PATCH 53/79] Add Token Search Results (#1056) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## High Level Overview of Change In order to improve the usability of the search bar inside of Explorer, matching tokens will now auto-populate as a user is typing. The results are clickable and redirect to the respective token page. The data is pulled from XRPLMeta and cached inside of the Explorer backend to display an open sourced list of tokens and relevant statistics. Backend changes implement serverside caching of tokens data from XRPL Meta, and exposes an API from the explorer backend for search result querying. This is less expensive than the previous approach of websockets (which remain open for the duration of a user session) and are susceptible to rate limits on XRPLMeta's public node infrastructure. This also offers resilience in the case that the public XRPLMeta node has downtime. Desktop: <img width="906" alt="Screenshot 2024-11-05 at 4 36 33 PM" src="https://github.com/user-attachments/assets/8f19503d-74fc-474f-b946-534c028ce4a9"> Mobile: <img width="453" alt="Screenshot 2024-11-05 at 4 37 26 PM" src="https://github.com/user-attachments/assets/3ba5ba0d-1fe0-4bfd-97fe-a32f12420490"> <!-- Please include a summary/list of the changes. If too broad, please consider splitting into multiple PRs. --> ### Context of Change <!-- Please include the context of a change. If a bug fix, when was the bug introduced? What was the behavior? If a new feature, why was this architecture chosen? What were the alternatives? If a refactor, how is this better than the previous implementation? If there is a design document for this feature, please link it here. --> ### Type of Change <!-- Please check relevant options, delete irrelevant ones. --> - [ ] Bug fix (non-breaking change which fixes an issue) - [x] New feature (non-breaking change which adds functionality) - [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected) - [ ] Refactor (non-breaking change that only restructures code) - [ ] Tests (You added tests for code that already exists, or your new feature included in this PR) - [ ] Documentation Updates - [ ] Translation Updates - [ ] Release ### TypeScript/Hooks Update <!-- In an effort to modernize the codebase, you should convert the files that you work with to React Hooks and TypeScript. If this is not possible (e.g. it's too many changes, touching too many files, etc.) please explain why here. --> - [ ] Updated files to React Hooks - [ ] Updated files to TypeScript ## Before / After <!-- If just refactoring / back-end changes, this can be just an in-English description of the change at a technical level. If a UI change, screenshots should be included. --> ## Test Plan <!-- Please describe the tests that you ran to verify your changes and provide instructions so that others can reproduce. --> <!-- ## Future Tasks For future tasks related to PR. --> --------- Co-authored-by: Phu Pham <ppham@ripple.com> Co-authored-by: pdp2121 <71317875+pdp2121@users.noreply.github.com> Co-authored-by: Caleb Kniffen <ckniffen@ripple.com> --- public/locales/ca-CA/translations.json | 6 +- public/locales/en-US/translations.json | 8 +- public/locales/es-ES/translations.json | 6 +- public/locales/fr-FR/translations.json | 6 +- public/locales/ja-JP/translations.json | 6 +- public/locales/ko-KR/translations.json | 6 +- server/routes/v1/index.js | 2 + server/routes/v1/tokens.js | 121 +++++++++++++++ src/containers/Header/Search.tsx | 72 +++++++-- src/containers/Header/search.scss | 76 ++++++++++ src/containers/Header/test/Header.test.tsx | 6 +- src/containers/Header/test/Search.test.js | 6 +- src/containers/shared/analytics.ts | 1 + .../shared/components/DomainLink.tsx | 11 +- .../TokenSearchResults/TokenSearchResults.tsx | 95 ++++++++++++ .../TokenSearchResults/TokenSearchRow.tsx | 122 +++++++++++++++ .../components/TokenSearchResults/styles.scss | 142 ++++++++++++++++++ .../test/TokenSearchResults.test.js | 75 +++++++++ .../test/mock_data/tokens.json | 45 ++++++ .../components/test/DomainLink.test.tsx | 8 + src/containers/shared/utils.js | 1 + src/rippled/lib/rippled.js | 21 +++ 22 files changed, 822 insertions(+), 20 deletions(-) create mode 100644 server/routes/v1/tokens.js create mode 100644 src/containers/shared/components/TokenSearchResults/TokenSearchResults.tsx create mode 100644 src/containers/shared/components/TokenSearchResults/TokenSearchRow.tsx create mode 100644 src/containers/shared/components/TokenSearchResults/styles.scss create mode 100644 src/containers/shared/components/TokenSearchResults/test/TokenSearchResults.test.js create mode 100644 src/containers/shared/components/TokenSearchResults/test/mock_data/tokens.json diff --git a/public/locales/ca-CA/translations.json b/public/locales/ca-CA/translations.json index a39916bf5..5dfa97bdd 100644 --- a/public/locales/ca-CA/translations.json +++ b/public/locales/ca-CA/translations.json @@ -531,6 +531,9 @@ "asset_class": null, "trading_pairs": null, "deleted": null, + "holders": null, + "trustlines": null, + "website": null, "assets.mpt_tab_title": null, "assets.no_mpts_message": null, "transaction_type_name_MPTokenIssuanceCreate": null, @@ -553,5 +556,6 @@ "can_escrow": null, "can_trade": null, "can_transfer": null, - "can_clawback": null + "can_clawback": null, + "search_results_banner": null } diff --git a/public/locales/en-US/translations.json b/public/locales/en-US/translations.json index 58453bb65..4d8196175 100644 --- a/public/locales/en-US/translations.json +++ b/public/locales/en-US/translations.json @@ -21,7 +21,7 @@ "explorer": "Explorer", "xrpl_org": "XRPL.org", "github": "GitHub", - "header.search.placeholder": "Search by Address, Ledger or Txn", + "header.search.placeholder": "Search by Token, Address, Ledger or Txn", "xrp": "XRP", "xrpl_explorer": "XRPL Explorer", "ledgers": "Ledgers", @@ -540,6 +540,9 @@ "asset_class": "Asset Class", "trading_pairs": "Trading Pairs", "deleted": "Deleted", + "holders": "HOLDERS: {{holders}}", + "trustlines": " TRUSTLINES: {{trustlines}}", + "website": "Wesbite", "mpt_issuance_id": "MPT Issuance ID", "asset_scale": "Asset Scale", "metadata": "Metadata", @@ -553,5 +556,6 @@ "can_escrow": "Can Escrow", "can_trade": "Can Trade", "can_transfer": "Can Transfer", - "can_clawback": "Can Clawback" + "can_clawback": "Can Clawback", + "search_results_banner": "Token search by name and account is now available! Try searching for USD" } diff --git a/public/locales/es-ES/translations.json b/public/locales/es-ES/translations.json index d694f1db3..3f6ff0b18 100644 --- a/public/locales/es-ES/translations.json +++ b/public/locales/es-ES/translations.json @@ -527,6 +527,9 @@ "asset_class": null, "trading_pairs": null, "deleted": null, + "holders": null, + "trustlines": null, + "website": null, "assets.mpt_tab_title": null, "assets.no_mpts_message": null, "transaction_type_name_MPTokenIssuanceCreate": null, @@ -549,5 +552,6 @@ "can_escrow": null, "can_trade": null, "can_transfer": null, - "can_clawback": null + "can_clawback": null, + "search_results_banner": null } diff --git a/public/locales/fr-FR/translations.json b/public/locales/fr-FR/translations.json index d6683c855..5e2f48fde 100644 --- a/public/locales/fr-FR/translations.json +++ b/public/locales/fr-FR/translations.json @@ -528,6 +528,9 @@ "asset_class": null, "trading_pairs": null, "deleted": null, + "holders": null, + "trustlines": null, + "website": null, "assets.mpt_tab_title": null, "assets.no_mpts_message": null, "transaction_type_name_MPTokenIssuanceCreate": null, @@ -550,5 +553,6 @@ "can_escrow": null, "can_trade": null, "can_transfer": null, - "can_clawback": null + "can_clawback": null, + "search_results_banner": null } diff --git a/public/locales/ja-JP/translations.json b/public/locales/ja-JP/translations.json index 9ed8133ee..f5779f900 100644 --- a/public/locales/ja-JP/translations.json +++ b/public/locales/ja-JP/translations.json @@ -527,6 +527,9 @@ "asset_class": null, "trading_pairs": null, "deleted": null, + "holders": null, + "trustlines": null, + "website": null, "assets.mpt_tab_title": null, "assets.no_mpts_message": null, "transaction_type_name_MPTokenIssuanceCreate": null, @@ -549,5 +552,6 @@ "can_escrow": null, "can_trade": null, "can_transfer": null, - "can_clawback": null + "can_clawback": null, + "search_results_banner": null } diff --git a/public/locales/ko-KR/translations.json b/public/locales/ko-KR/translations.json index 148714cd5..f44ad2a32 100644 --- a/public/locales/ko-KR/translations.json +++ b/public/locales/ko-KR/translations.json @@ -525,6 +525,9 @@ "asset_class": null, "trading_pairs": null, "deleted": null, + "holders": null, + "trustlines": null, + "website": null, "assets.mpt_tab_title": null, "assets.no_mpts_message": null, "transaction_type_name_MPTokenIssuanceCreate": null, @@ -547,5 +550,6 @@ "can_escrow": null, "can_trade": null, "can_transfer": null, - "can_clawback": null + "can_clawback": null, + "search_results_banner": null } diff --git a/server/routes/v1/index.js b/server/routes/v1/index.js index 41fe59622..70428e99c 100644 --- a/server/routes/v1/index.js +++ b/server/routes/v1/index.js @@ -2,6 +2,7 @@ const api = require('express').Router() const getTokenDiscovery = require('./tokenDiscovery') const getHealth = require('./health') const getCurrentMetrics = require('./currentMetrics') +const getTokensSearch = require('./tokens') if (process.env.VITE_ENVIRONMENT === 'mainnet') { api.use('/token/top', getTokenDiscovery) @@ -13,6 +14,7 @@ if (process.env.VITE_ENVIRONMENT !== 'custom') { // these require a single hardcoded rippled node to connect to api.use('/health', getHealth) api.use('/metrics', getCurrentMetrics) + api.use('/tokens/search/:query', getTokensSearch) } module.exports = api diff --git a/server/routes/v1/tokens.js b/server/routes/v1/tokens.js new file mode 100644 index 000000000..c98198d63 --- /dev/null +++ b/server/routes/v1/tokens.js @@ -0,0 +1,121 @@ +const axios = require('axios') +const log = require('../../lib/logger')({ name: 'tokens search' }) + +const REFETCH_INTERVAL = 60 * 60 * 1000 // 1 hour +const XRPLMETA_QUERY_LIMIT = 1000 +const cachedTokenSearchList = { tokens: [], last_updated: null } + +const parseCurrency = (currency) => { + const NON_STANDARD_CODE_LENGTH = 40 + const LP_TOKEN_IDENTIFIER = '03' + + const hexToString = (hex) => { + let string = '' + for (let i = 0; i < hex.length; i += 2) { + const part = hex.substring(i, i + 2) + const code = parseInt(part, 16) + if (!isNaN(code) && code !== 0) { + string += String.fromCharCode(code) + } + } + return string + } + + return currency.length === NON_STANDARD_CODE_LENGTH && + currency?.substring(0, 2) !== LP_TOKEN_IDENTIFIER + ? hexToString(currency) + : currency +} + +async function fetchXRPLMetaTokens(offset) { + log.info(`caching tokens from ${process.env.XRPL_META_URL}`) + return axios + .get( + `https://${process.env.XRPL_META_URL}/tokens?trust_level=1&trust_level=2&trust_level=3`, + { + params: { + sort_by: 'holders', + offset, + limit: XRPLMETA_QUERY_LIMIT, + }, + }, + ) + .then((resp) => resp.data) + .catch((e) => log.error(e)) +} + +async function cacheXRPLMetaTokens() { + let offset = 0 + let tokensDataBatch = [] + const allTokensFetched = [] + + tokensDataBatch = await fetchXRPLMetaTokens(0) + const { count } = tokensDataBatch + while (offset < count) { + allTokensFetched.push(...tokensDataBatch.tokens) + offset += XRPLMETA_QUERY_LIMIT + // eslint-disable-next-line no-await-in-loop + tokensDataBatch = await fetchXRPLMetaTokens(offset) + } + + cachedTokenSearchList.tokens = allTokensFetched.filter( + (result) => + result.metrics.trustlines > 50 && + result.metrics.holders > 50 && + result.metrics.marketcap > 0 && + result.metrics.volume_7d > 0, + ) + cachedTokenSearchList.last_updated = Date.now() + + // nonstandard from XRPLMeta, check for hex codes in currencies and store parsed + cachedTokenSearchList.tokens.map((token) => ({ + ...token, + currency: parseCurrency(token.currency), + })) +} + +function startCaching() { + if (process.env.VITE_ENVIRONMENT !== 'mainnet') { + return + } + cacheXRPLMetaTokens() + setInterval(() => cacheXRPLMetaTokens(), REFETCH_INTERVAL) +} + +startCaching() + +function queryTokens(tokenList, query) { + const sanitizedQuery = query.toLowerCase() + + return tokenList.filter( + (token) => + token.currency?.toLowerCase().includes(sanitizedQuery) || + token.meta?.token?.name?.toLowerCase().includes(sanitizedQuery) || + token.meta?.issuer?.name?.toLowerCase().includes(sanitizedQuery) || + token.issuer?.toLowerCase().startsWith(sanitizedQuery), + ) +} + +function sleep(ms) { + return new Promise((resolve) => setTimeout(resolve, ms)) +} + +module.exports = async (req, res) => { + try { + log.info('getting tokens list for search') + const { query } = req.params + while (cachedTokenSearchList.tokens.length === 0) { + // eslint-disable-next-line no-await-in-loop -- necessary here to wait for cache to be filled + await sleep(1000) + } + const queriedTokens = await queryTokens(cachedTokenSearchList.tokens, query) + return res.status(200).json({ + result: 'success', + updated: cachedTokenSearchList.last_updated, + tokens: queriedTokens, + }) + } catch (error) { + log.error(error) + return res.status(error.code || 500).json({ message: error.message }) + } +} diff --git a/src/containers/Header/Search.tsx b/src/containers/Header/Search.tsx index 65f45e3f7..f1c0e8376 100644 --- a/src/containers/Header/Search.tsx +++ b/src/containers/Header/Search.tsx @@ -1,13 +1,20 @@ -import { KeyboardEventHandler, useContext } from 'react' +import { + FC, + KeyboardEventHandler, + useContext, + useEffect, + useState, +} from 'react' import { useTranslation } from 'react-i18next' import { useNavigate } from 'react-router-dom' import { XrplClient } from 'xrpl-client' - import { isValidClassicAddress, isValidXAddress, classicAddressToXAddress, } from 'ripple-address-codec' +import CloseIcon from '../shared/images/close.png' + import { useAnalytics } from '../shared/analytics' import SocketContext from '../shared/SocketContext' import { @@ -33,6 +40,7 @@ import { VALIDATOR_ROUTE, MPT_ROUTE, } from '../App/routes' +import TokenSearchResults from '../shared/components/TokenSearchResults/TokenSearchResults' const determineHashType = async (id: string, rippledContext: XrplClient) => { try { @@ -153,6 +161,26 @@ const normalizeAccount = (id: string) => { return id } +const SearchBanner: FC<{ setIsBannerVisible: (visible: boolean) => void }> = ({ + setIsBannerVisible, +}) => { + const { t } = useTranslation() + return ( + <div className="banner-search"> + <div className="banner-content"> + <div>{t('search_results_banner')}</div> + <button + className="banner-button" + type="button" + onClick={() => setIsBannerVisible(false)} + > + <img src={CloseIcon} alt="close-icon" width={10} height={10} /> + </button> + </div> + </div> + ) +} + export interface SearchProps { callback?: Function } @@ -163,6 +191,8 @@ export const Search = ({ callback = () => {} }: SearchProps) => { const socket = useContext(SocketContext) const navigate = useNavigate() + const [currentSearchInput, setCurrentSearchInput] = useState('') + const handleSearch = async (id: string) => { const strippedId = id.replace(/^["']|["']$/g, '') const route = await getRoute(strippedId, socket) @@ -178,16 +208,40 @@ export const Search = ({ callback = () => {} }: SearchProps) => { const onKeyDown: KeyboardEventHandler<HTMLInputElement> = (event) => { if (event.key === 'Enter') { handleSearch(event.currentTarget?.value?.trim()) + setCurrentSearchInput('') } } + const [isBannerVisible, setIsBannerVisible] = useState(true) + + useEffect(() => { + const timeoutId = setTimeout(() => { + setIsBannerVisible(false) + }, 10000) // Disappear after 10 seconds + + return () => clearTimeout(timeoutId) + }, []) + return ( - <div className="search"> - <input - type="text" - placeholder={t('header.search.placeholder')} - onKeyDown={onKeyDown} - /> - </div> + <> + {process.env.VITE_ENVIRONMENT === 'mainnet' && isBannerVisible && ( + <SearchBanner setIsBannerVisible={setIsBannerVisible} /> + )} + <div className="search"> + <input + type="text" + placeholder={t('header.search.placeholder')} + onKeyDown={onKeyDown} + value={currentSearchInput} + onChange={(e) => setCurrentSearchInput(e.target.value)} + /> + {process.env.VITE_ENVIRONMENT === 'mainnet' && ( + <TokenSearchResults + setCurrentSearchInput={setCurrentSearchInput} + currentSearchValue={currentSearchInput} + /> + )} + </div> + </> ) } diff --git a/src/containers/Header/search.scss b/src/containers/Header/search.scss index 56fa80425..f0676c7ae 100644 --- a/src/containers/Header/search.scss +++ b/src/containers/Header/search.scss @@ -1,5 +1,9 @@ @import '../shared/css/variables'; +.search-container { + position: relative; +} + .search { display: inline-block; width: 100%; @@ -23,9 +27,81 @@ } } +.search:not(:focus-within) .search-results { + display: none; +} + // Only show search bar when we know which network to query .header-no-network { .search { display: none; } } + +.normal { + opacity: 1; + transition: 0.5s; +} + +.normal.fade-out { + opacity: 0; +} + +.banner-search { + position: absolute; + top: 50px; + left: 10%; + width: 80%; + max-width: 600px; + padding: 12px 16px; + border-radius: 4px; + background-color: $blue-purple-30 !important; + color: $black !important; + + .banner-content { + display: flex; + justify-content: space-between; + font-size: 14px; + font-weight: 500; + } + + .banner-button { + width: 5px; + height: 5px; + padding: 5px; + padding-left: 10px; + border: none; + margin-top: -5px; + background: none; + color: inherit; + } + + @media (width >= 1350px) { + top: -60px; + } + @media (1000px <= width < 1350px) { + top: -70px; + } + @media (900px <= width < 1000px) { + top: -80px; + } + @media (750px <= width < 900px) { + top: 60px; + } + + @media (max-width: $tablet-portrait-upper-boundary){ + left: 5%; + width: 90%; + } +} + +.banner-search::after { + position: absolute; + top: 100%; + left: 30%; + border-width: 8px; + border-style: solid; + border-color: $blue-purple-30 transparent transparent transparent; + content: ""; + transform: translateX(-50%); +} diff --git a/src/containers/Header/test/Header.test.tsx b/src/containers/Header/test/Header.test.tsx index c1c715fab..635ed837d 100644 --- a/src/containers/Header/test/Header.test.tsx +++ b/src/containers/Header/test/Header.test.tsx @@ -4,11 +4,13 @@ import { BrowserRouter as Router } from 'react-router-dom' import configureMockStore from 'redux-mock-store' import thunk from 'redux-thunk' import { Provider } from 'react-redux' +import { QueryClientProvider } from 'react-query' import { initialState } from '../../../rootReducer' import i18n from '../../../i18n/testConfigEnglish' import SocketContext from '../../shared/SocketContext' import MockWsClient from '../../test/mockWsClient' import { Header } from '../index' +import { queryClient } from '../../shared/QueryClient' describe('Header component', () => { let client @@ -22,7 +24,9 @@ describe('Header component', () => { <Router> <Provider store={store}> <SocketContext.Provider value={client}> - <Header /> + <QueryClientProvider client={queryClient}> + <Header /> + </QueryClientProvider> </SocketContext.Provider> </Provider> </Router> diff --git a/src/containers/Header/test/Search.test.js b/src/containers/Header/test/Search.test.js index 027075dfc..d5fed3e7c 100644 --- a/src/containers/Header/test/Search.test.js +++ b/src/containers/Header/test/Search.test.js @@ -2,12 +2,14 @@ import { mount } from 'enzyme' import { I18nextProvider } from 'react-i18next' import { BrowserRouter as Router } from 'react-router-dom' import moxios from 'moxios' +import { QueryClientProvider } from 'react-query' import i18n from '../../../i18n/testConfig' import { Search } from '../Search' import * as rippled from '../../../rippled/lib/rippled' import SocketContext from '../../shared/SocketContext' import MockWsClient from '../../test/mockWsClient' import { flushPromises } from '../../test/utils' +import { queryClient } from '../../shared/QueryClient' describe('Search component', () => { const createWrapper = () => { @@ -16,7 +18,9 @@ describe('Search component', () => { <I18nextProvider i18n={i18n}> <SocketContext.Provider value={client}> <Router> - <Search /> + <QueryClientProvider client={queryClient}> + <Search /> + </QueryClientProvider> </Router> </SocketContext.Provider> </I18nextProvider>, diff --git a/src/containers/shared/analytics.ts b/src/containers/shared/analytics.ts index b11d5c349..305c43521 100644 --- a/src/containers/shared/analytics.ts +++ b/src/containers/shared/analytics.ts @@ -10,6 +10,7 @@ export type AnalyticsEventNames = | 'network_switch' | 'load_more' | 'not_found' + | 'token_search_click' export interface AnalyticsFields { network?: string diff --git a/src/containers/shared/components/DomainLink.tsx b/src/containers/shared/components/DomainLink.tsx index 512482d35..4afe8e831 100644 --- a/src/containers/shared/components/DomainLink.tsx +++ b/src/containers/shared/components/DomainLink.tsx @@ -5,13 +5,15 @@ export interface Props { className?: string decode?: boolean domain: string + keepProtocol?: boolean } // Matches a protocol (e.g. 'http://' or 'https://') at the start of a string. const PROTOCOL_REGEX = /^([a-z][a-z0-9+\-.]*):\/\// +const PROTOCOL_REMOVAL_REGEX = /^(https?:\/\/)?(.*?)(\/)?$/ const DomainLink = (props: Props) => { - const { className, decode = false, domain } = props + const { className, decode = false, domain, keepProtocol = true } = props // If decode is true, decode the domain const decodedDomain = decode ? decodeHex(domain) : domain @@ -26,14 +28,19 @@ const DomainLink = (props: Props) => { href = href.replace('ipfs://', 'https://ipfs.io/ipfs/') } + const domainText = keepProtocol + ? decodedDomain + : decodedDomain.replace(PROTOCOL_REMOVAL_REGEX, '$2') + return ( <a className={classnames('domain', className)} rel="noopener noreferrer" target="_blank" href={href} + onClick={(event) => event.stopPropagation()} > - {decode ? decodeHex(domain) : domain} + {domainText} </a> ) } diff --git a/src/containers/shared/components/TokenSearchResults/TokenSearchResults.tsx b/src/containers/shared/components/TokenSearchResults/TokenSearchResults.tsx new file mode 100644 index 000000000..d2418319d --- /dev/null +++ b/src/containers/shared/components/TokenSearchResults/TokenSearchResults.tsx @@ -0,0 +1,95 @@ +import { useContext } from 'react' +import './styles.scss' + +import { useTranslation } from 'react-i18next' +import axios from 'axios' +import { useQuery } from 'react-query' +import { useAnalytics } from '../../analytics' +import { TokenSearchRow } from './TokenSearchRow' +import SocketContext from '../../SocketContext' +import Log from '../../log' +import { getAccountLines } from '../../../../rippled/lib/rippled' +import { FETCH_INTERVAL_XRP_USD_ORACLE_MILLIS } from '../../utils' + +const ORACLE_ACCOUNT = 'rXUMMaPpZqPutoRszR29jtC8amWq3APkx' + +interface SearchResultsProps { + currentSearchValue: string + setCurrentSearchInput: (string) => void +} + +const SearchResults = ({ + currentSearchValue, + setCurrentSearchInput, +}: SearchResultsProps): JSX.Element | null => { + const analytics = useAnalytics() + const { t } = useTranslation() + const rippledSocket = useContext(SocketContext) + + const { data: XRPUSDPrice = 0.0 } = useQuery( + ['fetchXRPToUSDRate'], + () => fetchXRPToUSDRate(), + { + refetchInterval: FETCH_INTERVAL_XRP_USD_ORACLE_MILLIS, + onError: (error) => { + Log.error(error) + return 0.0 + }, + }, + ) + + const { data: tokens = [] } = useQuery( + ['fetchTokens', currentSearchValue], + () => fetchTokens(), + { + enabled: !!currentSearchValue, + staleTime: 0, + keepPreviousData: false, + onError: (error) => Log.error(error), + }, + ) + + const fetchXRPToUSDRate = () => + getAccountLines(rippledSocket, ORACLE_ACCOUNT, 1).then( + (accountLines) => accountLines.lines[0]?.limit ?? 0.0, + ) + + const fetchTokens = () => { + if (currentSearchValue === '') { + return [] // Return an empty list if search is cleared + } + + return axios + .get(`/api/v1/tokens/search/${currentSearchValue}`) + .then((response) => response.data.tokens) + } + + const onLinkClick = () => { + analytics.track('token_search_click', { + search_category: 'token', + search_term: currentSearchValue, + }) + + // clear current search on navigation + setCurrentSearchInput('') + } + + return tokens.length > 0 ? ( + <div className="search-results-menu"> + <div className="search-results-header"> + {t('tokens')} ({tokens.length}) + </div> + + {tokens.map((token) => ( + <TokenSearchRow + token={token} + onClick={onLinkClick} + xrpPrice={XRPUSDPrice} + key={`${token.currency}.${token.issuer}`} + /> + ))} + </div> + ) : null +} + +export default SearchResults diff --git a/src/containers/shared/components/TokenSearchResults/TokenSearchRow.tsx b/src/containers/shared/components/TokenSearchResults/TokenSearchRow.tsx new file mode 100644 index 000000000..0b1e4066a --- /dev/null +++ b/src/containers/shared/components/TokenSearchResults/TokenSearchRow.tsx @@ -0,0 +1,122 @@ +import { Link } from 'react-router-dom' +import { useTranslation } from 'react-i18next' +import { FC } from 'react' +import { Amount } from '../Amount' +import { localizeNumber } from '../../utils' +import Currency from '../Currency' +import DomainLink from '../DomainLink' + +const parsePrice = (dollarPrice: string, xrpPrice: number): number => { + const parsedDollar = Number(dollarPrice) + return Number((parsedDollar * xrpPrice).toFixed(6)) +} + +const TokenLogo: FC<{ token: any }> = ({ token }) => + token && token.meta?.token.icon ? ( + <object data={token.meta.token.icon} className="result-row-icon"> + <div className="result-row-icon" /> + </object> + ) : ( + <div className="result-row-icon no-logo" /> + ) + +const TokenName: FC<{ token: any }> = ({ token }) => + token && token.meta?.token.name ? ( + <div> + ( + {token.meta.token.name + .trim() + .toUpperCase() + .replace('(', '') + .replace(')', '')} + ) + </div> + ) : null + +const IssuerAddress: FC<{ token: any; onClick: any }> = ({ token, onClick }) => + token && (token.issuer || token.meta?.issuer) ? ( + <Link + to={`/accounts/${token.issuer}`} + onClick={onClick} + className="issuer-link" + > + <div className="issuer-name"> + {token.meta.issuer.name ? `${token.meta.issuer.name} (` : token.issuer} + </div> + <div className="issuer-address truncate">{token.issuer}</div> + <div>)</div> + </Link> + ) : null + +interface SearchResultRowProps { + token: any + onClick: () => void + xrpPrice: number +} + +export const TokenSearchRow = ({ + token, + onClick, + xrpPrice, +}: SearchResultRowProps): JSX.Element => { + const { t } = useTranslation() + + return ( + <Link + to={`/token/${token.currency}.${token.issuer}`} + className="search-result-row" + onClick={onClick} + > + <div className="result-name-line"> + <div className="result-logo"> + <TokenLogo token={token} /> + </div> + <div className="result-currency"> + <Currency currency={token.currency} /> + </div> + <div className="result-token-name"> + <TokenName token={token} /> + </div> + <div className="metric-chip"> + <Amount + value={{ + currency: 'USD', + amount: parsePrice(token.metrics.price, xrpPrice), + }} + displayIssuer={false} + modifier={ + parsePrice(token.metrics.price, xrpPrice) === 0 ? '~' : undefined + } + /> + </div> + <div className="metric-chip"> + {t('holders', { + holders: localizeNumber(token.metrics.holders), + })} + </div> + <div className="metric-chip"> + {t('trustlines', { + trustlines: localizeNumber(token.metrics.trustlines), + })} + </div> + </div> + <div className="result-issuer-line"> + <div className="issuer-title">{t('issuer')}:</div> + <IssuerAddress token={token} onClick={onClick} /> + </div> + <div className="result-website-line"> + {token.meta.issuer.domain && ( + <> + <div>{t('website')}:</div> + <div className="result-domain-link"> + <DomainLink + domain={token.meta.issuer.domain} + keepProtocol={false} + /> + </div> + </> + )} + </div> + </Link> + ) +} diff --git a/src/containers/shared/components/TokenSearchResults/styles.scss b/src/containers/shared/components/TokenSearchResults/styles.scss new file mode 100644 index 000000000..beec5b9de --- /dev/null +++ b/src/containers/shared/components/TokenSearchResults/styles.scss @@ -0,0 +1,142 @@ +@import '../../css/variables'; + +.search-results-menu { + position: absolute; + z-index: 1; + width: 100%; + max-height: 400px; + border: 1px solid $black-80; + border-radius: 8px; + border-top: 0px; + margin-top: 6px; + background-color: $black-100; + box-shadow: 2px 2px 15px 0px rgb(131 131 134 / 30%); + overflow-wrap: anywhere; + overflow-y: scroll; + scrollbar-color: $black-50 transparent; + scrollbar-width: thin; + + @media (width < 900px) { + max-width: calc(100% - 32px); + } +} + +.search-results-header { + padding: 0.5rem 0rem 0.5rem 1rem; + background-color: $black-80; + font-size: 14px; + font-weight: 500; +} + +.result-row-icon { + width: 1.5rem; + height: 1.5rem; + border-radius: 16px; +} + +.no-logo { + border-radius: 50%; + background-color: $black-50; +} + +.result-currency { + flex-shrink: 0; + padding-top: 2px; + padding-right: 0px; + padding-bottom: 2px; + white-space: nowrap; +} + +.result-token-name { + padding-top: 2px; + padding-bottom: 2px; + margin-left: 3px; +} + +.result-logo { + padding-right: 14px; + padding-left: 1rem; +} + +.search-result-row { + position: relative; + display: flex; + width: 100%; + box-sizing: border-box; + padding-top: 13px; + padding-bottom: 13px; + color: $black-0; + font-size: 14px; + font-weight: 500; + + &:hover { + background-color: $black-70; + color: $black-0; + cursor: pointer; + } +} + +.result-name-line { + display: flex; + flex-wrap: wrap; + align-items: center; + margin-bottom: 0.5rem; + white-space: nowrap; +} + +.result-issuer-line { + display: flex; + overflow: hidden; + padding: 0 1rem; + margin-bottom: 0.5rem; + color: $black-50; +} + +.result-website-line { + display: flex; + flex-direction: row; + padding: 0 1rem; + color: $black-50; +} + +.metric-chip { + padding: 2px 12px; + border: 1px solid $black-70; + border-radius: 100px; + margin-right: 8px; + margin-left: 8px; + background-color: $black-100; + font-size: 12px; + font-weight: 600; + + &:hover { + background-color: $black-100; + cursor: pointer; + } +} + +.issuer-link { + display: inline-flex !important; + overflow: hidden; + margin-left: 0.25rem; + color: $black-50; + + &:hover { + background: transparent; + color: $blue-purple-30; + } + +} + +.issuer-address { + @extend %truncate; +} + +.issuer-name, +.issuer-title { + flex-shrink: 0; +} + +.result-domain-link { + margin-left: 0.25rem; +} diff --git a/src/containers/shared/components/TokenSearchResults/test/TokenSearchResults.test.js b/src/containers/shared/components/TokenSearchResults/test/TokenSearchResults.test.js new file mode 100644 index 000000000..a3392b28a --- /dev/null +++ b/src/containers/shared/components/TokenSearchResults/test/TokenSearchResults.test.js @@ -0,0 +1,75 @@ +import { mount } from 'enzyme' +import moxios from 'moxios' +import i18n from '../../../../../i18n/testConfig' +import testTokens from './mock_data/tokens.json' +import SocketContext from '../../../SocketContext' +import SearchResults from '../TokenSearchResults' +import MockWsClient from '../../../../test/mockWsClient' +import { QuickHarness } from '../../../../test/utils' + +const testQuery = 'test' + +describe('Testing tokens search', () => { + let client + let wrapper + + const createWrapper = () => { + const searchURL = `/api/v1/tokens/search/${testQuery}` + moxios.stubRequest(searchURL, { + status: 200, + response: testTokens, + }) + return mount( + <QuickHarness i18n={i18n}> + <SocketContext.Provider value={client}> + <SearchResults + currentSearchValue={testQuery} + setCurrentSearchInput={jest.fn()} + /> + </SocketContext.Provider> + </QuickHarness>, + ) + } + + beforeEach(() => { + moxios.install() + client = new MockWsClient() + wrapper = createWrapper() + }) + + afterEach(() => { + client.close() + moxios.uninstall() + wrapper.unmount() + }) + + it('renders without crashing', () => { + wrapper.update() + const searchMenu = wrapper.find('.search-results-menu') + expect(searchMenu.length).toEqual(1) + }) + + it('renders all tokens ', () => { + wrapper.update() + const searchMenu = wrapper.find('.search-results-menu') + + expect(searchMenu.find('.search-results-header').at(0).html()).toEqual( + `<div class="search-results-header">tokens (1)</div>`, + ) + expect(searchMenu.find('.currency').at(0).html()).toEqual( + `<span class="currency">SOLO</span>`, + ) + expect(searchMenu.find('.issuer-name').at(0).html()).toEqual( + `<div class="issuer-name">Sologenic (</div>`, + ) + expect(searchMenu.find('.issuer-address').at(0).html()).toEqual( + `<div class="issuer-address truncate">rsoLo2S1kiGeCcn6hCUXVrCpGMWLrRrLZz</div>`, + ) + expect( + searchMenu.find('.search-result-row').at(0).find('.metric-chip').length, + ).toEqual(3) + expect(searchMenu.find('.domain').at(0).html()).toEqual( + `<a class="domain" rel="noopener noreferrer" target="_blank" href="https://sologenic.com">sologenic.com</a>`, + ) + }) +}) diff --git a/src/containers/shared/components/TokenSearchResults/test/mock_data/tokens.json b/src/containers/shared/components/TokenSearchResults/test/mock_data/tokens.json new file mode 100644 index 000000000..eae88720e --- /dev/null +++ b/src/containers/shared/components/TokenSearchResults/test/mock_data/tokens.json @@ -0,0 +1,45 @@ +{ + "tokens": [ + { + "currency": "534F4C4F00000000000000000000000000000000", + "issuer": "rsoLo2S1kiGeCcn6hCUXVrCpGMWLrRrLZz", + "meta": { + "token": { + "description": "SOLO is the utility token for the Sologenic ecosystem. It can be used for covering fees when minting NFTs on their platform.", + "icon": "https://s1.xrplmeta.org/icon/C40439709A.png", + "name": "SOLO", + "trust_level": 3 + }, + "issuer": { + "domain": "sologenic.com", + "icon": "https://s1.xrplmeta.org/icon/C40439709A.png", + "kyc": true, + "name": "Sologenic", + "trust_level": 3, + "weblinks": [ + { + "url": "https://sologenic.com" + }, + { + "url": "https://twitter.com/realSologenic", + "type": "socialmedia" + } + ] + } + }, + "metrics": { + "trustlines": 283920, + "holders": 227379, + "supply": "399057268.13655", + "marketcap": "73737104.7448899", + "price": "0.184476049183255", + "volume_24h": "97065.7035689995", + "volume_7d": "1387820.55867489", + "exchanges_24h": "3446", + "exchanges_7d": "38976", + "takers_24h": "125", + "takers_7d": "627" + } + } + ] +} diff --git a/src/containers/shared/components/test/DomainLink.test.tsx b/src/containers/shared/components/test/DomainLink.test.tsx index 71e589e8a..57e83ad77 100644 --- a/src/containers/shared/components/test/DomainLink.test.tsx +++ b/src/containers/shared/components/test/DomainLink.test.tsx @@ -61,4 +61,12 @@ describe('DomainLink', () => { ) wrapper.unmount() }) + + it('handles domain link with protocol removal', () => { + const url = 'https://example.com/' + const wrapper = mount(<DomainLink domain={url} keepProtocol={false} />) + expect(wrapper.find('a').props().className).toEqual('domain') + expect(wrapper.find('a').text()).toEqual('example.com') + expect(wrapper.find('a').props().href).toEqual('https://example.com/') + }) }) diff --git a/src/containers/shared/utils.js b/src/containers/shared/utils.js index 9046410e0..9580b4754 100644 --- a/src/containers/shared/utils.js +++ b/src/containers/shared/utils.js @@ -21,6 +21,7 @@ export const FETCH_INTERVAL_MILLIS = 5000 export const FETCH_INTERVAL_VHS_MILLIS = 60 * 1000 // 1 minute export const FETCH_INTERVAL_NODES_MILLIS = 60000 export const FETCH_INTERVAL_ERROR_MILLIS = 300 +export const FETCH_INTERVAL_XRP_USD_ORACLE_MILLIS = 60 * 1000 export const DECIMAL_REGEX = /^\d+$/ export const HASH256_REGEX = /[0-9A-Fa-f]{64}/i diff --git a/src/rippled/lib/rippled.js b/src/rippled/lib/rippled.js index dc7737309..85900ffa9 100644 --- a/src/rippled/lib/rippled.js +++ b/src/rippled/lib/rippled.js @@ -620,6 +620,26 @@ const getAccountMPTs = ( return resp }) +const getAccountLines = (rippledSocket, account, limit) => + query(rippledSocket, { + command: 'account_lines', + account, + limit, + }).then((resp) => { + if (resp.error === 'actNotFound') { + throw new Error('account not found', 404) + } + if (resp.error === 'invalidParams') { + return undefined + } + + if (resp.error_message) { + throw new Error(resp.error_message, 500) + } + + return resp + }) + export { getLedger, getLedgerEntry, @@ -642,4 +662,5 @@ export { getFeature, getMPTIssuance, getAccountMPTs, + getAccountLines, } From e3ddec5f60ffed41bdaee6cd6002ae707e25882b Mon Sep 17 00:00:00 2001 From: achowdhry-ripple <achowdhry@ripple.com> Date: Mon, 11 Nov 2024 15:52:23 -0500 Subject: [PATCH 54/79] Remove token search filters for trust level 3 (#1079) ## High Level Overview of Change We want important tokens like RLUSD to not be filtered out. Since this token is new, it doesn't meet the minimum requirements of the filters we put in place previously. To remain partial, we now exclude all trust_level 3 tokens from the filters, which fixes this issue for RLUSD as well. <!-- Please include a summary/list of the changes. If too broad, please consider splitting into multiple PRs. --> ### Context of Change <!-- Please include the context of a change. If a bug fix, when was the bug introduced? What was the behavior? If a new feature, why was this architecture chosen? What were the alternatives? If a refactor, how is this better than the previous implementation? If there is a design document for this feature, please link it here. --> ### Type of Change <!-- Please check relevant options, delete irrelevant ones. --> - [ ] Bug fix (non-breaking change which fixes an issue) - [ ] New feature (non-breaking change which adds functionality) - [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected) - [ ] Refactor (non-breaking change that only restructures code) - [ ] Tests (You added tests for code that already exists, or your new feature included in this PR) - [ ] Documentation Updates - [ ] Translation Updates - [ ] Release ### TypeScript/Hooks Update <!-- In an effort to modernize the codebase, you should convert the files that you work with to React Hooks and TypeScript. If this is not possible (e.g. it's too many changes, touching too many files, etc.) please explain why here. --> - [ ] Updated files to React Hooks - [ ] Updated files to TypeScript ## Before / After <!-- If just refactoring / back-end changes, this can be just an in-English description of the change at a technical level. If a UI change, screenshots should be included. --> ## Test Plan <!-- Please describe the tests that you ran to verify your changes and provide instructions so that others can reproduce. --> <!-- ## Future Tasks For future tasks related to PR. --> --- server/routes/v1/tokens.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/server/routes/v1/tokens.js b/server/routes/v1/tokens.js index c98198d63..072dcf5ab 100644 --- a/server/routes/v1/tokens.js +++ b/server/routes/v1/tokens.js @@ -60,10 +60,11 @@ async function cacheXRPLMetaTokens() { cachedTokenSearchList.tokens = allTokensFetched.filter( (result) => - result.metrics.trustlines > 50 && - result.metrics.holders > 50 && - result.metrics.marketcap > 0 && - result.metrics.volume_7d > 0, + (result.metrics.trustlines > 50 && + result.metrics.holders > 50 && + result.metrics.marketcap > 0 && + result.metrics.volume_7d > 0) || + result.meta.issuer.trust_level === 3, ) cachedTokenSearchList.last_updated = Date.now() From 4a15a3c8df81d6cee7beaf847723efc701bad1d5 Mon Sep 17 00:00:00 2001 From: achowdhry-ripple <achowdhry@ripple.com> Date: Mon, 11 Nov 2024 15:58:40 -0500 Subject: [PATCH 55/79] Add xrplmeta url to example env file (#1078) ## High Level Overview of Change Add URL to template based on recent token search release <!-- Please include a summary/list of the changes. If too broad, please consider splitting into multiple PRs. --> ### Context of Change <!-- Please include the context of a change. If a bug fix, when was the bug introduced? What was the behavior? If a new feature, why was this architecture chosen? What were the alternatives? If a refactor, how is this better than the previous implementation? If there is a design document for this feature, please link it here. --> ### Type of Change <!-- Please check relevant options, delete irrelevant ones. --> - [ ] Bug fix (non-breaking change which fixes an issue) - [ ] New feature (non-breaking change which adds functionality) - [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected) - [ ] Refactor (non-breaking change that only restructures code) - [ ] Tests (You added tests for code that already exists, or your new feature included in this PR) - [ ] Documentation Updates - [ ] Translation Updates - [ ] Release ### TypeScript/Hooks Update <!-- In an effort to modernize the codebase, you should convert the files that you work with to React Hooks and TypeScript. If this is not possible (e.g. it's too many changes, touching too many files, etc.) please explain why here. --> - [ ] Updated files to React Hooks - [ ] Updated files to TypeScript ## Before / After <!-- If just refactoring / back-end changes, this can be just an in-English description of the change at a technical level. If a UI change, screenshots should be included. --> ## Test Plan <!-- Please describe the tests that you ran to verify your changes and provide instructions so that others can reproduce. --> <!-- ## Future Tasks For future tasks related to PR. --> --- .env.example | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.env.example b/.env.example index 3538fb224..097322764 100644 --- a/.env.example +++ b/.env.example @@ -16,6 +16,9 @@ VITE_XAHAU_TESTNET_LINK= VITE_CUSTOMNETWORK_LINK= VITE_VALIDATOR=vl.ripple.com +#External data source - XRPLMeta node for token search results +XRPL_META_URL=s1.xrplmeta.org + #XRPL Environment: mainnet, testnet, devnet, amm, hooks_testnet, custom VITE_ENVIRONMENT=mainnet From 531a59a6ee3c5e04acc8b1b753a4185706fc0e3c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 12 Nov 2024 12:43:45 -0500 Subject: [PATCH 56/79] chore(deps-dev): bump sass from 1.76.0 to 1.80.5 (#1069) Bumps [sass](https://github.com/sass/dart-sass) from 1.76.0 to 1.80.5. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/sass/dart-sass/releases">sass's releases</a>.</em></p> <blockquote> <h2>Dart Sass 1.80.5</h2> <p>To install Sass 1.80.5, download one of the packages below and <a href="https://katiek2.github.io/path-doc/">add it to your PATH</a>, or see <a href="https://sass-lang.com/install">the Sass website</a> for full installation instructions.</p> <h1>Changes</h1> <h3>Embedded Host</h3> <ul> <li>Don't produce phantom <code>@import</code> deprecations when using an importer with the legacy API.</li> </ul> <p>See the <a href="https://github.com/sass/dart-sass/blob/master/CHANGELOG.md#1805">full changelog</a> for changes in earlier releases.</p> <h2>Dart Sass 1.80.4</h2> <p>To install Sass 1.80.4, download one of the packages below and <a href="https://katiek2.github.io/path-doc/">add it to your PATH</a>, or see <a href="https://sass-lang.com/install">the Sass website</a> for full installation instructions.</p> <h1>Changes</h1> <ul> <li>No user-visible changes.</li> </ul> <p>See the <a href="https://github.com/sass/dart-sass/blob/master/CHANGELOG.md#1804">full changelog</a> for changes in earlier releases.</p> <h2>Dart Sass 1.80.3</h2> <p>To install Sass 1.80.3, download one of the packages below and <a href="https://katiek2.github.io/path-doc/">add it to your PATH</a>, or see <a href="https://sass-lang.com/install">the Sass website</a> for full installation instructions.</p> <h1>Changes</h1> <ul> <li> <p>Fix a bug where <code>@import url("...")</code> would crash in plain CSS files.</p> </li> <li> <p>Improve consistency of how warnings are emitted by different parts of the compiler. This should result in minimal user-visible changes, but different types of warnings should now respond more reliably to flags like <code>--quiet</code>, <code>--verbose</code>, and <code>--silence-deprecation</code>.</p> </li> </ul> <p>See the <a href="https://github.com/sass/dart-sass/blob/master/CHANGELOG.md#1803">full changelog</a> for changes in earlier releases.</p> <h2>Dart Sass 1.80.2</h2> <p>To install Sass 1.80.2, download one of the packages below and <a href="https://katiek2.github.io/path-doc/">add it to your PATH</a>, or see <a href="https://sass-lang.com/install">the Sass website</a> for full installation instructions.</p> <h1>Changes</h1> <ul> <li>Fix a bug where deprecation warnings were incorrectly emitted for the plain-CSS <code>invert()</code> function.</li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/sass/dart-sass/blob/main/CHANGELOG.md">sass's changelog</a>.</em></p> <blockquote> <h2>1.80.5</h2> <h3>Embedded Host</h3> <ul> <li>Don't produce phantom <code>@import</code> deprecations when using an importer with the legacy API.</li> </ul> <h2>1.80.4</h2> <ul> <li>No user-visible changes.</li> </ul> <h2>1.80.3</h2> <ul> <li> <p>Fix a bug where <code>@import url("...")</code> would crash in plain CSS files.</p> </li> <li> <p>Improve consistency of how warnings are emitted by different parts of the compiler. This should result in minimal user-visible changes, but different types of warnings should now respond more reliably to flags like <code>--quiet</code>, <code>--verbose</code>, and <code>--silence-deprecation</code>.</p> </li> </ul> <h2>1.80.2</h2> <ul> <li>Fix a bug where deprecation warnings were incorrectly emitted for the plain-CSS <code>invert()</code> function.</li> </ul> <h2>1.80.1</h2> <ul> <li>Fix a bug where repeated deprecation warnings were not automatically limited.</li> </ul> <h2>1.80.0</h2> <ul> <li><code>@import</code> is now officially deprecated, as are global built-in functions that are available within built-in modules. See <a href="https://sass-lang.com/blog/import-is-deprecated/">the Sass blog post</a> for more details on the deprecation process.</li> </ul> <h3>Embedded Host</h3> <ul> <li>Fix an error that would sometimes occur when deprecation warnings were emitted when using a custom importer with the legacy API.</li> </ul> <h2>1.79.6</h2> <ul> <li> <p>Fix a bug where Sass would add an extra <code>*/</code> after loud comments with whitespace after an explicit <code>*/</code> in the indented syntax.</p> </li> <li> <p><strong>Potentially breaking bug fix:</strong> Adding text after an explicit <code>*/</code> in the indented syntax is now an error, rather than silently generating invalid CSS.</p> </li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/sass/dart-sass/commit/d14ea754e96861c9d7cb7f2b4bc75a40364eaf31"><code>d14ea75</code></a> Cut a release for <a href="https://redirect.github.com/sass/embedded-host-node/issues/342">sass/embedded-host-node#342</a> (<a href="https://redirect.github.com/sass/dart-sass/issues/2407">#2407</a>)</li> <li><a href="https://github.com/sass/dart-sass/commit/7129352416784039902fbea8848c5b54f957e05b"><code>7129352</code></a> Fix dart analyze warnings (<a href="https://redirect.github.com/sass/dart-sass/issues/2412">#2412</a>)</li> <li><a href="https://github.com/sass/dart-sass/commit/5c63839328b19782bc9a434a77f6028561906b96"><code>5c63839</code></a> Bump the sass_api dependency along with package versions (<a href="https://redirect.github.com/sass/dart-sass/issues/2408">#2408</a>)</li> <li><a href="https://github.com/sass/dart-sass/commit/477b596e0527f004205dbbdf6b6433c2907799ce"><code>477b596</code></a> Merge pull request <a href="https://redirect.github.com/sass/dart-sass/issues/2403">#2403</a> from sass/parser-variable</li> <li><a href="https://github.com/sass/dart-sass/commit/fd5cff0e7908d73d48de6a8484dde888079cbb44"><code>fd5cff0</code></a> Add sass-parser support for the <code>@warn</code> rule</li> <li><a href="https://github.com/sass/dart-sass/commit/251c75714331728b1336d72710c490068de2bfef"><code>251c757</code></a> Add sass-parser support for variable declarations</li> <li><a href="https://github.com/sass/dart-sass/commit/20397efa740929f95f3e18db996af84b81a0fd6f"><code>20397ef</code></a> Add grinder tasks to bump package versions (<a href="https://redirect.github.com/sass/dart-sass/issues/2405">#2405</a>)</li> <li><a href="https://github.com/sass/dart-sass/commit/c907bcb57281b51efbd7b0957ac8a4d0bead8818"><code>c907bcb</code></a> Expose Expression.isCalculationSafe to sass_api (<a href="https://redirect.github.com/sass/dart-sass/issues/2404">#2404</a>)</li> <li><a href="https://github.com/sass/dart-sass/commit/37a05f97f3ee3cec8156e5a87076c0526477bdff"><code>37a05f9</code></a> Enable AOT build for android-riscv64 (<a href="https://redirect.github.com/sass/dart-sass/issues/2399">#2399</a>)</li> <li><a href="https://github.com/sass/dart-sass/commit/473ddf9100cce7b96d3ef01b8e060f8d4517a37e"><code>473ddf9</code></a> Add <code>sass-parser</code> support for the <code>@use</code> rule (<a href="https://redirect.github.com/sass/dart-sass/issues/2389">#2389</a>)</li> <li>Additional commits viewable in <a href="https://github.com/sass/dart-sass/compare/1.76.0...1.80.5">compare view</a></li> </ul> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) </details> --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Justin Reynolds <justinr1234@gmail.com> Co-authored-by: Ashray Chowdhry <achowdhry@ripple.com> --- package-lock.json | 605 +++++++++++++++++- package.json | 2 +- .../BalanceSelector/balance-selector.scss | 2 +- .../Accounts/AccountHeader/styles.scss | 2 +- src/containers/Accounts/styles.scss | 2 +- src/containers/Amendment/amendment.scss | 4 +- .../Amendments/amendmentsTable.scss | 4 +- src/containers/App/app.scss | 2 +- src/containers/CustomNetworkHome/index.scss | 2 +- src/containers/Footer/footer.scss | 2 +- .../Header/LanguagePicker/LanguagePicker.scss | 2 +- .../Header/NavigationMenu/NavigationMenu.scss | 2 +- .../Header/NetworkPicker/NetworkPicker.scss | 2 +- src/containers/Header/header.scss | 2 +- src/containers/Header/search.scss | 2 +- src/containers/Ledger/ledger.scss | 2 +- src/containers/Ledgers/css/ledgerMetrics.scss | 2 +- src/containers/Ledgers/css/ledgers.scss | 2 +- src/containers/Ledgers/css/legend.scss | 2 +- src/containers/MPT/MPTHeader/styles.scss | 4 +- src/containers/MPT/styles.scss | 2 +- src/containers/NFT/NFTHeader/styles.scss | 4 +- src/containers/NFT/NFTTabs/styles.scss | 4 +- src/containers/NFT/styles.scss | 2 +- src/containers/Network/css/barchart.scss | 2 +- src/containers/Network/css/hexagons.scss | 2 +- src/containers/Network/css/map.scss | 2 +- src/containers/Network/css/nodesTable.scss | 4 +- src/containers/Network/css/style.scss | 2 +- .../Network/css/validatorsTable.scss | 2 +- src/containers/NoMatch/nomatch.scss | 2 +- .../PayStrings/PayStringHeader/styles.scss | 2 +- .../PayStringMappingsTable/styles.scss | 2 +- src/containers/PayStrings/styles.scss | 2 +- src/containers/Token/DEXPairs/styles.scss | 2 +- src/containers/Token/TokenHeader/styles.scss | 4 +- src/containers/Token/styles.scss | 2 +- .../Transactions/DetailTab/detailTab.scss | 2 +- src/containers/Transactions/simpleTab.scss | 2 +- src/containers/Transactions/transaction.scss | 2 +- src/containers/Validators/historyTab.scss | 2 +- src/containers/Validators/simpleTab.scss | 2 +- src/containers/Validators/validator.scss | 2 +- src/containers/Validators/votingTab.scss | 2 +- .../shared/components/Dropdown/dropdown.scss | 2 +- .../shared/components/JsonView/json-view.scss | 2 +- .../components/Notification/styles.scss | 2 +- .../components/TransactionTable/styles.scss | 2 +- src/containers/shared/css/box.scss | 2 +- src/containers/shared/css/form.scss | 2 +- src/containers/shared/css/global.scss | 4 +- src/containers/shared/css/simpleTab.scss | 2 +- src/containers/shared/css/table.scss | 2 +- src/containers/shared/css/tabs.scss | 2 +- src/containers/shared/css/tooltip.scss | 2 +- src/containers/shared/css/txlabel.scss | 2 +- src/containers/shared/css/txstatus.scss | 2 +- 57 files changed, 638 insertions(+), 95 deletions(-) diff --git a/package-lock.json b/package-lock.json index f5af62c42..482783fdc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -100,7 +100,7 @@ "react-error-overlay": "6.0.11", "react-test-renderer": "^17.0.2", "redux-mock-store": "^1.5.1", - "sass": "^1.76.0", + "sass": "^1.80.5", "source-map-explorer": "^2.5.3", "stylelint": "^15.11.0", "stylelint-config-idiomatic-order": "^10.0.0", @@ -5428,6 +5428,337 @@ "node": ">= 8" } }, + "node_modules/@parcel/watcher": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.4.1.tgz", + "integrity": "sha512-HNjmfLQEVRZmHRET336f20H/8kOozUGwk7yajvsonjNxbj2wBTK1WsQuHkD5yYh9RxFGL2EyDHryOihOwUoKDA==", + "devOptional": true, + "dependencies": { + "detect-libc": "^1.0.3", + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "node-addon-api": "^7.0.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.4.1", + "@parcel/watcher-darwin-arm64": "2.4.1", + "@parcel/watcher-darwin-x64": "2.4.1", + "@parcel/watcher-freebsd-x64": "2.4.1", + "@parcel/watcher-linux-arm-glibc": "2.4.1", + "@parcel/watcher-linux-arm64-glibc": "2.4.1", + "@parcel/watcher-linux-arm64-musl": "2.4.1", + "@parcel/watcher-linux-x64-glibc": "2.4.1", + "@parcel/watcher-linux-x64-musl": "2.4.1", + "@parcel/watcher-win32-arm64": "2.4.1", + "@parcel/watcher-win32-ia32": "2.4.1", + "@parcel/watcher-win32-x64": "2.4.1" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.4.1.tgz", + "integrity": "sha512-LOi/WTbbh3aTn2RYddrO8pnapixAziFl6SMxHM69r3tvdSm94JtCenaKgk1GRg5FJ5wpMCpHeW+7yqPlvZv7kg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.4.1.tgz", + "integrity": "sha512-ln41eihm5YXIY043vBrrHfn94SIBlqOWmoROhsMVTSXGh0QahKGy77tfEywQ7v3NywyxBBkGIfrWRHm0hsKtzA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.4.1.tgz", + "integrity": "sha512-yrw81BRLjjtHyDu7J61oPuSoeYWR3lDElcPGJyOvIXmor6DEo7/G2u1o7I38cwlcoBHQFULqF6nesIX3tsEXMg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.4.1.tgz", + "integrity": "sha512-TJa3Pex/gX3CWIx/Co8k+ykNdDCLx+TuZj3f3h7eOjgpdKM+Mnix37RYsYU4LHhiYJz3DK5nFCCra81p6g050w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.4.1.tgz", + "integrity": "sha512-4rVYDlsMEYfa537BRXxJ5UF4ddNwnr2/1O4MHM5PjI9cvV2qymvhwZSFgXqbS8YoTk5i/JR0L0JDs69BUn45YA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.4.1.tgz", + "integrity": "sha512-BJ7mH985OADVLpbrzCLgrJ3TOpiZggE9FMblfO65PlOCdG++xJpKUJ0Aol74ZUIYfb8WsRlUdgrZxKkz3zXWYA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.4.1.tgz", + "integrity": "sha512-p4Xb7JGq3MLgAfYhslU2SjoV9G0kI0Xry0kuxeG/41UfpjHGOhv7UoUDAz/jb1u2elbhazy4rRBL8PegPJFBhA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.4.1.tgz", + "integrity": "sha512-s9O3fByZ/2pyYDPoLM6zt92yu6P4E39a03zvO0qCHOTjxmt3GHRMLuRZEWhWLASTMSrrnVNWdVI/+pUElJBBBg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.4.1.tgz", + "integrity": "sha512-L2nZTYR1myLNST0O632g0Dx9LyMNHrn6TOt76sYxWLdff3cB22/GZX2UPtJnaqQPdCRoszoY5rcOj4oMTtp5fQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.4.1.tgz", + "integrity": "sha512-Uq2BPp5GWhrq/lcuItCHoqxjULU1QYEcyjSO5jqqOK8RNFDBQnenMMx4gAl3v8GiWa59E9+uDM7yZ6LxwUIfRg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-ia32": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.4.1.tgz", + "integrity": "sha512-maNRit5QQV2kgHFSYwftmPBxiuK5u4DXjbXx7q6eKjq5dsLXZ4FJiVvlcw35QXzk0KrUecJmuVFbj4uV9oYrcw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.4.1.tgz", + "integrity": "sha512-+DvS92F9ezicfswqrvIRM2njcYJbd5mb9CUgtrHCHmvn7pPPa+nMDRu1o1bYYz/l5IB2NVGNJWiH7h1E58IF2A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher/node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "devOptional": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@parcel/watcher/node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "devOptional": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@parcel/watcher/node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "devOptional": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/@parcel/watcher/node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "devOptional": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/@parcel/watcher/node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "devOptional": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, "node_modules/@paystring/utils": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@paystring/utils/-/utils-2.0.0.tgz", @@ -8546,7 +8877,7 @@ }, "node_modules/binary-extensions": { "version": "2.2.0", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -9002,7 +9333,7 @@ }, "node_modules/chokidar": { "version": "3.5.2", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "anymatch": "~3.1.2", @@ -9022,7 +9353,7 @@ }, "node_modules/chokidar/node_modules/anymatch": { "version": "3.1.2", - "devOptional": true, + "dev": true, "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", @@ -9034,7 +9365,7 @@ }, "node_modules/chokidar/node_modules/braces": { "version": "3.0.2", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "fill-range": "^7.0.1" @@ -9045,7 +9376,7 @@ }, "node_modules/chokidar/node_modules/fill-range": { "version": "7.0.1", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" @@ -9068,7 +9399,7 @@ }, "node_modules/chokidar/node_modules/is-number": { "version": "7.0.0", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=0.12.0" @@ -9076,7 +9407,7 @@ }, "node_modules/chokidar/node_modules/normalize-path": { "version": "3.0.0", - "devOptional": true, + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -9084,7 +9415,7 @@ }, "node_modules/chokidar/node_modules/to-regex-range": { "version": "5.0.1", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "is-number": "^7.0.0" @@ -10357,7 +10688,7 @@ }, "node_modules/detect-libc": { "version": "1.0.3", - "dev": true, + "devOptional": true, "license": "Apache-2.0", "bin": { "detect-libc": "bin/detect-libc.js" @@ -14125,7 +14456,7 @@ }, "node_modules/is-binary-path": { "version": "2.1.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "binary-extensions": "^2.0.0" @@ -22400,6 +22731,12 @@ "tslib": "^2.0.3" } }, + "node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "devOptional": true + }, "node_modules/node-fetch": { "version": "2.6.12", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.12.tgz", @@ -23878,7 +24215,7 @@ }, "node_modules/readdirp": { "version": "3.6.0", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "picomatch": "^2.2.1" @@ -24592,12 +24929,13 @@ } }, "node_modules/sass": { - "version": "1.76.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.76.0.tgz", - "integrity": "sha512-nc3LeqvF2FNW5xGF1zxZifdW3ffIz5aBb7I7tSvOoNu7z1RQ6pFt9MBuiPtjgaI62YWrM/txjWlOCFiGtf2xpw==", + "version": "1.80.5", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.80.5.tgz", + "integrity": "sha512-TQd2aoQl/+zsxRMEDSxVdpPIqeq9UFc6pr7PzkugiTx3VYCFPUaa3P4RrBQsqok4PO200Vkz0vXQBNlg7W907g==", "devOptional": true, "dependencies": { - "chokidar": ">=3.0.0 <4.0.0", + "@parcel/watcher": "^2.4.1", + "chokidar": "^4.0.0", "immutable": "^4.0.0", "source-map-js": ">=0.6.2 <2.0.0" }, @@ -24608,6 +24946,34 @@ "node": ">=14.0.0" } }, + "node_modules/sass/node_modules/chokidar": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.1.tgz", + "integrity": "sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==", + "devOptional": true, + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/sass/node_modules/readdirp": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.2.tgz", + "integrity": "sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==", + "devOptional": true, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/sax": { "version": "1.2.4", "dev": true, @@ -32177,6 +32543,159 @@ "fastq": "^1.6.0" } }, + "@parcel/watcher": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.4.1.tgz", + "integrity": "sha512-HNjmfLQEVRZmHRET336f20H/8kOozUGwk7yajvsonjNxbj2wBTK1WsQuHkD5yYh9RxFGL2EyDHryOihOwUoKDA==", + "devOptional": true, + "requires": { + "@parcel/watcher-android-arm64": "2.4.1", + "@parcel/watcher-darwin-arm64": "2.4.1", + "@parcel/watcher-darwin-x64": "2.4.1", + "@parcel/watcher-freebsd-x64": "2.4.1", + "@parcel/watcher-linux-arm-glibc": "2.4.1", + "@parcel/watcher-linux-arm64-glibc": "2.4.1", + "@parcel/watcher-linux-arm64-musl": "2.4.1", + "@parcel/watcher-linux-x64-glibc": "2.4.1", + "@parcel/watcher-linux-x64-musl": "2.4.1", + "@parcel/watcher-win32-arm64": "2.4.1", + "@parcel/watcher-win32-ia32": "2.4.1", + "@parcel/watcher-win32-x64": "2.4.1", + "detect-libc": "^1.0.3", + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "node-addon-api": "^7.0.0" + }, + "dependencies": { + "braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "devOptional": true, + "requires": { + "fill-range": "^7.1.1" + } + }, + "fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "devOptional": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "devOptional": true + }, + "micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "devOptional": true, + "requires": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "devOptional": true, + "requires": { + "is-number": "^7.0.0" + } + } + } + }, + "@parcel/watcher-android-arm64": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.4.1.tgz", + "integrity": "sha512-LOi/WTbbh3aTn2RYddrO8pnapixAziFl6SMxHM69r3tvdSm94JtCenaKgk1GRg5FJ5wpMCpHeW+7yqPlvZv7kg==", + "dev": true, + "optional": true + }, + "@parcel/watcher-darwin-arm64": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.4.1.tgz", + "integrity": "sha512-ln41eihm5YXIY043vBrrHfn94SIBlqOWmoROhsMVTSXGh0QahKGy77tfEywQ7v3NywyxBBkGIfrWRHm0hsKtzA==", + "dev": true, + "optional": true + }, + "@parcel/watcher-darwin-x64": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.4.1.tgz", + "integrity": "sha512-yrw81BRLjjtHyDu7J61oPuSoeYWR3lDElcPGJyOvIXmor6DEo7/G2u1o7I38cwlcoBHQFULqF6nesIX3tsEXMg==", + "dev": true, + "optional": true + }, + "@parcel/watcher-freebsd-x64": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.4.1.tgz", + "integrity": "sha512-TJa3Pex/gX3CWIx/Co8k+ykNdDCLx+TuZj3f3h7eOjgpdKM+Mnix37RYsYU4LHhiYJz3DK5nFCCra81p6g050w==", + "dev": true, + "optional": true + }, + "@parcel/watcher-linux-arm-glibc": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.4.1.tgz", + "integrity": "sha512-4rVYDlsMEYfa537BRXxJ5UF4ddNwnr2/1O4MHM5PjI9cvV2qymvhwZSFgXqbS8YoTk5i/JR0L0JDs69BUn45YA==", + "dev": true, + "optional": true + }, + "@parcel/watcher-linux-arm64-glibc": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.4.1.tgz", + "integrity": "sha512-BJ7mH985OADVLpbrzCLgrJ3TOpiZggE9FMblfO65PlOCdG++xJpKUJ0Aol74ZUIYfb8WsRlUdgrZxKkz3zXWYA==", + "dev": true, + "optional": true + }, + "@parcel/watcher-linux-arm64-musl": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.4.1.tgz", + "integrity": "sha512-p4Xb7JGq3MLgAfYhslU2SjoV9G0kI0Xry0kuxeG/41UfpjHGOhv7UoUDAz/jb1u2elbhazy4rRBL8PegPJFBhA==", + "dev": true, + "optional": true + }, + "@parcel/watcher-linux-x64-glibc": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.4.1.tgz", + "integrity": "sha512-s9O3fByZ/2pyYDPoLM6zt92yu6P4E39a03zvO0qCHOTjxmt3GHRMLuRZEWhWLASTMSrrnVNWdVI/+pUElJBBBg==", + "dev": true, + "optional": true + }, + "@parcel/watcher-linux-x64-musl": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.4.1.tgz", + "integrity": "sha512-L2nZTYR1myLNST0O632g0Dx9LyMNHrn6TOt76sYxWLdff3cB22/GZX2UPtJnaqQPdCRoszoY5rcOj4oMTtp5fQ==", + "dev": true, + "optional": true + }, + "@parcel/watcher-win32-arm64": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.4.1.tgz", + "integrity": "sha512-Uq2BPp5GWhrq/lcuItCHoqxjULU1QYEcyjSO5jqqOK8RNFDBQnenMMx4gAl3v8GiWa59E9+uDM7yZ6LxwUIfRg==", + "dev": true, + "optional": true + }, + "@parcel/watcher-win32-ia32": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.4.1.tgz", + "integrity": "sha512-maNRit5QQV2kgHFSYwftmPBxiuK5u4DXjbXx7q6eKjq5dsLXZ4FJiVvlcw35QXzk0KrUecJmuVFbj4uV9oYrcw==", + "dev": true, + "optional": true + }, + "@parcel/watcher-win32-x64": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.4.1.tgz", + "integrity": "sha512-+DvS92F9ezicfswqrvIRM2njcYJbd5mb9CUgtrHCHmvn7pPPa+nMDRu1o1bYYz/l5IB2NVGNJWiH7h1E58IF2A==", + "dev": true, + "optional": true + }, "@paystring/utils": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@paystring/utils/-/utils-2.0.0.tgz", @@ -34311,7 +34830,7 @@ }, "binary-extensions": { "version": "2.2.0", - "devOptional": true + "dev": true }, "bindings": { "version": "1.5.0", @@ -34612,7 +35131,7 @@ }, "chokidar": { "version": "3.5.2", - "devOptional": true, + "dev": true, "requires": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -34626,7 +35145,7 @@ "dependencies": { "anymatch": { "version": "3.1.2", - "devOptional": true, + "dev": true, "requires": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -34634,14 +35153,14 @@ }, "braces": { "version": "3.0.2", - "devOptional": true, + "dev": true, "requires": { "fill-range": "^7.0.1" } }, "fill-range": { "version": "7.0.1", - "devOptional": true, + "dev": true, "requires": { "to-regex-range": "^5.0.1" } @@ -34653,15 +35172,15 @@ }, "is-number": { "version": "7.0.0", - "devOptional": true + "dev": true }, "normalize-path": { "version": "3.0.0", - "devOptional": true + "dev": true }, "to-regex-range": { "version": "5.0.1", - "devOptional": true, + "dev": true, "requires": { "is-number": "^7.0.0" } @@ -35566,7 +36085,7 @@ }, "detect-libc": { "version": "1.0.3", - "dev": true + "devOptional": true }, "detect-newline": { "version": "3.1.0", @@ -38140,7 +38659,7 @@ }, "is-binary-path": { "version": "2.1.0", - "devOptional": true, + "dev": true, "requires": { "binary-extensions": "^2.0.0" } @@ -43857,6 +44376,12 @@ "tslib": "^2.0.3" } }, + "node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "devOptional": true + }, "node-fetch": { "version": "2.6.12", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.12.tgz", @@ -44792,7 +45317,7 @@ }, "readdirp": { "version": "3.6.0", - "devOptional": true, + "dev": true, "requires": { "picomatch": "^2.2.1" } @@ -45282,14 +45807,32 @@ } }, "sass": { - "version": "1.76.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.76.0.tgz", - "integrity": "sha512-nc3LeqvF2FNW5xGF1zxZifdW3ffIz5aBb7I7tSvOoNu7z1RQ6pFt9MBuiPtjgaI62YWrM/txjWlOCFiGtf2xpw==", + "version": "1.80.5", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.80.5.tgz", + "integrity": "sha512-TQd2aoQl/+zsxRMEDSxVdpPIqeq9UFc6pr7PzkugiTx3VYCFPUaa3P4RrBQsqok4PO200Vkz0vXQBNlg7W907g==", "devOptional": true, "requires": { - "chokidar": ">=3.0.0 <4.0.0", + "@parcel/watcher": "^2.4.1", + "chokidar": "^4.0.0", "immutable": "^4.0.0", "source-map-js": ">=0.6.2 <2.0.0" + }, + "dependencies": { + "chokidar": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.1.tgz", + "integrity": "sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==", + "devOptional": true, + "requires": { + "readdirp": "^4.0.1" + } + }, + "readdirp": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.2.tgz", + "integrity": "sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==", + "devOptional": true + } } }, "sax": { diff --git a/package.json b/package.json index 2118505fd..f042929bf 100644 --- a/package.json +++ b/package.json @@ -95,7 +95,7 @@ "react-error-overlay": "6.0.11", "react-test-renderer": "^17.0.2", "redux-mock-store": "^1.5.1", - "sass": "^1.76.0", + "sass": "^1.80.5", "source-map-explorer": "^2.5.3", "stylelint": "^15.11.0", "stylelint-config-idiomatic-order": "^10.0.0", diff --git a/src/containers/Accounts/AccountHeader/BalanceSelector/balance-selector.scss b/src/containers/Accounts/AccountHeader/BalanceSelector/balance-selector.scss index dc6c77018..30860340e 100644 --- a/src/containers/Accounts/AccountHeader/BalanceSelector/balance-selector.scss +++ b/src/containers/Accounts/AccountHeader/BalanceSelector/balance-selector.scss @@ -1,4 +1,4 @@ -@import 'src/containers/shared/css/variables'; +@use 'src/containers/shared/css/variables' as *; .balance-selector { position: relative; diff --git a/src/containers/Accounts/AccountHeader/styles.scss b/src/containers/Accounts/AccountHeader/styles.scss index fc35853f0..d76a9033d 100644 --- a/src/containers/Accounts/AccountHeader/styles.scss +++ b/src/containers/Accounts/AccountHeader/styles.scss @@ -1,4 +1,4 @@ -@import '../../shared/css/variables'; +@use '../../shared/css/variables' as *; .account-header { margin-bottom: 16px; diff --git a/src/containers/Accounts/styles.scss b/src/containers/Accounts/styles.scss index 3296b7a74..1b68962d2 100644 --- a/src/containers/Accounts/styles.scss +++ b/src/containers/Accounts/styles.scss @@ -1,4 +1,4 @@ -@import '../shared/css/variables'; +@use '../shared/css/variables'; .accounts-page { .loader { diff --git a/src/containers/Amendment/amendment.scss b/src/containers/Amendment/amendment.scss index 987963d30..2dd439d43 100644 --- a/src/containers/Amendment/amendment.scss +++ b/src/containers/Amendment/amendment.scss @@ -1,5 +1,5 @@ -@import '../shared/css/variables'; -@import '../shared/css/table'; +@use '../shared/css/variables' as *; +@use '../shared/css/table'; .amendment-summary { width: 80%; diff --git a/src/containers/Amendments/amendmentsTable.scss b/src/containers/Amendments/amendmentsTable.scss index ee533cffb..15805be26 100644 --- a/src/containers/Amendments/amendmentsTable.scss +++ b/src/containers/Amendments/amendmentsTable.scss @@ -1,5 +1,5 @@ -@import '../shared/css/variables'; -@import '../shared/css/table'; +@use '../shared/css/variables' as *; +@use '../shared/css/table'; .amendments-page{ .summary { diff --git a/src/containers/App/app.scss b/src/containers/App/app.scss index 38316f6ed..aa0fe1b4d 100644 --- a/src/containers/App/app.scss +++ b/src/containers/App/app.scss @@ -1,4 +1,4 @@ -@import '../shared/css/variables'; +@use '../shared/css/variables' as *; .app { flex-grow: 1; diff --git a/src/containers/CustomNetworkHome/index.scss b/src/containers/CustomNetworkHome/index.scss index 00a97ca2d..180e748a3 100644 --- a/src/containers/CustomNetworkHome/index.scss +++ b/src/containers/CustomNetworkHome/index.scss @@ -1,4 +1,4 @@ -@import '../shared/css/variables'; +@use '../shared/css/variables' as *; .app { position: relative; diff --git a/src/containers/Footer/footer.scss b/src/containers/Footer/footer.scss index 7af646bb7..fdee0125e 100644 --- a/src/containers/Footer/footer.scss +++ b/src/containers/Footer/footer.scss @@ -1,4 +1,4 @@ -@import '../shared/css/variables'; +@use '../shared/css/variables' as *; .footer { position: relative; diff --git a/src/containers/Header/LanguagePicker/LanguagePicker.scss b/src/containers/Header/LanguagePicker/LanguagePicker.scss index b3513de99..5cc3a89fe 100644 --- a/src/containers/Header/LanguagePicker/LanguagePicker.scss +++ b/src/containers/Header/LanguagePicker/LanguagePicker.scss @@ -1,4 +1,4 @@ -@import '../../shared/css/variables'; +@use '../../shared/css/variables' as *; .language-picker { margin-left: auto; diff --git a/src/containers/Header/NavigationMenu/NavigationMenu.scss b/src/containers/Header/NavigationMenu/NavigationMenu.scss index 2272b0668..f94c69c6d 100644 --- a/src/containers/Header/NavigationMenu/NavigationMenu.scss +++ b/src/containers/Header/NavigationMenu/NavigationMenu.scss @@ -1,6 +1,6 @@ @use 'sass:math'; -@import '../../shared/css/variables'; +@use '../../shared/css/variables' as *; $menu-toggle-size: 25px; $menu-toggle-line-spacing: math.div($menu-toggle-size, 4); diff --git a/src/containers/Header/NetworkPicker/NetworkPicker.scss b/src/containers/Header/NetworkPicker/NetworkPicker.scss index 9a60d0100..d905c3361 100644 --- a/src/containers/Header/NetworkPicker/NetworkPicker.scss +++ b/src/containers/Header/NetworkPicker/NetworkPicker.scss @@ -1,4 +1,4 @@ -@import '../../shared/css/variables'; +@use '../../shared/css/variables' as *; @mixin dropdown-network-item( $background, diff --git a/src/containers/Header/header.scss b/src/containers/Header/header.scss index 140c659ba..06704d86e 100644 --- a/src/containers/Header/header.scss +++ b/src/containers/Header/header.scss @@ -1,4 +1,4 @@ -@import '../shared/css/variables'; +@use '../shared/css/variables' as *; /* Header */ .header { diff --git a/src/containers/Header/search.scss b/src/containers/Header/search.scss index f0676c7ae..b599fd295 100644 --- a/src/containers/Header/search.scss +++ b/src/containers/Header/search.scss @@ -1,4 +1,4 @@ -@import '../shared/css/variables'; +@use '../shared/css/variables' as *; .search-container { position: relative; diff --git a/src/containers/Ledger/ledger.scss b/src/containers/Ledger/ledger.scss index f086ff41d..990f1e4e3 100644 --- a/src/containers/Ledger/ledger.scss +++ b/src/containers/Ledger/ledger.scss @@ -1,4 +1,4 @@ -@import '../shared/css/variables'; +@use '../shared/css/variables' as *; .ledger-page { margin: 0 auto; diff --git a/src/containers/Ledgers/css/ledgerMetrics.scss b/src/containers/Ledgers/css/ledgerMetrics.scss index 1e12bb03b..23938904b 100644 --- a/src/containers/Ledgers/css/ledgerMetrics.scss +++ b/src/containers/Ledgers/css/ledgerMetrics.scss @@ -1,4 +1,4 @@ -@import '../../shared/css/variables'; +@use '../../shared/css/variables' as *; .metrics { overflow: hidden; diff --git a/src/containers/Ledgers/css/ledgers.scss b/src/containers/Ledgers/css/ledgers.scss index 1af05ce8f..0ae1812cc 100644 --- a/src/containers/Ledgers/css/ledgers.scss +++ b/src/containers/Ledgers/css/ledgers.scss @@ -1,4 +1,4 @@ -@import '../../shared/css/variables'; +@use '../../shared/css/variables' as *; $ledgers-margin-large: 32px; $ledgers-border: 1px solid $black-70; diff --git a/src/containers/Ledgers/css/legend.scss b/src/containers/Ledgers/css/legend.scss index c59f5d21f..20db2f293 100644 --- a/src/containers/Ledgers/css/legend.scss +++ b/src/containers/Ledgers/css/legend.scss @@ -1,4 +1,4 @@ -@import '../../shared/css/variables'; +@use '../../shared/css/variables' as *; .legend { display: flex; diff --git a/src/containers/MPT/MPTHeader/styles.scss b/src/containers/MPT/MPTHeader/styles.scss index 682ea36e4..8a7715c88 100644 --- a/src/containers/MPT/MPTHeader/styles.scss +++ b/src/containers/MPT/MPTHeader/styles.scss @@ -1,5 +1,5 @@ -@import '../../shared/css/variables'; -@import '../../shared/css/table'; +@use '../../shared/css/variables' as *; +@use '../../shared/css/table'; .mpt-header-container { .mpt-bottom-container { diff --git a/src/containers/MPT/styles.scss b/src/containers/MPT/styles.scss index 51c0c4fc3..f4b0d3245 100644 --- a/src/containers/MPT/styles.scss +++ b/src/containers/MPT/styles.scss @@ -1,4 +1,4 @@ -@import '../shared/css/variables'; +@use '../shared/css/variables'; .mpt-page { width: 100%; diff --git a/src/containers/NFT/NFTHeader/styles.scss b/src/containers/NFT/NFTHeader/styles.scss index 656931f8f..30c3519ee 100644 --- a/src/containers/NFT/NFTHeader/styles.scss +++ b/src/containers/NFT/NFTHeader/styles.scss @@ -1,5 +1,5 @@ -@import '../../shared/css/variables'; -@import '../../shared/css/table'; +@use '../../shared/css/variables' as *; +@use '../../shared/css/table'; .nft-header-container { .nft-bottom-container { diff --git a/src/containers/NFT/NFTTabs/styles.scss b/src/containers/NFT/NFTTabs/styles.scss index b831aa028..6c68075a4 100644 --- a/src/containers/NFT/NFTTabs/styles.scss +++ b/src/containers/NFT/NFTTabs/styles.scss @@ -1,5 +1,5 @@ -@import '../../shared/css/variables'; -@import '../../shared/css/table'; +@use '../../shared/css/variables' as *; +@use '../../shared/css/table'; .nft-tabs { margin-top: 60px; diff --git a/src/containers/NFT/styles.scss b/src/containers/NFT/styles.scss index 59c9e6f90..d03f6e9f0 100644 --- a/src/containers/NFT/styles.scss +++ b/src/containers/NFT/styles.scss @@ -1,4 +1,4 @@ -@import '../shared/css/variables'; +@use '../shared/css/variables' as *; .nft-page { width: 100%; diff --git a/src/containers/Network/css/barchart.scss b/src/containers/Network/css/barchart.scss index dacce66c6..48a3fddb2 100644 --- a/src/containers/Network/css/barchart.scss +++ b/src/containers/Network/css/barchart.scss @@ -1,4 +1,4 @@ -@import '../../shared/css/variables'; +@use '../../shared/css/variables' as *; .y-label { fill: $black-40; diff --git a/src/containers/Network/css/hexagons.scss b/src/containers/Network/css/hexagons.scss index 5bd70e421..08413b393 100644 --- a/src/containers/Network/css/hexagons.scss +++ b/src/containers/Network/css/hexagons.scss @@ -1,4 +1,4 @@ -@import '../../shared/css/variables'; +@use '../../shared/css/variables' as *; .validators-container { .validators { diff --git a/src/containers/Network/css/map.scss b/src/containers/Network/css/map.scss index f5aefe624..ff58dd19e 100644 --- a/src/containers/Network/css/map.scss +++ b/src/containers/Network/css/map.scss @@ -1,4 +1,4 @@ -@import '../../shared/css/variables'; +@use '../../shared/css/variables' as *; .nodes-map { position: relative; diff --git a/src/containers/Network/css/nodesTable.scss b/src/containers/Network/css/nodesTable.scss index 7d8757b25..147fbc66b 100644 --- a/src/containers/Network/css/nodesTable.scss +++ b/src/containers/Network/css/nodesTable.scss @@ -1,5 +1,5 @@ -@import '../../shared/css/variables'; -@import '../../shared/css/table'; +@use '../../shared/css/variables' as *; +@use '../../shared/css/table'; .nodes-table { position: relative; diff --git a/src/containers/Network/css/style.scss b/src/containers/Network/css/style.scss index 091fa0268..c2f1f30e0 100644 --- a/src/containers/Network/css/style.scss +++ b/src/containers/Network/css/style.scss @@ -1,4 +1,4 @@ -@import '../../shared/css/variables'; +@use '../../shared/css/variables' as *; .network-page { // Needs additional bottom margin to break up table from the horizontal diff --git a/src/containers/Network/css/validatorsTable.scss b/src/containers/Network/css/validatorsTable.scss index ed5958bce..0b2aab55d 100644 --- a/src/containers/Network/css/validatorsTable.scss +++ b/src/containers/Network/css/validatorsTable.scss @@ -1,4 +1,4 @@ -@import '../../shared/css/variables'; +@use '../../shared/css/variables' as *; .validators-table { position: relative; diff --git a/src/containers/NoMatch/nomatch.scss b/src/containers/NoMatch/nomatch.scss index 899425ef9..7459af506 100644 --- a/src/containers/NoMatch/nomatch.scss +++ b/src/containers/NoMatch/nomatch.scss @@ -1,4 +1,4 @@ -@import '../shared/css/variables'; +@use '../shared/css/variables' as *; .no-match { margin: 10% auto; diff --git a/src/containers/PayStrings/PayStringHeader/styles.scss b/src/containers/PayStrings/PayStringHeader/styles.scss index 73d59bdc2..8eb0170ae 100644 --- a/src/containers/PayStrings/PayStringHeader/styles.scss +++ b/src/containers/PayStrings/PayStringHeader/styles.scss @@ -1,4 +1,4 @@ -@import '../../shared/css/variables'; +@use '../../shared/css/variables' as *; .paystring-header { margin-bottom: 16px; diff --git a/src/containers/PayStrings/PayStringMappingsTable/styles.scss b/src/containers/PayStrings/PayStringMappingsTable/styles.scss index 867362f17..b40727079 100644 --- a/src/containers/PayStrings/PayStringMappingsTable/styles.scss +++ b/src/containers/PayStrings/PayStringMappingsTable/styles.scss @@ -1,4 +1,4 @@ -@import '../../shared/css/variables'; +@use '../../shared/css/variables' as *; .paystring-table { .col-network, diff --git a/src/containers/PayStrings/styles.scss b/src/containers/PayStrings/styles.scss index 7c7201294..8912ed2c1 100644 --- a/src/containers/PayStrings/styles.scss +++ b/src/containers/PayStrings/styles.scss @@ -1,4 +1,4 @@ -@import '../shared/css/variables'; +@use '../shared/css/variables' as *; .paystring-page { width: 100%; diff --git a/src/containers/Token/DEXPairs/styles.scss b/src/containers/Token/DEXPairs/styles.scss index 11b19add9..20c52eab4 100644 --- a/src/containers/Token/DEXPairs/styles.scss +++ b/src/containers/Token/DEXPairs/styles.scss @@ -1,4 +1,4 @@ -@import '../../shared/css/variables'; +@use '../../shared/css/variables' as *; .dex-pairs-container { padding: 64px 0 100px; diff --git a/src/containers/Token/TokenHeader/styles.scss b/src/containers/Token/TokenHeader/styles.scss index 6ea3030d5..050a892e7 100644 --- a/src/containers/Token/TokenHeader/styles.scss +++ b/src/containers/Token/TokenHeader/styles.scss @@ -1,5 +1,5 @@ -@import '../../shared/css/variables'; -@import '../../shared/css/table'; +@use '../../shared/css/variables' as *; +@use '../../shared/css/table'; .header-container { .bottom-container { diff --git a/src/containers/Token/styles.scss b/src/containers/Token/styles.scss index 823aeba8d..bf32172e2 100644 --- a/src/containers/Token/styles.scss +++ b/src/containers/Token/styles.scss @@ -1,4 +1,4 @@ -@import '../shared/css/variables'; +@use '../shared/css/variables'; .token-page { width: 100%; diff --git a/src/containers/Transactions/DetailTab/detailTab.scss b/src/containers/Transactions/DetailTab/detailTab.scss index 569b8f1a2..6cca63254 100644 --- a/src/containers/Transactions/DetailTab/detailTab.scss +++ b/src/containers/Transactions/DetailTab/detailTab.scss @@ -1,4 +1,4 @@ -@import '../../shared/css/variables'; +@use '../../shared/css/variables' as *; .detail-body { margin-top: 20px; diff --git a/src/containers/Transactions/simpleTab.scss b/src/containers/Transactions/simpleTab.scss index ca374a592..978ef28f3 100644 --- a/src/containers/Transactions/simpleTab.scss +++ b/src/containers/Transactions/simpleTab.scss @@ -1,4 +1,4 @@ -@import '../shared/css/variables'; +@use '../shared/css/variables' as *; $subdued-color: $black-40; diff --git a/src/containers/Transactions/transaction.scss b/src/containers/Transactions/transaction.scss index 7c80014fc..45997a886 100644 --- a/src/containers/Transactions/transaction.scss +++ b/src/containers/Transactions/transaction.scss @@ -1,4 +1,4 @@ -@import '../shared/css/variables'; +@use '../shared/css/variables' as *; .transaction { position: relative; diff --git a/src/containers/Validators/historyTab.scss b/src/containers/Validators/historyTab.scss index 4112abe75..69127e96f 100644 --- a/src/containers/Validators/historyTab.scss +++ b/src/containers/Validators/historyTab.scss @@ -1,4 +1,4 @@ -@import '../shared/css/variables'; +@use '../shared/css/variables' as *; .history-table { // Col overall styling diff --git a/src/containers/Validators/simpleTab.scss b/src/containers/Validators/simpleTab.scss index 224a55cc7..f95bbde77 100644 --- a/src/containers/Validators/simpleTab.scss +++ b/src/containers/Validators/simpleTab.scss @@ -1,4 +1,4 @@ -@import '../shared/css/variables'; +@use '../shared/css/variables' as *; .simple-body-validator { .row { diff --git a/src/containers/Validators/validator.scss b/src/containers/Validators/validator.scss index 58a5bfe75..7cda86f67 100644 --- a/src/containers/Validators/validator.scss +++ b/src/containers/Validators/validator.scss @@ -1,4 +1,4 @@ -@import '../shared/css/variables'; +@use '../shared/css/variables' as *; .validator { position: relative; diff --git a/src/containers/Validators/votingTab.scss b/src/containers/Validators/votingTab.scss index 71b6cd95b..eb6c7a489 100644 --- a/src/containers/Validators/votingTab.scss +++ b/src/containers/Validators/votingTab.scss @@ -1,4 +1,4 @@ -@import '../shared/css/variables'; +@use '../shared/css/variables' as *; .voting { margin-left: 24px; diff --git a/src/containers/shared/components/Dropdown/dropdown.scss b/src/containers/shared/components/Dropdown/dropdown.scss index 5d23922e5..b49e23cb4 100644 --- a/src/containers/shared/components/Dropdown/dropdown.scss +++ b/src/containers/shared/components/Dropdown/dropdown.scss @@ -1,4 +1,4 @@ -@import '../../css/variables'; +@use '../../css/variables' as *; .dropdown { position: relative; diff --git a/src/containers/shared/components/JsonView/json-view.scss b/src/containers/shared/components/JsonView/json-view.scss index ff09d9907..0ca1c7de1 100644 --- a/src/containers/shared/components/JsonView/json-view.scss +++ b/src/containers/shared/components/JsonView/json-view.scss @@ -1,4 +1,4 @@ -@import '../../css/variables'; +@use '../../css/variables' as *; @import 'react18-json-view/src/style.css'; .json-view { diff --git a/src/containers/shared/components/Notification/styles.scss b/src/containers/shared/components/Notification/styles.scss index 9844d2327..a2dd6dad3 100644 --- a/src/containers/shared/components/Notification/styles.scss +++ b/src/containers/shared/components/Notification/styles.scss @@ -1,4 +1,4 @@ -@import '../../css/variables'; +@use '../../css/variables' as *; .notification { border: 1px solid; diff --git a/src/containers/shared/components/TransactionTable/styles.scss b/src/containers/shared/components/TransactionTable/styles.scss index ad29c981f..fa235d2d4 100644 --- a/src/containers/shared/components/TransactionTable/styles.scss +++ b/src/containers/shared/components/TransactionTable/styles.scss @@ -1,5 +1,5 @@ @use 'sass:color'; -@import '../../../shared/css/variables'; +@use '../../../shared/css/variables' as *; .transaction-table { width: 100%; diff --git a/src/containers/shared/css/box.scss b/src/containers/shared/css/box.scss index bbd7ea06b..839b8e264 100644 --- a/src/containers/shared/css/box.scss +++ b/src/containers/shared/css/box.scss @@ -1,4 +1,4 @@ -@import './variables'; +@use 'variables' as *; .box { border-radius: 4px; diff --git a/src/containers/shared/css/form.scss b/src/containers/shared/css/form.scss index ee462e9a2..e4fefc169 100644 --- a/src/containers/shared/css/form.scss +++ b/src/containers/shared/css/form.scss @@ -1,4 +1,4 @@ -@import './variables'; +@use 'variables' as *; label { color: $black-40; diff --git a/src/containers/shared/css/global.scss b/src/containers/shared/css/global.scss index 8d7bf9b0d..e10fd11d1 100644 --- a/src/containers/shared/css/global.scss +++ b/src/containers/shared/css/global.scss @@ -1,7 +1,7 @@ // ONLY GLOBAL CSS, KEEP IT TO MINIMAL // CSS SHOULD BE SCOPPED TO COMPONENT -@import './variables'; -@import './form'; +@use 'variables' as *; +@use 'form'; /** * `current_symbols` is used for currency codes missing from other fonts, currently `u+e900` (XRP) and `u+e901` (BTC). diff --git a/src/containers/shared/css/simpleTab.scss b/src/containers/shared/css/simpleTab.scss index 574f4adda..087d3005c 100644 --- a/src/containers/shared/css/simpleTab.scss +++ b/src/containers/shared/css/simpleTab.scss @@ -1,4 +1,4 @@ -@import './variables'; +@use 'variables' as *; $index-width: 324px; diff --git a/src/containers/shared/css/table.scss b/src/containers/shared/css/table.scss index 53dc1e2df..4f53bac7c 100644 --- a/src/containers/shared/css/table.scss +++ b/src/containers/shared/css/table.scss @@ -1,4 +1,4 @@ -@import './variables'; +@use 'variables' as *; table.basic { overflow: hidden; diff --git a/src/containers/shared/css/tabs.scss b/src/containers/shared/css/tabs.scss index 379fd220c..3ffa955ec 100644 --- a/src/containers/shared/css/tabs.scss +++ b/src/containers/shared/css/tabs.scss @@ -1,4 +1,4 @@ -@import './variables'; +@use 'variables' as *; .tabs { border-top: 1px solid $black-70; diff --git a/src/containers/shared/css/tooltip.scss b/src/containers/shared/css/tooltip.scss index a1c6d5e4b..eaada0ce5 100644 --- a/src/containers/shared/css/tooltip.scss +++ b/src/containers/shared/css/tooltip.scss @@ -1,4 +1,4 @@ -@import './variables'; +@use 'variables' as *; .tooltip { position: absolute; diff --git a/src/containers/shared/css/txlabel.scss b/src/containers/shared/css/txlabel.scss index 093f8300c..dd2b520a6 100644 --- a/src/containers/shared/css/txlabel.scss +++ b/src/containers/shared/css/txlabel.scss @@ -1,4 +1,4 @@ -@import './variables'; +@use 'variables' as *; .tx-label { display: inline-flex; diff --git a/src/containers/shared/css/txstatus.scss b/src/containers/shared/css/txstatus.scss index 0a447f246..66933e784 100644 --- a/src/containers/shared/css/txstatus.scss +++ b/src/containers/shared/css/txstatus.scss @@ -1,4 +1,4 @@ -@import './variables'; +@use 'variables' as *; .tx-status { display: inline-flex; From dae75f4e6880a5b7293c99a4f1733410c8ce8313 Mon Sep 17 00:00:00 2001 From: achowdhry-ripple <achowdhry@ripple.com> Date: Wed, 13 Nov 2024 11:13:44 -0500 Subject: [PATCH 57/79] Add Simple Enable Amendment Translations (#1084) ## High Level Overview of Change Add translations to the EnableAmendment/Simple.tsx file for the table labels. Small code cleanup raised in https://github.com/ripple/explorer/issues/1076 <!-- Please include a summary/list of the changes. If too broad, please consider splitting into multiple PRs. --> ### Context of Change <!-- Please include the context of a change. If a bug fix, when was the bug introduced? What was the behavior? If a new feature, why was this architecture chosen? What were the alternatives? If a refactor, how is this better than the previous implementation? If there is a design document for this feature, please link it here. --> ### Type of Change <!-- Please check relevant options, delete irrelevant ones. --> - [x] Bug fix (non-breaking change which fixes an issue) - [ ] New feature (non-breaking change which adds functionality) - [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected) - [ ] Refactor (non-breaking change that only restructures code) - [ ] Tests (You added tests for code that already exists, or your new feature included in this PR) - [ ] Documentation Updates - [ ] Translation Updates - [ ] Release ### TypeScript/Hooks Update <!-- In an effort to modernize the codebase, you should convert the files that you work with to React Hooks and TypeScript. If this is not possible (e.g. it's too many changes, touching too many files, etc.) please explain why here. --> - [ ] Updated files to React Hooks - [ ] Updated files to TypeScript ## Before / After <!-- If just refactoring / back-end changes, this can be just an in-English description of the change at a technical level. If a UI change, screenshots should be included. --> ## Test Plan <!-- Please describe the tests that you ran to verify your changes and provide instructions so that others can reproduce. --> <!-- ## Future Tasks For future tasks related to PR. --> --- public/locales/ca-CA/translations.json | 5 ++++- public/locales/en-US/translations.json | 6 +++++- public/locales/es-ES/translations.json | 5 ++++- public/locales/fr-FR/translations.json | 5 ++++- public/locales/ja-JP/translations.json | 5 ++++- public/locales/ko-KR/translations.json | 5 ++++- .../components/Transaction/EnableAmendment/Simple.tsx | 10 ++++++---- 7 files changed, 31 insertions(+), 10 deletions(-) diff --git a/public/locales/ca-CA/translations.json b/public/locales/ca-CA/translations.json index 5dfa97bdd..02d1367b3 100644 --- a/public/locales/ca-CA/translations.json +++ b/public/locales/ca-CA/translations.json @@ -557,5 +557,8 @@ "can_trade": null, "can_transfer": null, "can_clawback": null, - "search_results_banner": null + "search_results_banner": null, + "enable_amendment_name": null, + "amendment_status": null, + "expected_date": null } diff --git a/public/locales/en-US/translations.json b/public/locales/en-US/translations.json index 4d8196175..83fb30d98 100644 --- a/public/locales/en-US/translations.json +++ b/public/locales/en-US/translations.json @@ -557,5 +557,9 @@ "can_trade": "Can Trade", "can_transfer": "Can Transfer", "can_clawback": "Can Clawback", - "search_results_banner": "Token search by name and account is now available! Try searching for USD" + "search_results_banner": "Token search by name and account is now available! Try searching for USD", + "enable_amendment_name": "Amendment Name", + "amendment_status": "Amendment Status", + "expected_date": "Expected Date" + } diff --git a/public/locales/es-ES/translations.json b/public/locales/es-ES/translations.json index 3f6ff0b18..17965bd0a 100644 --- a/public/locales/es-ES/translations.json +++ b/public/locales/es-ES/translations.json @@ -553,5 +553,8 @@ "can_trade": null, "can_transfer": null, "can_clawback": null, - "search_results_banner": null + "search_results_banner": null, + "enable_amendment_name": null, + "amendment_status": null, + "expected_date": null } diff --git a/public/locales/fr-FR/translations.json b/public/locales/fr-FR/translations.json index 5e2f48fde..33ac67e2d 100644 --- a/public/locales/fr-FR/translations.json +++ b/public/locales/fr-FR/translations.json @@ -554,5 +554,8 @@ "can_trade": null, "can_transfer": null, "can_clawback": null, - "search_results_banner": null + "search_results_banner": null, + "enable_amendment_name": null, + "amendment_status": null, + "expected_date": null } diff --git a/public/locales/ja-JP/translations.json b/public/locales/ja-JP/translations.json index f5779f900..e5b667cac 100644 --- a/public/locales/ja-JP/translations.json +++ b/public/locales/ja-JP/translations.json @@ -553,5 +553,8 @@ "can_trade": null, "can_transfer": null, "can_clawback": null, - "search_results_banner": null + "search_results_banner": null, + "enable_amendment_name": null, + "amendment_status": null, + "expected_date": null } diff --git a/public/locales/ko-KR/translations.json b/public/locales/ko-KR/translations.json index f44ad2a32..0f5406903 100644 --- a/public/locales/ko-KR/translations.json +++ b/public/locales/ko-KR/translations.json @@ -551,5 +551,8 @@ "can_trade": null, "can_transfer": null, "can_clawback": null, - "search_results_banner": null + "search_results_banner": null, + "enable_amendment_name": null, + "amendment_status": null, + "expected_date": null } diff --git a/src/containers/shared/components/Transaction/EnableAmendment/Simple.tsx b/src/containers/shared/components/Transaction/EnableAmendment/Simple.tsx index 35f885c53..cd53f50b8 100644 --- a/src/containers/shared/components/Transaction/EnableAmendment/Simple.tsx +++ b/src/containers/shared/components/Transaction/EnableAmendment/Simple.tsx @@ -1,4 +1,5 @@ import { useContext, useEffect, useState } from 'react' +import { useTranslation } from 'react-i18next' import { useLanguage } from '../../../hooks' import { SimpleRow } from '../SimpleRow' import { TransactionSimpleProps } from '../types' @@ -16,6 +17,7 @@ const states = { export const Simple = ({ data }: TransactionSimpleProps<EnableAmendment>) => { const language = useLanguage() + const { t } = useTranslation() const [amendmentDetails, setAmendmentDetails] = useState({ name: states.loading, minRippledVersion: states.loading, @@ -56,7 +58,7 @@ export const Simple = ({ data }: TransactionSimpleProps<EnableAmendment>) => { return ( <> - <SimpleRow label="Amendment Name" data-test="name"> + <SimpleRow label={t('enable_amendment_name')} data-test="name"> <RouteLink to={AMENDMENT_ROUTE} params={{ identifier: data.instructions.Amendment }} @@ -64,16 +66,16 @@ export const Simple = ({ data }: TransactionSimpleProps<EnableAmendment>) => { {amendmentDetails.name} </RouteLink> </SimpleRow> - <SimpleRow label="Amendment Status" data-test="status"> + <SimpleRow label={t('amendment_status')} data-test="status"> <a href="https://xrpl.org/enableamendment.html#enableamendment-flags"> {amendmentStatus} </a> </SimpleRow> - <SimpleRow label="Introduced In" data-test="version"> + <SimpleRow label={t('introduced_in')} data-test="version"> {amendmentDetails.minRippledVersion} </SimpleRow> {amendmentStatus === 'Got Majority' && ( - <SimpleRow label="Expected Date" data-test="date"> + <SimpleRow label={t('expected_date')} data-test="date"> {expectedDate} </SimpleRow> )} From 3dad4243f56df4f738885a65dd537e3f4a1e8a25 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari <mvadari@ripple.com> Date: Tue, 19 Nov 2024 13:40:34 -0500 Subject: [PATCH 58/79] chore: bump Github Actions versions (#1063) ## High Level Overview of Change Title says it all. ### Context of Change Deprecation notices on Actions: > The following actions use a deprecated Node.js version and will be forced to run on node20: actions/checkout@v3, actions/setup-node@v3, actions/cache@v3. For more info: https://github.blog/changelog/2024-03-07-github-actions-all-actions-will-run-on-node20-instead-of-node16-by-default/ ### Type of Change - [x] Tests (You added tests for code that already exists, or your new feature included in this PR) ### TypeScript/Hooks Update N/A ## Test Plan The notices go away now. --- .github/workflows/nodejs.yml | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml index 56af795c6..aaf9a0a1e 100644 --- a/.github/workflows/nodejs.yml +++ b/.github/workflows/nodejs.yml @@ -5,7 +5,7 @@ name: Node.js CI on: push: - branches: [ main, staging ] + branches: [main, staging] pull_request: workflow_dispatch: @@ -18,15 +18,15 @@ jobs: node-version: [18.12] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: ${{ matrix.node-version }} - name: Cache node modules id: cache-nodemodules - uses: actions/cache@v3 + uses: actions/cache@v4 env: cache-name: cache-node-modules with: @@ -51,15 +51,15 @@ jobs: node-version: [18.12] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: ${{ matrix.node-version }} - name: Cache node modules id: cache-nodemodules - uses: actions/cache@v3 + uses: actions/cache@v4 env: cache-name: cache-node-modules with: @@ -91,15 +91,15 @@ jobs: node-version: [18.12] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: ${{ matrix.node-version }} - name: Cache node modules id: cache-nodemodules - uses: actions/cache@v3 + uses: actions/cache@v4 env: cache-name: cache-node-modules with: @@ -124,15 +124,15 @@ jobs: node-version: [18.12] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: ${{ matrix.node-version }} - name: Cache node modules id: cache-nodemodules - uses: actions/cache@v3 + uses: actions/cache@v4 env: cache-name: cache-node-modules with: From 9eea4fa18a8f4b96d08a90e1be683116fe20ce97 Mon Sep 17 00:00:00 2001 From: Shawn Xie <35279399+shawnxie999@users.noreply.github.com> Date: Mon, 2 Dec 2024 17:24:08 -0500 Subject: [PATCH 59/79] Fix extreneous ledger_entry call for Amount (#1095) ## High Level Overview of Change <!-- Please include a summary/list of the changes. If too broad, please consider splitting into multiple PRs. --> ### Context of Change <!-- Please include the context of a change. If a bug fix, when was the bug introduced? What was the behavior? If a new feature, why was this architecture chosen? What were the alternatives? If a refactor, how is this better than the previous implementation? If there is a design document for this feature, please link it here. --> ### Type of Change <!-- Please check relevant options, delete irrelevant ones. --> - [x] Bug fix (non-breaking change which fixes an issue) - [ ] New feature (non-breaking change which adds functionality) - [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected) - [ ] Refactor (non-breaking change that only restructures code) - [ ] Tests (You added tests for code that already exists, or your new feature included in this PR) - [ ] Documentation Updates - [ ] Translation Updates - [ ] Release ### TypeScript/Hooks Update <!-- In an effort to modernize the codebase, you should convert the files that you work with to React Hooks and TypeScript. If this is not possible (e.g. it's too many changes, touching too many files, etc.) please explain why here. --> - [ ] Updated files to React Hooks - [ ] Updated files to TypeScript ## Before / After <!-- If just refactoring / back-end changes, this can be just an in-English description of the change at a technical level. If a UI change, screenshots should be included. --> ## Test Plan <!-- Please describe the tests that you ran to verify your changes and provide instructions so that others can reproduce. --> <!-- ## Future Tasks For future tasks related to PR. --> --- src/containers/shared/components/Amount.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/containers/shared/components/Amount.tsx b/src/containers/shared/components/Amount.tsx index e7fe6ecd5..1a767a796 100644 --- a/src/containers/shared/components/Amount.tsx +++ b/src/containers/shared/components/Amount.tsx @@ -29,7 +29,7 @@ export const Amount = ({ const currency = typeof value === 'string' ? 'XRP' : value.currency const amount = typeof value === 'string' ? parseInt(value, 10) / XRP_BASE : value.amount - const isMPT = typeof value === 'string' ? false : value.isMPT + const isMPT = typeof value === 'string' ? false : value.isMPT ?? false const options = { ...CURRENCY_OPTIONS, currency } From 1e89d531b696ac39c78495f2fa12d8ca8ad49d6f Mon Sep 17 00:00:00 2001 From: Mayukha Vadari <mvadari@ripple.com> Date: Mon, 2 Dec 2024 18:49:41 -0500 Subject: [PATCH 60/79] fix: avoid initializing multiple connections (#1096) ## High Level Overview of Change Title says it all. There are multiple connections made to a node in the current implementation, at different ports (which all forward to the same place on livenet). While the connection isn't sustained, it still has to be made and canceled. ### Context of Change There is a lot of load on s2 right now, so saving a connection or two might make a difference. ### Type of Change - [x] Bug fix (non-breaking change which fixes an issue) ### TypeScript/Hooks Update N/A ## Before / After <!-- If just refactoring / back-end changes, this can be just an in-English description of the change at a technical level. If a UI change, screenshots should be included. --> ## Test Plan Tested locally. --- server/lib/rippled.js | 14 +++++++------ server/routes/v1/tokens.js | 7 +++++-- src/containers/shared/SocketContext.tsx | 10 +++++---- .../shared/test/SocketContext.test.ts | 21 ++++++------------- 4 files changed, 25 insertions(+), 27 deletions(-) diff --git a/server/lib/rippled.js b/server/lib/rippled.js index 7e90d8c27..7d1c27467 100644 --- a/server/lib/rippled.js +++ b/server/lib/rippled.js @@ -4,12 +4,14 @@ const utils = require('./utils') const streams = require('./streams') const RIPPLEDS = [] -process.env.VITE_RIPPLED_HOST?.split(',').forEach((d) => { - const rippled = d.split(':') - RIPPLEDS.push( - `wss://${rippled[0]}:${rippled[1] || process.env.VITE_RIPPLED_WS_PORT}`, - `wss://${rippled[0]}`, - ) +process.env.VITE_RIPPLED_HOST?.split(',').forEach((host) => { + if (host?.includes(':')) { + RIPPLEDS.push(`wss://${host}`) + } else if (process.env.VITE_RIPPLED_WS_PORT) { + RIPPLEDS.push(`wss://${host}:${process.env.VITE_RIPPLED_WS_PORT}`) + } else { + RIPPLEDS.push(`wss://${host}`) + } }) const RIPPLED_CLIENT = new XrplClient(RIPPLEDS, { tryAllNodes: true }) diff --git a/server/routes/v1/tokens.js b/server/routes/v1/tokens.js index 072dcf5ab..0fcadbe09 100644 --- a/server/routes/v1/tokens.js +++ b/server/routes/v1/tokens.js @@ -41,12 +41,15 @@ async function fetchXRPLMetaTokens(offset) { }, ) .then((resp) => resp.data) - .catch((e) => log.error(e)) + .catch((e) => { + log.error(e) + return { count: 0 } + }) } async function cacheXRPLMetaTokens() { let offset = 0 - let tokensDataBatch = [] + let tokensDataBatch = {} const allTokensFetched = [] tokensDataBatch = await fetchXRPLMetaTokens(0) diff --git a/src/containers/shared/SocketContext.tsx b/src/containers/shared/SocketContext.tsx index a8ed6f217..17ef964e4 100644 --- a/src/containers/shared/SocketContext.tsx +++ b/src/containers/shared/SocketContext.tsx @@ -29,11 +29,13 @@ function getSocket(rippledUrl?: string): ExplorerXrplClient { if (host?.includes(':')) { wsUrls.push(`${prefix}://${host}`) + } else if (process.env.VITE_RIPPLED_WS_PORT) { + wsUrls.push(`${prefix}://${host}:${process.env.VITE_RIPPLED_WS_PORT}`) + if (process.env.VITE_ENVIRONMENT === 'custom') { + wsUrls.push(`${prefix}://${host}`) + } } else { - wsUrls.push.apply(wsUrls, [ - `${prefix}://${host}:${process.env.VITE_RIPPLED_WS_PORT}`, - `${prefix}://${host}:443`, - ]) + wsUrls.push(`${prefix}://${host}`) } }) diff --git a/src/containers/shared/test/SocketContext.test.ts b/src/containers/shared/test/SocketContext.test.ts index 2c268ed56..2a67fae26 100644 --- a/src/containers/shared/test/SocketContext.test.ts +++ b/src/containers/shared/test/SocketContext.test.ts @@ -28,7 +28,7 @@ describe('getSocket', () => { const client = getSocket() expect(XrplClient).toHaveBeenNthCalledWith( 1, - ['wss://somewhere.com:51233', 'wss://somewhere.com:443'], + ['wss://somewhere.com:51233'], { tryAllNodes: true, }, @@ -47,12 +47,7 @@ describe('getSocket', () => { const client = getSocket() expect(XrplClient).toHaveBeenNthCalledWith( 1, - [ - 'wss://somewhere.com:51233', - 'wss://somewhere.com:443', - 'wss://elsewhere.com:51233', - 'wss://elsewhere.com:443', - ], + ['wss://somewhere.com:51233', 'wss://elsewhere.com:51233'], { tryAllNodes: true, }, @@ -71,7 +66,7 @@ describe('getSocket', () => { const client = getSocket() expect(XrplClient).toHaveBeenNthCalledWith( 1, - ['ws://somewhere.com:51233', 'ws://somewhere.com:443'], + ['ws://somewhere.com:51233'], { tryAllNodes: true, }, @@ -120,13 +115,9 @@ describe('getSocket', () => { it('should use ws when supplied entry is for a localhost', () => { const client = getSocket('localhost') - expect(XrplClient).toHaveBeenNthCalledWith( - 1, - ['ws://localhost:51233', 'ws://localhost:443'], - { - tryAllNodes: true, - }, - ) + expect(XrplClient).toHaveBeenNthCalledWith(1, ['ws://localhost:51233'], { + tryAllNodes: true, + }) expect((client as any).p2pSocket).not.toBeDefined() }) From 8cdbf05ef6c71e4f2cf283dedd36a2e364daf3a8 Mon Sep 17 00:00:00 2001 From: Shawn Xie <35279399+shawnxie999@users.noreply.github.com> Date: Thu, 12 Dec 2024 08:17:43 -0800 Subject: [PATCH 61/79] Use clio's include_deleted param in ledger_entry to fetch deleted MPT (#1097) ## High Level Overview of Change <!-- Please include a summary/list of the changes. If too broad, please consider splitting into multiple PRs. --> ### Context of Change Before <img width="1170" alt="image" src="https://github.com/user-attachments/assets/3101cfdd-ef88-4ab0-8591-d6e18e8e9abd" /> after <img width="1189" alt="image" src="https://github.com/user-attachments/assets/faf4a733-8661-4841-a81f-5f2e52f544bc" /> `getMPTIssuance` fails to fetch the MPT because the MPT itself has been deleted. Clio's ledger_entry API supports querying deleted object by specifying `include_deleted` to be true <!-- Please include the context of a change. If a bug fix, when was the bug introduced? What was the behavior? If a new feature, why was this architecture chosen? What were the alternatives? If a refactor, how is this better than the previous implementation? If there is a design document for this feature, please link it here. --> ### Type of Change <!-- Please check relevant options, delete irrelevant ones. --> - [x] Bug fix (non-breaking change which fixes an issue) - [ ] New feature (non-breaking change which adds functionality) - [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected) - [ ] Refactor (non-breaking change that only restructures code) - [ ] Tests (You added tests for code that already exists, or your new feature included in this PR) - [ ] Documentation Updates - [ ] Translation Updates - [ ] Release ### TypeScript/Hooks Update <!-- In an effort to modernize the codebase, you should convert the files that you work with to React Hooks and TypeScript. If this is not possible (e.g. it's too many changes, touching too many files, etc.) please explain why here. --> - [ ] Updated files to React Hooks - [ ] Updated files to TypeScript ## Before / After <!-- If just refactoring / back-end changes, this can be just an in-English description of the change at a technical level. If a UI change, screenshots should be included. --> ## Test Plan <!-- Please describe the tests that you ran to verify your changes and provide instructions so that others can reproduce. --> <!-- ## Future Tasks For future tasks related to PR. --> --- src/rippled/lib/rippled.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/rippled/lib/rippled.js b/src/rippled/lib/rippled.js index 85900ffa9..89f47ad6e 100644 --- a/src/rippled/lib/rippled.js +++ b/src/rippled/lib/rippled.js @@ -573,10 +573,11 @@ const getFeature = (rippledSocket, amendmentId) => { } const getMPTIssuance = (rippledSocket, tokenId) => - query(rippledSocket, { + queryP2P(rippledSocket, { command: 'ledger_entry', mpt_issuance: tokenId, ledger_index: 'validated', + include_deleted: true, }).then((resp) => { if ( resp.error === 'entryNotFound' || From 4028046daa0a1f14e10d5d1edc98cafb06e53402 Mon Sep 17 00:00:00 2001 From: Shawn Xie <35279399+shawnxie999@users.noreply.github.com> Date: Mon, 16 Dec 2024 11:29:35 -0800 Subject: [PATCH 62/79] Rename `MPTokenHolder` to `Holder` (#1062) ## High Level Overview of Change rippled change that renames MPTokenHolder: https://github.com/XRPLF/rippled/pull/5143/commits/b636836a47b48f758d64ca4ea96ee42a5035fde3 <!-- Please include a summary/list of the changes. If too broad, please consider splitting into multiple PRs. --> ### Context of Change <!-- Please include the context of a change. If a bug fix, when was the bug introduced? What was the behavior? If a new feature, why was this architecture chosen? What were the alternatives? If a refactor, how is this better than the previous implementation? If there is a design document for this feature, please link it here. --> ### Type of Change <!-- Please check relevant options, delete irrelevant ones. --> - [ ] Bug fix (non-breaking change which fixes an issue) - [ ] New feature (non-breaking change which adds functionality) - [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected) - [x] Refactor (non-breaking change that only restructures code) - [ ] Tests (You added tests for code that already exists, or your new feature included in this PR) - [ ] Documentation Updates - [ ] Translation Updates - [ ] Release ### TypeScript/Hooks Update <!-- In an effort to modernize the codebase, you should convert the files that you work with to React Hooks and TypeScript. If this is not possible (e.g. it's too many changes, touching too many files, etc.) please explain why here. --> - [ ] Updated files to React Hooks - [ ] Updated files to TypeScript ## Before / After <!-- If just refactoring / back-end changes, this can be just an in-English description of the change at a technical level. If a UI change, screenshots should be included. --> ## Test Plan <!-- Please describe the tests that you ran to verify your changes and provide instructions so that others can reproduce. --> <!-- ## Future Tasks For future tasks related to PR. --> --- .../shared/components/Transaction/Clawback/Description.tsx | 2 +- .../shared/components/Transaction/Clawback/parser.ts | 2 +- .../Transaction/Clawback/test/mock_data/ClawbackMPT.json | 2 +- .../Clawback/test/mock_data/ClawbackMPT_Failure.json | 2 +- .../shared/components/Transaction/Clawback/types.ts | 2 +- .../components/Transaction/MPTokenAuthorize/Simple.tsx | 6 +++--- .../test/mock_data/MPTokenAuthorize_WithHolder.json | 2 +- .../test/mock_data/MPTokenAuthorize_WithHolderFail.json | 2 +- .../shared/components/Transaction/MPTokenAuthorize/types.ts | 2 +- .../components/Transaction/MPTokenIssuanceSet/Simple.tsx | 6 +++--- .../test/mock_data/MPTokenIssuanceSet.json | 2 +- .../test/mock_data/MPTokenIssuanceSet_Fail.json | 2 +- .../components/Transaction/MPTokenIssuanceSet/types.ts | 2 +- 13 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/containers/shared/components/Transaction/Clawback/Description.tsx b/src/containers/shared/components/Transaction/Clawback/Description.tsx index c92397c35..42641b95c 100644 --- a/src/containers/shared/components/Transaction/Clawback/Description.tsx +++ b/src/containers/shared/components/Transaction/Clawback/Description.tsx @@ -7,7 +7,7 @@ import { formatAmount } from '../../../../../rippled/lib/txSummary/formatAmount' export const Description = ({ data }: TransactionDescriptionProps) => { const issuer = data.tx.Account const amount = formatAmount(data.tx.Amount) - const holder = amount.isMPT ? data.tx.MPTokenHolder : data.tx.Amount.issuer + const holder = amount.isMPT ? data.tx.Holder : data.tx.Amount.issuer amount.issuer = issuer return ( <> diff --git a/src/containers/shared/components/Transaction/Clawback/parser.ts b/src/containers/shared/components/Transaction/Clawback/parser.ts index f5ce6f6a0..0f96430df 100644 --- a/src/containers/shared/components/Transaction/Clawback/parser.ts +++ b/src/containers/shared/components/Transaction/Clawback/parser.ts @@ -14,7 +14,7 @@ export const parser: TransactionParser<Clawback, ClawbackInstructions> = ( const amount = formatAmount(tx.Amount) if (amount.isMPT === true) { - const holder = tx.MPTokenHolder + const holder = tx.Holder const filteredMptNode = meta.AffectedNodes.filter( (node: any) => node.ModifiedNode?.LedgerEntryType === 'MPToken', diff --git a/src/containers/shared/components/Transaction/Clawback/test/mock_data/ClawbackMPT.json b/src/containers/shared/components/Transaction/Clawback/test/mock_data/ClawbackMPT.json index 2a7d4513a..37e1d6630 100644 --- a/src/containers/shared/components/Transaction/Clawback/test/mock_data/ClawbackMPT.json +++ b/src/containers/shared/components/Transaction/Clawback/test/mock_data/ClawbackMPT.json @@ -7,7 +7,7 @@ }, "Fee": "10", "Flags": 2147483648, - "MPTokenHolder": "rUZTPFN7MBJkjiZ48rak6q7MbhT4ur2kAD", + "Holder": "rUZTPFN7MBJkjiZ48rak6q7MbhT4ur2kAD", "Sequence": 3432, "SigningPubKey": "ED0C1DE70A8762E6C98EC78CF13D278D6950ECDFE8E87BAD3732730845E2D9AB6A", "TransactionType": "Clawback", diff --git a/src/containers/shared/components/Transaction/Clawback/test/mock_data/ClawbackMPT_Failure.json b/src/containers/shared/components/Transaction/Clawback/test/mock_data/ClawbackMPT_Failure.json index b0c7d31c8..d48f95247 100644 --- a/src/containers/shared/components/Transaction/Clawback/test/mock_data/ClawbackMPT_Failure.json +++ b/src/containers/shared/components/Transaction/Clawback/test/mock_data/ClawbackMPT_Failure.json @@ -7,7 +7,7 @@ }, "Fee": "10", "Flags": 2147483648, - "MPTokenHolder": "r9rAqX8Jjo4uACsimYDVsy5thHDPivujqf", + "Holder": "r9rAqX8Jjo4uACsimYDVsy5thHDPivujqf", "Sequence": 4246, "SigningPubKey": "ED4F6FF2241860884D4DD6C5797BDA553155D194F07B1BFC67129F183322DA7DC3", "TransactionType": "Clawback", diff --git a/src/containers/shared/components/Transaction/Clawback/types.ts b/src/containers/shared/components/Transaction/Clawback/types.ts index bbfaa9067..19a3c8674 100644 --- a/src/containers/shared/components/Transaction/Clawback/types.ts +++ b/src/containers/shared/components/Transaction/Clawback/types.ts @@ -3,7 +3,7 @@ import { Amount, ExplorerAmount } from '../../../types' export interface Clawback extends TransactionCommonFields { Amount: Amount - MPTokenHolder?: string + Holder?: string } export interface ClawbackInstructions { diff --git a/src/containers/shared/components/Transaction/MPTokenAuthorize/Simple.tsx b/src/containers/shared/components/Transaction/MPTokenAuthorize/Simple.tsx index 9823dfe4f..fda5331b6 100644 --- a/src/containers/shared/components/Transaction/MPTokenAuthorize/Simple.tsx +++ b/src/containers/shared/components/Transaction/MPTokenAuthorize/Simple.tsx @@ -8,7 +8,7 @@ import { MPTokenLink } from '../../MPTokenLink' export const Simple: TransactionSimpleComponent = ({ data, }: TransactionSimpleProps<MPTokenAuthorize>) => { - const { MPTokenIssuanceID, MPTokenHolder } = data.instructions + const { MPTokenIssuanceID, Holder } = data.instructions const { t } = useTranslation() return ( @@ -16,9 +16,9 @@ export const Simple: TransactionSimpleComponent = ({ <SimpleRow label={t('mpt_issuance_id')} data-test="mpt-issuance-id"> <MPTokenLink tokenID={MPTokenIssuanceID} /> </SimpleRow> - {MPTokenHolder && ( + {Holder && ( <SimpleRow label={t('mpt_holder')} data-test="mpt-holder"> - <Account account={MPTokenHolder} /> + <Account account={Holder} /> </SimpleRow> )} </> diff --git a/src/containers/shared/components/Transaction/MPTokenAuthorize/test/mock_data/MPTokenAuthorize_WithHolder.json b/src/containers/shared/components/Transaction/MPTokenAuthorize/test/mock_data/MPTokenAuthorize_WithHolder.json index 3cce1b4e2..010e406f9 100644 --- a/src/containers/shared/components/Transaction/MPTokenAuthorize/test/mock_data/MPTokenAuthorize_WithHolder.json +++ b/src/containers/shared/components/Transaction/MPTokenAuthorize/test/mock_data/MPTokenAuthorize_WithHolder.json @@ -3,7 +3,7 @@ "Account": "rwfgw2dWqUAexB46z5QRq2dJcgTK9piw5w", "Fee": "10", "Flags": 2147483648, - "MPTokenHolder": "rK3bB9myvWoMaLbLnpksGx2Zz58BL225am", + "Holder": "rK3bB9myvWoMaLbLnpksGx2Zz58BL225am", "MPTokenIssuanceID": "0000130B63FC523E33FDF4D1318D8D484B0D1111098CFD0B", "Sequence": 4876, "SigningPubKey": "ED936E848B8E37D20991C2E1C5C76ABAEC0625D693CEB85BA495B58E16712DA627", diff --git a/src/containers/shared/components/Transaction/MPTokenAuthorize/test/mock_data/MPTokenAuthorize_WithHolderFail.json b/src/containers/shared/components/Transaction/MPTokenAuthorize/test/mock_data/MPTokenAuthorize_WithHolderFail.json index 69b7eaa8c..b2572caaf 100644 --- a/src/containers/shared/components/Transaction/MPTokenAuthorize/test/mock_data/MPTokenAuthorize_WithHolderFail.json +++ b/src/containers/shared/components/Transaction/MPTokenAuthorize/test/mock_data/MPTokenAuthorize_WithHolderFail.json @@ -3,7 +3,7 @@ "Account": "rL4pMQAa3V7s9QNw1wEk2znnhjbfYo4GQC", "Fee": "10", "Flags": 2147483648, - "MPTokenHolder": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", + "Holder": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", "MPTokenIssuanceID": "00000F76D46440EE21F74E5B2398315BC1CFEB9A7EB48A14", "Sequence": 3959, "SigningPubKey": "EDF7A3D93CE3AA46168649283C20C2D4FC36642FDD87449F1CCF068638BF17B10E", diff --git a/src/containers/shared/components/Transaction/MPTokenAuthorize/types.ts b/src/containers/shared/components/Transaction/MPTokenAuthorize/types.ts index 878129a9f..c501d4639 100644 --- a/src/containers/shared/components/Transaction/MPTokenAuthorize/types.ts +++ b/src/containers/shared/components/Transaction/MPTokenAuthorize/types.ts @@ -2,5 +2,5 @@ import { TransactionCommonFields } from '../types' export interface MPTokenAuthorize extends TransactionCommonFields { MPTokenIssuanceID: string - MPTokenHolder?: string + Holder?: string } diff --git a/src/containers/shared/components/Transaction/MPTokenIssuanceSet/Simple.tsx b/src/containers/shared/components/Transaction/MPTokenIssuanceSet/Simple.tsx index 9f0b13ca8..2825a3118 100644 --- a/src/containers/shared/components/Transaction/MPTokenIssuanceSet/Simple.tsx +++ b/src/containers/shared/components/Transaction/MPTokenIssuanceSet/Simple.tsx @@ -8,7 +8,7 @@ import { MPTokenLink } from '../../MPTokenLink' export const Simple: TransactionSimpleComponent = ({ data, }: TransactionSimpleProps<MPTokenIssuanceSet>) => { - const { MPTokenIssuanceID, MPTokenHolder } = data.instructions + const { MPTokenIssuanceID, Holder } = data.instructions const { t } = useTranslation() return ( @@ -16,9 +16,9 @@ export const Simple: TransactionSimpleComponent = ({ <SimpleRow label={t('mpt_issuance_id')} data-test="mpt-issuance-id"> <MPTokenLink tokenID={MPTokenIssuanceID} /> </SimpleRow> - {MPTokenHolder && ( + {Holder && ( <SimpleRow label={t('mpt_holder')} data-test="mpt-holder"> - <Account account={MPTokenHolder} /> + <Account account={Holder} /> </SimpleRow> )} </> diff --git a/src/containers/shared/components/Transaction/MPTokenIssuanceSet/test/mock_data/MPTokenIssuanceSet.json b/src/containers/shared/components/Transaction/MPTokenIssuanceSet/test/mock_data/MPTokenIssuanceSet.json index e78513a6c..c9beb8f58 100644 --- a/src/containers/shared/components/Transaction/MPTokenIssuanceSet/test/mock_data/MPTokenIssuanceSet.json +++ b/src/containers/shared/components/Transaction/MPTokenIssuanceSet/test/mock_data/MPTokenIssuanceSet.json @@ -3,7 +3,7 @@ "Account": "rERyS9qtwky94UMMjjmbku3uo5aQwAoJ58", "Fee": "10", "Flags": 1, - "MPTokenHolder": "r9hF4e3e6kLuxLobPwfQa2wzXZMDvBDeUg", + "Holder": "r9hF4e3e6kLuxLobPwfQa2wzXZMDvBDeUg", "MPTokenIssuanceID": "00000BED9E4ADA3DCC1BE78683C4B623A74013818160590C", "Sequence": 3054, "SigningPubKey": "EDF73A1C528F5BFBD6FF2B05D0C71760D7D2DF1DE3496935612E47BCB440F28040", diff --git a/src/containers/shared/components/Transaction/MPTokenIssuanceSet/test/mock_data/MPTokenIssuanceSet_Fail.json b/src/containers/shared/components/Transaction/MPTokenIssuanceSet/test/mock_data/MPTokenIssuanceSet_Fail.json index 60062ffc1..3526bc28c 100644 --- a/src/containers/shared/components/Transaction/MPTokenIssuanceSet/test/mock_data/MPTokenIssuanceSet_Fail.json +++ b/src/containers/shared/components/Transaction/MPTokenIssuanceSet/test/mock_data/MPTokenIssuanceSet_Fail.json @@ -3,7 +3,7 @@ "Account": "rpizWPf4g8JLWFUT7143Zn9A1n2Dy9bnji", "Fee": "10", "Flags": 1, - "MPTokenHolder": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", + "Holder": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", "MPTokenIssuanceID": "00000F83146C83112AED215CD345F8E7327459BFCF6B8062", "Sequence": 3972, "SigningPubKey": "ED4EC06184C745D99AEAAA16526C900DC181C8546899F462C3D105C11A6677A65A", diff --git a/src/containers/shared/components/Transaction/MPTokenIssuanceSet/types.ts b/src/containers/shared/components/Transaction/MPTokenIssuanceSet/types.ts index 5e15d49e8..038ee2607 100644 --- a/src/containers/shared/components/Transaction/MPTokenIssuanceSet/types.ts +++ b/src/containers/shared/components/Transaction/MPTokenIssuanceSet/types.ts @@ -2,5 +2,5 @@ import { TransactionCommonFields } from '../types' export interface MPTokenIssuanceSet extends TransactionCommonFields { MPTokenIssuanceID: string - MPTokenHolder?: string + Holder?: string } From 12e04fa74b2718121fbf6e0b60c464db3070a888 Mon Sep 17 00:00:00 2001 From: achowdhry-ripple <achowdhry@ripple.com> Date: Tue, 17 Dec 2024 17:16:27 -0500 Subject: [PATCH 63/79] fix double issuer address logic (#1099) ## High Level Overview of Change Bug in the conditional rendering logic for issuer address, it accidentally double printed the issuer if a name was not provided in the data. Now only prints the issuer once with no parenthesis if a name is not provided. ### Context of Change <!-- Please include the context of a change. If a bug fix, when was the bug introduced? What was the behavior? If a new feature, why was this architecture chosen? What were the alternatives? If a refactor, how is this better than the previous implementation? If there is a design document for this feature, please link it here. --> ### Type of Change <!-- Please check relevant options, delete irrelevant ones. --> - [x] Bug fix (non-breaking change which fixes an issue) - [ ] New feature (non-breaking change which adds functionality) - [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected) - [ ] Refactor (non-breaking change that only restructures code) - [ ] Tests (You added tests for code that already exists, or your new feature included in this PR) - [ ] Documentation Updates - [ ] Translation Updates - [ ] Release ### TypeScript/Hooks Update <!-- In an effort to modernize the codebase, you should convert the files that you work with to React Hooks and TypeScript. If this is not possible (e.g. it's too many changes, touching too many files, etc.) please explain why here. --> - [ ] Updated files to React Hooks - [ ] Updated files to TypeScript ## Before / After <!-- If just refactoring / back-end changes, this can be just an in-English description of the change at a technical level. If a UI change, screenshots should be included. --> ## Test Plan <!-- Please describe the tests that you ran to verify your changes and provide instructions so that others can reproduce. --> <!-- ## Future Tasks For future tasks related to PR. --> --- .../shared/components/TokenSearchResults/TokenSearchRow.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/containers/shared/components/TokenSearchResults/TokenSearchRow.tsx b/src/containers/shared/components/TokenSearchResults/TokenSearchRow.tsx index 0b1e4066a..47bdaef51 100644 --- a/src/containers/shared/components/TokenSearchResults/TokenSearchRow.tsx +++ b/src/containers/shared/components/TokenSearchResults/TokenSearchRow.tsx @@ -41,10 +41,10 @@ const IssuerAddress: FC<{ token: any; onClick: any }> = ({ token, onClick }) => className="issuer-link" > <div className="issuer-name"> - {token.meta.issuer.name ? `${token.meta.issuer.name} (` : token.issuer} + {token.meta.issuer.name && `${token.meta.issuer.name} (`} </div> <div className="issuer-address truncate">{token.issuer}</div> - <div>)</div> + {token.meta.issuer.name && <div>)</div>} </Link> ) : null From 8d503dad9667a77950cdaa8ef929b81e659cc428 Mon Sep 17 00:00:00 2001 From: Caleb Kniffen <ckniffen@ripple.com> Date: Tue, 17 Dec 2024 18:31:41 -0600 Subject: [PATCH 64/79] fix: handling of token page throttling (#1100) The token page is prone to being throttled because it tries to load in order books for the "top 10 tokens". This change moves logic to useQuery and out of redux. It then makes sure the token's information is loaded in before trying to load in dex pairs. Fixes https://github.com/ripple/explorer/issues/790 ### Type of Change <!-- Please check relevant options, delete irrelevant ones. --> - [x] Bug fix (non-breaking change which fixes an issue) - [ ] New feature (non-breaking change which adds functionality) - [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected) - [x] Refactor (non-breaking change that only restructures code) - [x] Tests (You added tests for code that already exists, or your new feature included in this PR) - [ ] Documentation Updates - [ ] Translation Updates - [ ] Release ### TypeScript/Hooks Update - [ ] Updated files to React Hooks - [x] Updated files to TypeScript ## Before / After ### Before  ### After  --- src/containers/App/index.tsx | 2 +- .../Token/TokenHeader/actionTypes.js | 4 - src/containers/Token/TokenHeader/actions.js | 43 ------- src/containers/Token/TokenHeader/index.tsx | 60 ++-------- src/containers/Token/TokenHeader/reducer.js | 33 ------ .../Token/TokenHeader/test/actions.test.js | 108 ------------------ .../Token/TokenHeader/test/reducer.test.js | 79 ------------- src/containers/Token/index.tsx | 44 ++++--- src/containers/Token/test/index.test.tsx | 54 ++++----- src/rippled/{token.js => token.ts} | 25 +++- src/rootReducer.js | 5 - 11 files changed, 86 insertions(+), 371 deletions(-) delete mode 100644 src/containers/Token/TokenHeader/actionTypes.js delete mode 100644 src/containers/Token/TokenHeader/actions.js delete mode 100644 src/containers/Token/TokenHeader/reducer.js delete mode 100644 src/containers/Token/TokenHeader/test/actions.test.js delete mode 100644 src/containers/Token/TokenHeader/test/reducer.test.js rename src/rippled/{token.js => token.ts} (74%) diff --git a/src/containers/App/index.tsx b/src/containers/App/index.tsx index 1b5734800..479628594 100644 --- a/src/containers/App/index.tsx +++ b/src/containers/App/index.tsx @@ -34,7 +34,7 @@ import { Transaction } from '../Transactions' import { Network } from '../Network' import { Validator } from '../Validators' import { PayString } from '../PayStrings' -import Token from '../Token' +import { Token } from '../Token' import { NFT } from '../NFT/NFT' import { legacyRedirect } from './legacyRedirects' import { useCustomNetworks } from '../shared/hooks' diff --git a/src/containers/Token/TokenHeader/actionTypes.js b/src/containers/Token/TokenHeader/actionTypes.js deleted file mode 100644 index c539d0ce4..000000000 --- a/src/containers/Token/TokenHeader/actionTypes.js +++ /dev/null @@ -1,4 +0,0 @@ -export const START_LOADING_ACCOUNT_STATE = 'START_LOADING_ACCOUNT_STATE' -export const FINISHED_LOADING_ACCOUNT_STATE = 'FINISHED_LOADING_ACCOUNT_STATE' -export const ACCOUNT_STATE_LOAD_SUCCESS = 'ACCOUNT_STATE_LOAD_SUCCESS' -export const ACCOUNT_STATE_LOAD_FAIL = 'ACCOUNT_STATE_LOAD_FAIL' diff --git a/src/containers/Token/TokenHeader/actions.js b/src/containers/Token/TokenHeader/actions.js deleted file mode 100644 index 0d56b287d..000000000 --- a/src/containers/Token/TokenHeader/actions.js +++ /dev/null @@ -1,43 +0,0 @@ -import { isValidClassicAddress, isValidXAddress } from 'ripple-address-codec' -import { getToken } from '../../../rippled' -import { analytics } from '../../shared/analytics' -import { BAD_REQUEST } from '../../shared/utils' -import * as actionTypes from './actionTypes' - -export const loadTokenState = - (currency, accountId, rippledSocket) => (dispatch) => { - if (!isValidClassicAddress(accountId) && !isValidXAddress(accountId)) { - dispatch({ - type: actionTypes.ACCOUNT_STATE_LOAD_FAIL, - status: BAD_REQUEST, - error: '', - }) - return Promise.resolve() - } - - dispatch({ - type: actionTypes.START_LOADING_ACCOUNT_STATE, - }) - return getToken(currency, accountId, rippledSocket) - .then((data) => { - dispatch({ type: actionTypes.FINISHED_LOADING_ACCOUNT_STATE }) - dispatch({ - type: actionTypes.ACCOUNT_STATE_LOAD_SUCCESS, - data, - }) - }) - .catch((error) => { - const status = error.code - analytics.trackException( - `token ${currency}.${accountId} --- ${JSON.stringify(error)}`, - ) - dispatch({ type: actionTypes.FINISHED_LOADING_ACCOUNT_STATE }) - dispatch({ - type: actionTypes.ACCOUNT_STATE_LOAD_FAIL, - error: status === 500 ? 'get_account_state_failed' : '', - status, - }) - }) - } - -export default loadTokenState diff --git a/src/containers/Token/TokenHeader/index.tsx b/src/containers/Token/TokenHeader/index.tsx index f529da88a..a3b3ddcfc 100644 --- a/src/containers/Token/TokenHeader/index.tsx +++ b/src/containers/Token/TokenHeader/index.tsx @@ -1,12 +1,6 @@ -import { useContext, useEffect } from 'react' import { useTranslation } from 'react-i18next' -import { connect } from 'react-redux' -import { bindActionCreators } from 'redux' -import { loadTokenState } from './actions' -import { Loader } from '../../shared/components/Loader' import './styles.scss' import { localizeNumber, formatLargeNumber } from '../../shared/utils' -import SocketContext from '../../shared/SocketContext' import Currency from '../../shared/components/Currency' import { Account } from '../../shared/components/Account' import DomainLink from '../../shared/components/DomainLink' @@ -14,6 +8,7 @@ import { TokenTableRow } from '../../shared/components/TokenTableRow' import { useLanguage } from '../../shared/hooks' import { LEDGER_ROUTE, TRANSACTION_ROUTE } from '../../App/routes' import { RouteLink } from '../../shared/routing' +import { TokenData } from '../../../rippled/token' const CURRENCY_OPTIONS = { style: 'currency', @@ -23,44 +18,21 @@ const CURRENCY_OPTIONS = { } interface TokenHeaderProps { - loading: boolean accountId: string currency: string - data: { - balance: string - reserve: number - sequence: number - rate: number - obligations: string - domain: string - emailHash: string - previousLedger: number - previousTxn: string - flags: string[] - } - actions: { - loadTokenState: typeof loadTokenState - } + data: TokenData } -const TokenHeader = ({ - actions, +export const TokenHeader = ({ accountId, currency, data, - loading, }: TokenHeaderProps) => { const language = useLanguage() const { t } = useTranslation() - const rippledSocket = useContext(SocketContext) - - useEffect(() => { - actions.loadTokenState(currency, accountId, rippledSocket) - }, [accountId, actions, currency, rippledSocket]) + const { domain, rate, emailHash, previousLedger, previousTxn } = data const renderDetails = () => { - const { domain, rate, emailHash, previousLedger, previousTxn } = data - const prevTxn = previousTxn && previousTxn.replace(/(.{20})..+/, '$1...') const abbrvEmail = emailHash && emailHash.replace(/(.{20})..+/, '$1...') return ( @@ -156,7 +128,9 @@ const TokenHeader = ({ language, CURRENCY_OPTIONS, ) - const obligationsBalance = formatLargeNumber(Number.parseFloat(obligations)) + const obligationsBalance = formatLargeNumber( + Number.parseFloat(obligations || '0'), + ) return ( <div className="section header-container"> @@ -201,7 +175,6 @@ const TokenHeader = ({ ) } - const { emailHash } = data return ( <div className="box token-header"> <div className="section box-header"> @@ -213,24 +186,7 @@ const TokenHeader = ({ /> )} </div> - <div className="box-content"> - {loading ? <Loader /> : renderHeaderContent()} - </div> + <div className="box-content">{renderHeaderContent()}</div> </div> ) } - -export default connect( - (state: any) => ({ - loading: state.tokenHeader.loading, - data: state.tokenHeader.data, - }), - (dispatch) => ({ - actions: bindActionCreators( - { - loadTokenState, - }, - dispatch, - ), - }), -)(TokenHeader) diff --git a/src/containers/Token/TokenHeader/reducer.js b/src/containers/Token/TokenHeader/reducer.js deleted file mode 100644 index b4768d53b..000000000 --- a/src/containers/Token/TokenHeader/reducer.js +++ /dev/null @@ -1,33 +0,0 @@ -import * as actionTypes from './actionTypes' - -export const initialState = { - loading: false, - data: {}, - error: '', - status: null, -} - -// eslint-disable-next-line default-param-last -const tokenReducer = (state = initialState, action) => { - switch (action.type) { - case actionTypes.START_LOADING_ACCOUNT_STATE: - return { ...state, loading: true } - case actionTypes.FINISHED_LOADING_ACCOUNT_STATE: - return { ...state, loading: false } - case actionTypes.ACCOUNT_STATE_LOAD_SUCCESS: - return { ...state, error: '', data: action.data } - case actionTypes.ACCOUNT_STATE_LOAD_FAIL: - return { - ...state, - error: action.error, - status: action.status, - data: state.data.length ? state.data : {}, - } - case 'persist/REHYDRATE': - return { ...initialState } - default: - return state - } -} - -export default tokenReducer diff --git a/src/containers/Token/TokenHeader/test/actions.test.js b/src/containers/Token/TokenHeader/test/actions.test.js deleted file mode 100644 index bfae5b48a..000000000 --- a/src/containers/Token/TokenHeader/test/actions.test.js +++ /dev/null @@ -1,108 +0,0 @@ -import configureMockStore from 'redux-mock-store' -import thunk from 'redux-thunk' -import * as actions from '../actions' -import * as actionTypes from '../actionTypes' -import { initialState } from '../reducer' -import { NOT_FOUND, BAD_REQUEST, SERVER_ERROR } from '../../../shared/utils' -import rippledResponses from './rippledResponses.json' -import actNotFound from './actNotFound.json' -import MockWsClient from '../../../test/mockWsClient' - -const TEST_ADDRESS = 'rDsbeomae4FXwgQTJp9Rs64Qg9vDiTCdBv' -const TEST_CURRENCY = 'abc' - -describe('TokenHeader Actions', () => { - jest.setTimeout(10000) - - const middlewares = [thunk] - const mockStore = configureMockStore(middlewares) - let client - beforeEach(() => { - client = new MockWsClient() - }) - - afterEach(() => { - client.close() - }) - - it('should dispatch correct actions on successful loadTokenState', () => { - client.addResponses(rippledResponses) - const expectedData = { - name: undefined, - obligations: '100', - sequence: 2148991, - reserve: 10, - rate: undefined, - domain: undefined, - emailHash: undefined, - flags: [], - balance: '123456000', - previousTxn: - '6B6F2CA1633A22247058E988372BA9EFFFC5BF10212230B67341CA32DC9D4A82', - previousLedger: 68990183, - } - const expectedActions = [ - { type: actionTypes.START_LOADING_ACCOUNT_STATE }, - { type: actionTypes.FINISHED_LOADING_ACCOUNT_STATE }, - { type: actionTypes.ACCOUNT_STATE_LOAD_SUCCESS, data: expectedData }, - ] - const store = mockStore({ news: initialState }) - return store - .dispatch(actions.loadTokenState(TEST_CURRENCY, TEST_ADDRESS, client)) - .then(() => { - expect(store.getActions()).toEqual(expectedActions) - }) - }) - - it('should dispatch correct actions on server error', () => { - client.setReturnError() - const expectedActions = [ - { type: actionTypes.START_LOADING_ACCOUNT_STATE }, - { type: actionTypes.FINISHED_LOADING_ACCOUNT_STATE }, - { - type: actionTypes.ACCOUNT_STATE_LOAD_FAIL, - status: SERVER_ERROR, - error: 'get_account_state_failed', - }, - ] - const store = mockStore({ news: initialState }) - return store - .dispatch(actions.loadTokenState(TEST_CURRENCY, TEST_ADDRESS, client)) - .then(() => { - expect(store.getActions()).toEqual(expectedActions) - }) - }) - - it('should dispatch correct actions on ripple address not found', () => { - client.addResponse('account_info', { result: actNotFound }) - const expectedActions = [ - { type: actionTypes.START_LOADING_ACCOUNT_STATE }, - { type: actionTypes.FINISHED_LOADING_ACCOUNT_STATE }, - { - type: actionTypes.ACCOUNT_STATE_LOAD_FAIL, - status: NOT_FOUND, - error: '', - }, - ] - const store = mockStore({ news: initialState }) - return store - .dispatch(actions.loadTokenState(TEST_CURRENCY, TEST_ADDRESS, client)) - .then(() => { - expect(store.getActions()).toEqual(expectedActions) - }) - }) - - it('should dispatch correct actions on invalid ripple address', () => { - const expectedActions = [ - { - type: actionTypes.ACCOUNT_STATE_LOAD_FAIL, - status: BAD_REQUEST, - error: '', - }, - ] - const store = mockStore({ news: initialState }) - store.dispatch(actions.loadTokenState('ZZZ', null, client)).then(() => { - expect(store.getActions()).toEqual(expectedActions) - }) - }) -}) diff --git a/src/containers/Token/TokenHeader/test/reducer.test.js b/src/containers/Token/TokenHeader/test/reducer.test.js deleted file mode 100644 index ceecc491f..000000000 --- a/src/containers/Token/TokenHeader/test/reducer.test.js +++ /dev/null @@ -1,79 +0,0 @@ -import * as actionTypes from '../actionTypes' -import reducer, { initialState } from '../reducer' - -describe('AccountHeader reducers', () => { - it('should return the initial state', () => { - expect(reducer(undefined, {})).toEqual(initialState) - }) - - it('should handle START_LOADING_ACCOUNT_STATE', () => { - const nextState = { ...initialState, loading: true } - expect( - reducer(initialState, { type: actionTypes.START_LOADING_ACCOUNT_STATE }), - ).toEqual(nextState) - }) - - it('should handle FINISHED_LOADING_ACCOUNT_STATE', () => { - const nextState = { ...initialState, loading: false } - expect( - reducer(initialState, { - type: actionTypes.FINISHED_LOADING_ACCOUNT_STATE, - }), - ).toEqual(nextState) - }) - - it('should handle ACCOUNT_STATE_LOAD_SUCCESS', () => { - const data = [['XRP', 123.456]] - const nextState = { ...initialState, data } - expect( - reducer(initialState, { - data, - type: actionTypes.ACCOUNT_STATE_LOAD_SUCCESS, - }), - ).toEqual(nextState) - }) - - it('should handle ACCOUNT_STATE_LOAD_FAIL', () => { - const status = 500 - const error = 'error' - const nextState = { ...initialState, status, error } - expect( - reducer(initialState, { - status, - error, - type: actionTypes.ACCOUNT_STATE_LOAD_FAIL, - }), - ).toEqual(nextState) - }) - - it('will not clear previous data on ACCOUNT_STATE_LOAD_FAIL', () => { - const data = [['XRP', 123.456]] - const error = 'error' - const status = 500 - const stateWithData = { ...initialState, data } - const nextState = { ...stateWithData, error, status } - expect( - reducer(stateWithData, { - status, - error, - type: actionTypes.ACCOUNT_STATE_LOAD_FAIL, - }), - ).toEqual(nextState) - }) - - it('should clear data on rehydration', () => { - const error = 'error' - const status = 500 - const nextState = { ...initialState, error, status } - expect( - reducer(initialState, { - type: actionTypes.ACCOUNT_STATE_LOAD_FAIL, - error, - status, - }), - ).toEqual(nextState) - expect(reducer(nextState, { type: 'persist/REHYDRATE' })).toEqual( - initialState, - ) - }) -}) diff --git a/src/containers/Token/index.tsx b/src/containers/Token/index.tsx index 09310ac75..00362cf0e 100644 --- a/src/containers/Token/index.tsx +++ b/src/containers/Token/index.tsx @@ -1,9 +1,9 @@ -import { FC, PropsWithChildren, useEffect } from 'react' +import { FC, PropsWithChildren, useContext, useEffect } from 'react' import { useTranslation } from 'react-i18next' -import { connect } from 'react-redux' import { Helmet } from 'react-helmet-async' -import TokenHeader from './TokenHeader' +import { useQuery } from 'react-query' +import { TokenHeader } from './TokenHeader' import { TokenTransactionTable } from './TokenTransactionTable' import { DEXPairs } from './DEXPairs' import NoMatch from '../NoMatch' @@ -14,6 +14,9 @@ import { useAnalytics } from '../shared/analytics' import { ErrorMessages } from '../shared/Interfaces' import { TOKEN_ROUTE } from '../App/routes' import { useRouteParams } from '../shared/routing' +import { getToken } from '../../rippled' +import SocketContext from '../shared/SocketContext' +import { Loader } from '../shared/components/Loader' const IS_MAINNET = process.env.VITE_ENVIRONMENT === 'mainnet' @@ -45,11 +48,20 @@ const Page: FC<PropsWithChildren<{ accountId: string }>> = ({ </div> ) -const Token: FC<{ error: string }> = ({ error }) => { +export const Token = () => { + const rippledSocket = useContext(SocketContext) const { trackScreenLoaded } = useAnalytics() const { token = '' } = useRouteParams(TOKEN_ROUTE) const [currency, accountId] = token.split('.') const { t } = useTranslation() + const { + data: tokenData, + error: tokenDataError, + isLoading: isTokenDataLoading, + } = useQuery({ + queryKey: ['token', currency, accountId], + queryFn: () => getToken(currency, accountId, rippledSocket), + }) useEffect(() => { trackScreenLoaded({ @@ -63,21 +75,31 @@ const Token: FC<{ error: string }> = ({ error }) => { }, [accountId, currency, trackScreenLoaded]) const renderError = () => { - const message = getErrorMessage(error) + const message = getErrorMessage(tokenDataError) return <NoMatch title={message.title} hints={message.hints} /> } - if (error) { + if (tokenDataError) { return <Page accountId={accountId}>{renderError()}</Page> } return ( <Page accountId={accountId}> - {accountId && <TokenHeader accountId={accountId} currency={currency} />} - {accountId && IS_MAINNET && ( + {isTokenDataLoading ? ( + <Loader /> + ) : ( + tokenData && ( + <TokenHeader + accountId={accountId} + currency={currency} + data={tokenData} + /> + ) + )} + {accountId && tokenData && IS_MAINNET && ( <DEXPairs accountId={accountId} currency={currency} /> )} - {accountId && ( + {accountId && tokenData && ( <div className="section"> <h2>{t('token_transactions')}</h2> <TokenTransactionTable accountId={accountId} currency={currency} /> @@ -91,7 +113,3 @@ const Token: FC<{ error: string }> = ({ error }) => { </Page> ) } - -export default connect((state: any) => ({ - error: state.accountHeader.status, -}))(Token) diff --git a/src/containers/Token/test/index.test.tsx b/src/containers/Token/test/index.test.tsx index c2f749d62..2ff37ad5a 100644 --- a/src/containers/Token/test/index.test.tsx +++ b/src/containers/Token/test/index.test.tsx @@ -1,33 +1,32 @@ import { mount } from 'enzyme' -import configureMockStore from 'redux-mock-store' -import thunk from 'redux-thunk' -import { Provider } from 'react-redux' import { Route } from 'react-router-dom' -import { initialState } from '../../../rootReducer' import i18n from '../../../i18n/testConfig' -import Token from '../index' -import TokenHeader from '../TokenHeader' +import { Token } from '../index' +import { TokenHeader } from '../TokenHeader' import { TokenTransactionTable } from '../TokenTransactionTable' -import mockAccountState from '../../Accounts/test/mockAccountState.json' -import { QuickHarness } from '../../test/utils' +import { flushPromises, QuickHarness } from '../../test/utils' import { TOKEN_ROUTE } from '../../App/routes' +import mockAccount from '../../Accounts/test/mockAccountState.json' +import Mock = jest.Mock +import { getToken } from '../../../rippled' + +jest.mock('../../../rippled', () => ({ + __esModule: true, + getToken: jest.fn(), +})) describe('Token container', () => { const TEST_ACCOUNT_ID = 'rTEST_ACCOUNT' - const middlewares = [thunk] - const mockStore = configureMockStore(middlewares) - const createWrapper = (state = {}) => { - const store = mockStore({ ...initialState, ...state }) + const createWrapper = (getAccountImpl = () => new Promise(() => {})) => { + ;(getToken as Mock).mockImplementation(getAccountImpl) return mount( - <Provider store={store}> - <QuickHarness - i18n={i18n} - initialEntries={[`/token/USD.${TEST_ACCOUNT_ID}`]} - > - <Route path={TOKEN_ROUTE.path} element={<Token />} /> - </QuickHarness> - </Provider>, + <QuickHarness + i18n={i18n} + initialEntries={[`/token/USD.${TEST_ACCOUNT_ID}`]} + > + <Route path={TOKEN_ROUTE.path} element={<Token />} /> + </QuickHarness>, ) } @@ -36,17 +35,10 @@ describe('Token container', () => { wrapper.unmount() }) - it('renders static parts', () => { - const state = { - ...initialState, - accountHeader: { - loading: false, - error: null, - data: mockAccountState, - }, - } - - const wrapper = createWrapper(state) + it('renders static parts', async () => { + const wrapper = createWrapper(() => Promise.resolve(mockAccount)) + await flushPromises() + wrapper.update() expect(wrapper.find(TokenHeader).length).toBe(1) expect(wrapper.find(TokenTransactionTable).length).toBe(1) wrapper.unmount() diff --git a/src/rippled/token.js b/src/rippled/token.ts similarity index 74% rename from src/rippled/token.js rename to src/rippled/token.ts index aedc188c2..9f6d8736d 100644 --- a/src/rippled/token.js +++ b/src/rippled/token.ts @@ -4,7 +4,26 @@ import { getBalances, getAccountInfo, getServerInfo } from './lib/rippled' const log = logger({ name: 'iou' }) -const getToken = async (currencyCode, issuer, rippledSocket) => { +export interface TokenData { + name: string + balance: string + reserve: number + sequence: number + gravatar: string + rate?: number + obligations?: string + domain?: string + emailHash?: string + previousLedger: number + previousTxn: string + flags: string[] +} + +const getToken = async ( + currencyCode, + issuer, + rippledSocket, +): Promise<TokenData> => { try { log.info('fetching account info from rippled') const accountInfo = await getAccountInfo(rippledSocket, issuer) @@ -47,7 +66,9 @@ const getToken = async (currencyCode, issuer, rippledSocket) => { previousLedger, } } catch (error) { - log.error(error.toString()) + if (error) { + log.error(error.toString()) + } throw error } } diff --git a/src/rootReducer.js b/src/rootReducer.js index 69ab09b9a..0ad9a2f70 100644 --- a/src/rootReducer.js +++ b/src/rootReducer.js @@ -2,18 +2,13 @@ import { combineReducers } from 'redux' import accountHeaderReducer, { initialState as accountHeaderState, } from './containers/Accounts/AccountHeader/reducer' -import tokenHeaderReducer, { - initialState as tokenHeaderState, -} from './containers/Token/TokenHeader/reducer' export const initialState = { accountHeader: accountHeaderState, - tokenHeader: tokenHeaderState, } const rootReducer = combineReducers({ accountHeader: accountHeaderReducer, - tokenHeader: tokenHeaderReducer, }) export default rootReducer From a123225962e9b264c8625502af00f9ad7a83387a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 18 Dec 2024 18:07:46 +0000 Subject: [PATCH 65/79] chore(deps-dev): bump eslint-plugin-react-hooks from 4.6.0 to 4.6.2 (#1087) --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 482783fdc..e5fcdbd81 100644 --- a/package-lock.json +++ b/package-lock.json @@ -88,7 +88,7 @@ "eslint-plugin-jsx-a11y": "^6.9.0", "eslint-plugin-prettier": "^5.1.3", "eslint-plugin-react": "^7.34.2", - "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-react-hooks": "^4.6.2", "jest-enzyme": "^7.1.0", "jest-websocket-mock": "^2.5.0", "lint-staged": "^15.2.10", @@ -11991,9 +11991,9 @@ } }, "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", - "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", + "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", "dev": true, "engines": { "node": ">=10" @@ -37254,9 +37254,9 @@ } }, "eslint-plugin-react-hooks": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", - "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", + "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", "dev": true, "requires": {} }, diff --git a/package.json b/package.json index f042929bf..d44571646 100644 --- a/package.json +++ b/package.json @@ -83,7 +83,7 @@ "eslint-plugin-jsx-a11y": "^6.9.0", "eslint-plugin-prettier": "^5.1.3", "eslint-plugin-react": "^7.34.2", - "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-react-hooks": "^4.6.2", "jest-enzyme": "^7.1.0", "jest-websocket-mock": "^2.5.0", "lint-staged": "^15.2.10", From 20a9dacdaa1bab89f9627b0e30c00cca26aeedf8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 21 Jan 2025 14:47:12 +0000 Subject: [PATCH 66/79] chore(deps-dev): bump @babel/preset-react from 7.24.7 to 7.26.3 (#1104) --- package-lock.json | 411 ++++++++++++++++++++++------------------------ package.json | 2 +- 2 files changed, 197 insertions(+), 216 deletions(-) diff --git a/package-lock.json b/package-lock.json index e5fcdbd81..0a0670ee0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -64,7 +64,7 @@ "devDependencies": { "@babel/eslint-parser": "^7.22.6", "@babel/preset-env": "^7.25.7", - "@babel/preset-react": "^7.24.7", + "@babel/preset-react": "^7.26.3", "@types/create-hash": "^1.2.6", "@types/enzyme": "^3.10.12", "@types/jest": "^26.0.24", @@ -152,11 +152,12 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.25.7.tgz", - "integrity": "sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g==", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", "dependencies": { - "@babel/highlight": "^7.25.7", + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", "picocolors": "^1.0.0" }, "engines": { @@ -240,11 +241,12 @@ } }, "node_modules/@babel/generator": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.7.tgz", - "integrity": "sha512-5Dqpl5fyV9pIAD62yK9P7fcA768uVPUyrQmqpqstHWgMma4feF1x/oFysBCVZLY5wJ2GkMUCdsNDnGZrPoR6rA==", + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.3.tgz", + "integrity": "sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ==", "dependencies": { - "@babel/types": "^7.25.7", + "@babel/parser": "^7.26.3", + "@babel/types": "^7.26.3", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^3.0.2" @@ -254,12 +256,12 @@ } }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.7.tgz", - "integrity": "sha512-4xwU8StnqnlIhhioZf1tqnVWeQ9pvH/ujS8hRfw/WOza+/a+1qv69BWNy+oY231maTCWgKWhfBU7kDpsds6zAA==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", + "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", "dev": true, "dependencies": { - "@babel/types": "^7.25.7" + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -400,12 +402,12 @@ } }, "node_modules/@babel/helper-module-imports": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.7.tgz", - "integrity": "sha512-o0xCgpNmRohmnoWKQ0Ij8IdddjyBFE4T2kagL/x6M3+4zUgc+4qTOUBoNe4XxDskt1HPKO007ZPiMgLDq2s7Kw==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", "dependencies": { - "@babel/traverse": "^7.25.7", - "@babel/types": "^7.25.7" + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -441,9 +443,9 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.7.tgz", - "integrity": "sha512-eaPZai0PiqCi09pPs3pAFfl/zYgGaE6IdXtYvmf0qlcDTd3WCtO7JWCcRd64e0EQrcYgiHibEZnOGsSY4QSgaw==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz", + "integrity": "sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==", "engines": { "node": ">=6.9.0" } @@ -520,25 +522,25 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.7.tgz", - "integrity": "sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.7.tgz", - "integrity": "sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.7.tgz", - "integrity": "sha512-ytbPLsm+GjArDYXJ8Ydr1c/KJuutjF2besPNbIZnZ6MKUxi/uTA22t2ymmA4WFjZFpjiAMO0xuuJPqK2nvDVfQ==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", "engines": { "node": ">=6.9.0" } @@ -570,26 +572,12 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/highlight": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.25.7.tgz", - "integrity": "sha512-iYyACpW3iW8Fw+ZybQK+drQre+ns/tKpXbNESfrhNnPLIklLbXr7MYJ6gPEd0iETGLOK+SxMjVvKb/ffmk+FEw==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.25.7", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/parser": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.7.tgz", - "integrity": "sha512-aZn7ETtQsjjGG5HruveUK06cU3Hljuhd9Iojm4M8WWv3wLE6OkE5PWbDUkItmMgegmccaITudyuW5RPYrYlgWw==", + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.3.tgz", + "integrity": "sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==", "dependencies": { - "@babel/types": "^7.25.7" + "@babel/types": "^7.26.3" }, "bin": { "parser": "bin/babel-parser.js" @@ -946,12 +934,12 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz", - "integrity": "sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz", + "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1718,12 +1706,12 @@ } }, "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.7.tgz", - "integrity": "sha512-H/Snz9PFxKsS1JLI4dJLtnJgCJRoo0AUm3chP6NYr+9En1JMKloheEiLIhlp5MDVznWo+H3AAC1Mc8lmUEpsgg==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.25.9.tgz", + "integrity": "sha512-KJfMlYIUxQB1CJfO3e0+h0ZHWOTLCPP115Awhaz8U0Zpq36Gl/cXlpoyMRnUWlhNUBAzldnCiAZNvCDj7CrKxQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1733,16 +1721,16 @@ } }, "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.24.7.tgz", - "integrity": "sha512-+Dj06GDZEFRYvclU6k4bme55GKBEWUmByM/eoKuqg4zTNQHiApWRhQph5fxQB2wAEFvRzL1tOEj1RJ19wJrhoA==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.9.tgz", + "integrity": "sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-jsx": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/plugin-syntax-jsx": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1752,12 +1740,12 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.24.7.tgz", - "integrity": "sha512-QG9EnzoGn+Qar7rxuW+ZOsbWOt56FvvI93xInqsZDC5fsekx1AlIO4KIJ5M+D0p0SqSH156EpmZyXq630B8OlQ==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.25.9.tgz", + "integrity": "sha512-9mj6rm7XVYs4mdLIpbZnHOYdpW42uoiBCTVowg7sP1thUOiANgMb4UtpRivR0pp5iL+ocvUv7X4mZgFRpJEzGw==", "dev": true, "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.24.7" + "@babel/plugin-transform-react-jsx": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1795,13 +1783,13 @@ } }, "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.24.7.tgz", - "integrity": "sha512-PLgBVk3fzbmEjBJ/u8kFzOqS9tUeDjiaWud/rRym/yjCo/M9cASPlnrd2ZmmZpQT40fOOrvR8jh+n8jikrOhNA==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.25.9.tgz", + "integrity": "sha512-KQ/Takk3T8Qzj5TppkS1be588lkbTp5uj7w6a0LeQaTMSckU/wK0oJ/pih+T690tkgI5jfmg2TqDJvd41Sj1Cg==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -2189,17 +2177,17 @@ } }, "node_modules/@babel/preset-react": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.24.7.tgz", - "integrity": "sha512-AAH4lEkpmzFWrGVlHaxJB7RLH21uPQ9+He+eFLWHmF9IuFQVugz8eAsamaW0DXRrTfco5zj1wWtpdcXJUOfsag==", + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.26.3.tgz", + "integrity": "sha512-Nl03d6T9ky516DGK2YMxrTqvnpUW63TnJMOMonj+Zae0JiPC5BC9xPMSL6L8fiSpA5vP88qfygavVQvnLp+6Cw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-validator-option": "^7.24.7", - "@babel/plugin-transform-react-display-name": "^7.24.7", - "@babel/plugin-transform-react-jsx": "^7.24.7", - "@babel/plugin-transform-react-jsx-development": "^7.24.7", - "@babel/plugin-transform-react-pure-annotations": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "@babel/plugin-transform-react-display-name": "^7.25.9", + "@babel/plugin-transform-react-jsx": "^7.25.9", + "@babel/plugin-transform-react-jsx-development": "^7.25.9", + "@babel/plugin-transform-react-pure-annotations": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -2239,28 +2227,28 @@ } }, "node_modules/@babel/template": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.7.tgz", - "integrity": "sha512-wRwtAgI3bAS+JGU2upWNL9lSlDcRCqD05BZ1n3X2ONLH1WilFP6O1otQjeMK/1g0pvYcXC7b/qVUB1keofjtZA==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", + "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", "dependencies": { - "@babel/code-frame": "^7.25.7", - "@babel/parser": "^7.25.7", - "@babel/types": "^7.25.7" + "@babel/code-frame": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.7.tgz", - "integrity": "sha512-jatJPT1Zjqvh/1FyJs6qAHL+Dzb7sTb+xr7Q+gM1b+1oBsMsQQ4FkVKb6dFlJvLlVssqkRzV05Jzervt9yhnzg==", - "dependencies": { - "@babel/code-frame": "^7.25.7", - "@babel/generator": "^7.25.7", - "@babel/parser": "^7.25.7", - "@babel/template": "^7.25.7", - "@babel/types": "^7.25.7", + "version": "7.26.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.4.tgz", + "integrity": "sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w==", + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.3", + "@babel/parser": "^7.26.3", + "@babel/template": "^7.25.9", + "@babel/types": "^7.26.3", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -2269,13 +2257,12 @@ } }, "node_modules/@babel/types": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.7.tgz", - "integrity": "sha512-vwIVdXG+j+FOpkwqHRcBgHLYNL7XMkufrlaFvL9o6Ai9sJn9+PdyIL5qa0XzTZw084c+u9LOls53eoZWP/W5WQ==", + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.3.tgz", + "integrity": "sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==", "dependencies": { - "@babel/helper-string-parser": "^7.25.7", - "@babel/helper-validator-identifier": "^7.25.7", - "to-fast-properties": "^2.0.0" + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -7573,6 +7560,7 @@ }, "node_modules/ansi-styles": { "version": "3.2.1", + "dev": true, "license": "MIT", "dependencies": { "color-convert": "^1.9.0" @@ -9277,6 +9265,7 @@ }, "node_modules/chalk": { "version": "2.4.2", + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", @@ -9645,6 +9634,7 @@ }, "node_modules/color-convert": { "version": "1.9.3", + "dev": true, "license": "MIT", "dependencies": { "color-name": "1.1.3" @@ -9652,6 +9642,7 @@ }, "node_modules/color-name": { "version": "1.1.3", + "dev": true, "license": "MIT" }, "node_modules/colord": { @@ -11396,6 +11387,7 @@ }, "node_modules/escape-string-regexp": { "version": "1.0.5", + "dev": true, "license": "MIT", "engines": { "node": ">=0.8.0" @@ -13875,6 +13867,7 @@ }, "node_modules/has-flag": { "version": "3.0.0", + "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -26592,6 +26585,7 @@ }, "node_modules/supports-color": { "version": "5.5.0", + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^3.0.0" @@ -26966,13 +26960,6 @@ "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", "dev": true }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/to-object-path": { "version": "0.3.0", "dev": true, @@ -29038,11 +29025,12 @@ } }, "@babel/code-frame": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.25.7.tgz", - "integrity": "sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g==", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", "requires": { - "@babel/highlight": "^7.25.7", + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", "picocolors": "^1.0.0" } }, @@ -29103,23 +29091,24 @@ } }, "@babel/generator": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.7.tgz", - "integrity": "sha512-5Dqpl5fyV9pIAD62yK9P7fcA768uVPUyrQmqpqstHWgMma4feF1x/oFysBCVZLY5wJ2GkMUCdsNDnGZrPoR6rA==", + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.3.tgz", + "integrity": "sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ==", "requires": { - "@babel/types": "^7.25.7", + "@babel/parser": "^7.26.3", + "@babel/types": "^7.26.3", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^3.0.2" } }, "@babel/helper-annotate-as-pure": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.7.tgz", - "integrity": "sha512-4xwU8StnqnlIhhioZf1tqnVWeQ9pvH/ujS8hRfw/WOza+/a+1qv69BWNy+oY231maTCWgKWhfBU7kDpsds6zAA==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", + "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", "dev": true, "requires": { - "@babel/types": "^7.25.7" + "@babel/types": "^7.25.9" } }, "@babel/helper-builder-binary-assignment-operator-visitor": { @@ -29230,12 +29219,12 @@ } }, "@babel/helper-module-imports": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.7.tgz", - "integrity": "sha512-o0xCgpNmRohmnoWKQ0Ij8IdddjyBFE4T2kagL/x6M3+4zUgc+4qTOUBoNe4XxDskt1HPKO007ZPiMgLDq2s7Kw==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", "requires": { - "@babel/traverse": "^7.25.7", - "@babel/types": "^7.25.7" + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" } }, "@babel/helper-module-transforms": { @@ -29259,9 +29248,9 @@ } }, "@babel/helper-plugin-utils": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.7.tgz", - "integrity": "sha512-eaPZai0PiqCi09pPs3pAFfl/zYgGaE6IdXtYvmf0qlcDTd3WCtO7JWCcRd64e0EQrcYgiHibEZnOGsSY4QSgaw==" + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz", + "integrity": "sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==" }, "@babel/helper-remap-async-to-generator": { "version": "7.25.7", @@ -29314,19 +29303,19 @@ } }, "@babel/helper-string-parser": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.7.tgz", - "integrity": "sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g==" + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==" }, "@babel/helper-validator-identifier": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.7.tgz", - "integrity": "sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==" + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==" }, "@babel/helper-validator-option": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.7.tgz", - "integrity": "sha512-ytbPLsm+GjArDYXJ8Ydr1c/KJuutjF2besPNbIZnZ6MKUxi/uTA22t2ymmA4WFjZFpjiAMO0xuuJPqK2nvDVfQ==" + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==" }, "@babel/helper-wrap-function": { "version": "7.25.7", @@ -29349,23 +29338,12 @@ "@babel/types": "^7.23.6" } }, - "@babel/highlight": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.25.7.tgz", - "integrity": "sha512-iYyACpW3iW8Fw+ZybQK+drQre+ns/tKpXbNESfrhNnPLIklLbXr7MYJ6gPEd0iETGLOK+SxMjVvKb/ffmk+FEw==", - "requires": { - "@babel/helper-validator-identifier": "^7.25.7", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" - } - }, "@babel/parser": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.7.tgz", - "integrity": "sha512-aZn7ETtQsjjGG5HruveUK06cU3Hljuhd9Iojm4M8WWv3wLE6OkE5PWbDUkItmMgegmccaITudyuW5RPYrYlgWw==", + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.3.tgz", + "integrity": "sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==", "requires": { - "@babel/types": "^7.25.7" + "@babel/types": "^7.26.3" } }, "@babel/plugin-bugfix-firefox-class-in-computed-class-key": { @@ -29591,12 +29569,12 @@ } }, "@babel/plugin-syntax-jsx": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz", - "integrity": "sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz", + "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.9" } }, "@babel/plugin-syntax-logical-assignment-operators": { @@ -30074,34 +30052,34 @@ } }, "@babel/plugin-transform-react-display-name": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.7.tgz", - "integrity": "sha512-H/Snz9PFxKsS1JLI4dJLtnJgCJRoo0AUm3chP6NYr+9En1JMKloheEiLIhlp5MDVznWo+H3AAC1Mc8lmUEpsgg==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.25.9.tgz", + "integrity": "sha512-KJfMlYIUxQB1CJfO3e0+h0ZHWOTLCPP115Awhaz8U0Zpq36Gl/cXlpoyMRnUWlhNUBAzldnCiAZNvCDj7CrKxQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.9" } }, "@babel/plugin-transform-react-jsx": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.24.7.tgz", - "integrity": "sha512-+Dj06GDZEFRYvclU6k4bme55GKBEWUmByM/eoKuqg4zTNQHiApWRhQph5fxQB2wAEFvRzL1tOEj1RJ19wJrhoA==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.9.tgz", + "integrity": "sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-jsx": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/plugin-syntax-jsx": "^7.25.9", + "@babel/types": "^7.25.9" } }, "@babel/plugin-transform-react-jsx-development": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.24.7.tgz", - "integrity": "sha512-QG9EnzoGn+Qar7rxuW+ZOsbWOt56FvvI93xInqsZDC5fsekx1AlIO4KIJ5M+D0p0SqSH156EpmZyXq630B8OlQ==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.25.9.tgz", + "integrity": "sha512-9mj6rm7XVYs4mdLIpbZnHOYdpW42uoiBCTVowg7sP1thUOiANgMb4UtpRivR0pp5iL+ocvUv7X4mZgFRpJEzGw==", "dev": true, "requires": { - "@babel/plugin-transform-react-jsx": "^7.24.7" + "@babel/plugin-transform-react-jsx": "^7.25.9" } }, "@babel/plugin-transform-react-jsx-self": { @@ -30121,13 +30099,13 @@ } }, "@babel/plugin-transform-react-pure-annotations": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.24.7.tgz", - "integrity": "sha512-PLgBVk3fzbmEjBJ/u8kFzOqS9tUeDjiaWud/rRym/yjCo/M9cASPlnrd2ZmmZpQT40fOOrvR8jh+n8jikrOhNA==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.25.9.tgz", + "integrity": "sha512-KQ/Takk3T8Qzj5TppkS1be588lkbTp5uj7w6a0LeQaTMSckU/wK0oJ/pih+T690tkgI5jfmg2TqDJvd41Sj1Cg==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" } }, "@babel/plugin-transform-regenerator": { @@ -30411,17 +30389,17 @@ } }, "@babel/preset-react": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.24.7.tgz", - "integrity": "sha512-AAH4lEkpmzFWrGVlHaxJB7RLH21uPQ9+He+eFLWHmF9IuFQVugz8eAsamaW0DXRrTfco5zj1wWtpdcXJUOfsag==", + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.26.3.tgz", + "integrity": "sha512-Nl03d6T9ky516DGK2YMxrTqvnpUW63TnJMOMonj+Zae0JiPC5BC9xPMSL6L8fiSpA5vP88qfygavVQvnLp+6Cw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-validator-option": "^7.24.7", - "@babel/plugin-transform-react-display-name": "^7.24.7", - "@babel/plugin-transform-react-jsx": "^7.24.7", - "@babel/plugin-transform-react-jsx-development": "^7.24.7", - "@babel/plugin-transform-react-pure-annotations": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "@babel/plugin-transform-react-display-name": "^7.25.9", + "@babel/plugin-transform-react-jsx": "^7.25.9", + "@babel/plugin-transform-react-jsx-development": "^7.25.9", + "@babel/plugin-transform-react-pure-annotations": "^7.25.9" } }, "@babel/preset-typescript": { @@ -30446,37 +30424,36 @@ } }, "@babel/template": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.7.tgz", - "integrity": "sha512-wRwtAgI3bAS+JGU2upWNL9lSlDcRCqD05BZ1n3X2ONLH1WilFP6O1otQjeMK/1g0pvYcXC7b/qVUB1keofjtZA==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", + "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", "requires": { - "@babel/code-frame": "^7.25.7", - "@babel/parser": "^7.25.7", - "@babel/types": "^7.25.7" + "@babel/code-frame": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/types": "^7.25.9" } }, "@babel/traverse": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.7.tgz", - "integrity": "sha512-jatJPT1Zjqvh/1FyJs6qAHL+Dzb7sTb+xr7Q+gM1b+1oBsMsQQ4FkVKb6dFlJvLlVssqkRzV05Jzervt9yhnzg==", - "requires": { - "@babel/code-frame": "^7.25.7", - "@babel/generator": "^7.25.7", - "@babel/parser": "^7.25.7", - "@babel/template": "^7.25.7", - "@babel/types": "^7.25.7", + "version": "7.26.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.4.tgz", + "integrity": "sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w==", + "requires": { + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.3", + "@babel/parser": "^7.26.3", + "@babel/template": "^7.25.9", + "@babel/types": "^7.26.3", "debug": "^4.3.1", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.7.tgz", - "integrity": "sha512-vwIVdXG+j+FOpkwqHRcBgHLYNL7XMkufrlaFvL9o6Ai9sJn9+PdyIL5qa0XzTZw084c+u9LOls53eoZWP/W5WQ==", + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.3.tgz", + "integrity": "sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==", "requires": { - "@babel/helper-string-parser": "^7.25.7", - "@babel/helper-validator-identifier": "^7.25.7", - "to-fast-properties": "^2.0.0" + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" } }, "@bcoe/v8-coverage": { @@ -33877,6 +33854,7 @@ }, "ansi-styles": { "version": "3.2.1", + "dev": true, "requires": { "color-convert": "^1.9.0" } @@ -35094,6 +35072,7 @@ }, "chalk": { "version": "2.4.2", + "dev": true, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -35332,12 +35311,14 @@ }, "color-convert": { "version": "1.9.3", + "dev": true, "requires": { "color-name": "1.1.3" } }, "color-name": { - "version": "1.1.3" + "version": "1.1.3", + "dev": true }, "colord": { "version": "2.9.3", @@ -36610,7 +36591,8 @@ "version": "1.0.3" }, "escape-string-regexp": { - "version": "1.0.5" + "version": "1.0.5", + "dev": true }, "escodegen": { "version": "1.14.3", @@ -38282,7 +38264,8 @@ "dev": true }, "has-flag": { - "version": "3.0.0" + "version": "3.0.0", + "dev": true }, "has-property-descriptors": { "version": "1.0.2", @@ -46941,6 +46924,7 @@ }, "supports-color": { "version": "5.5.0", + "dev": true, "requires": { "has-flag": "^3.0.0" } @@ -47202,9 +47186,6 @@ "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", "dev": true }, - "to-fast-properties": { - "version": "2.0.0" - }, "to-object-path": { "version": "0.3.0", "dev": true, diff --git a/package.json b/package.json index d44571646..0cd388040 100644 --- a/package.json +++ b/package.json @@ -59,7 +59,7 @@ "devDependencies": { "@babel/eslint-parser": "^7.22.6", "@babel/preset-env": "^7.25.7", - "@babel/preset-react": "^7.24.7", + "@babel/preset-react": "^7.26.3", "@types/create-hash": "^1.2.6", "@types/enzyme": "^3.10.12", "@types/jest": "^26.0.24", From 21176369800e040e2e5e1dc765338379c68a8464 Mon Sep 17 00:00:00 2001 From: pdp2121 <71317875+pdp2121@users.noreply.github.com> Date: Wed, 29 Jan 2025 10:36:01 -0500 Subject: [PATCH 67/79] fix: Sass depreciation warnings (#1124) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## High Level Overview of Change <!-- Please include a summary/list of the changes. If too broad, please consider splitting into multiple PRs. --> Fix these warnings in build: ``` Deprecation Warning: The legacy JS API is deprecated and will be removed in Dart Sass 2.0.0. More info: https://sass-lang.com/d/legacy-js-api transforming (891) ../node_modules/topojson-client/src/identity.jsDeprecation Warning: The legacy JS API is deprecated and will be removed in Dart Sass 2.0.0. More info: https://sass-lang.com/d/legacy-js-api Deprecation Warning: Sass @import rules are deprecated and will be removed in Dart Sass 3.0.0. More info and automated migrator: https://sass-lang.com/d/import ╷ 1 │ @import '../../css/variables'; │ ^^^^^^^^^^^^^^^^^^^^^ ╵ src/containers/shared/components/TokenSearchResults/styles.scss 1:9 root stylesheet Deprecation Warning: Sass's behavior for declarations that appear after nested rules will be changing to match the behavior specified by CSS in an upcoming version. To keep the existing behavior, move the declaration above the nested rule. To opt into the new behavior, wrap the declaration in `& {}`. More info: https://sass-lang.com/d/mixed-decls ╷ 164 │ font-weight: 500; │ ^^^^^^^^^^^^^^^^ declaration ... │ 200 │ ┌ @media (min-width: $desktop-upper-boundary) { 201 │ │ @content; 202 │ │ } │ └─── nested rule ╵ src/containers/shared/css/variables.scss 164:3 medium() src/containers/NFT/NFTTabs/styles.scss 67:7 root stylesheet ``` Resolve https://github.com/ripple/explorer/issues/1121 ### Type of Change <!-- Please check relevant options, delete irrelevant ones. --> - [x] Bug fix (non-breaking change which fixes an issue) - [ ] New feature (non-breaking change which adds functionality) - [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected) - [ ] Refactor (non-breaking change that only restructures code) - [ ] Tests (You added tests for code that already exists, or your new feature included in this PR) - [ ] Documentation Updates - [ ] Translation Updates - [ ] Release --- .../AccountHeader/BalanceSelector/balance-selector.scss | 2 +- .../shared/components/TokenSearchResults/styles.scss | 2 +- src/containers/shared/css/variables.scss | 2 +- vite.config.js | 6 ++++++ 4 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/containers/Accounts/AccountHeader/BalanceSelector/balance-selector.scss b/src/containers/Accounts/AccountHeader/BalanceSelector/balance-selector.scss index 30860340e..31c4742a4 100644 --- a/src/containers/Accounts/AccountHeader/BalanceSelector/balance-selector.scss +++ b/src/containers/Accounts/AccountHeader/BalanceSelector/balance-selector.scss @@ -1,4 +1,4 @@ -@use 'src/containers/shared/css/variables' as *; +@use '../../../shared/css/variables.scss' as *; .balance-selector { position: relative; diff --git a/src/containers/shared/components/TokenSearchResults/styles.scss b/src/containers/shared/components/TokenSearchResults/styles.scss index beec5b9de..903d9688d 100644 --- a/src/containers/shared/components/TokenSearchResults/styles.scss +++ b/src/containers/shared/components/TokenSearchResults/styles.scss @@ -1,4 +1,4 @@ -@import '../../css/variables'; +@use '../../css/variables' as *; .search-results-menu { position: absolute; diff --git a/src/containers/shared/css/variables.scss b/src/containers/shared/css/variables.scss index 91b259bed..8acd9b3a0 100644 --- a/src/containers/shared/css/variables.scss +++ b/src/containers/shared/css/variables.scss @@ -155,7 +155,7 @@ $XRP_XRP: #0a93eb; $XRP_CAD: #ca3103; $XRP_OTHERS: #f52a79; -// Font wights +// Font weights @mixin regular { font-weight: 400; } diff --git a/vite.config.js b/vite.config.js index 2e64dc529..fd3b7cf11 100644 --- a/vite.config.js +++ b/vite.config.js @@ -87,5 +87,11 @@ export default defineConfig({ autoprefixer({}), // add options if needed ], }, + preprocessorOptions: { + scss: { + api: 'modern-compiler', + silenceDeprecations: ['mixed-decls'], + }, + }, }, }) From f0d7385ed0506f7987aa157e7e257a45d9dd8324 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari <mvadari@ripple.com> Date: Wed, 5 Feb 2025 12:11:05 -0800 Subject: [PATCH 68/79] feat: add % upgraded to the bar charts (#1115) --- src/containers/Network/BarChartVersion.tsx | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/containers/Network/BarChartVersion.tsx b/src/containers/Network/BarChartVersion.tsx index b49b0ad13..6b092b3f7 100644 --- a/src/containers/Network/BarChartVersion.tsx +++ b/src/containers/Network/BarChartVersion.tsx @@ -47,17 +47,21 @@ const CustomTooltip = ({ }: TooltipProps<ValueType, NameType>) => { const { t } = useTranslation() if (active) { + const valCount = payload?.[0]?.payload?.validatorCount ?? 0 + const valPercent = payload?.[0]?.payload?.validatorPercent.toFixed(2) ?? 0 + const nodeCount = payload?.[0]?.payload?.nodeCount ?? 0 + const nodePercent = payload?.[0]?.payload?.nodePercent.toFixed(2) ?? 0 return ( <div className="custom-tooltip"> <p className="label">{t('version_display', { version: label })}</p> <p className="value"> {t('validator_count', { - val_count: payload?.[0]?.payload?.validatorCount ?? 0, + val_count: `${valCount} (${valPercent}%)`, })} </p> <p className="value"> {t('node_count', { - node_count: payload?.[0]?.payload?.nodeCount ?? 0, + node_count: `${nodeCount} (${nodePercent}%)`, })} </p> </div> From 5b7661f55bea3d30649e23c3ca061afdc6465a1c Mon Sep 17 00:00:00 2001 From: Lathan Britz <jucallme@gmail.com> Date: Thu, 6 Feb 2025 22:12:05 -0400 Subject: [PATCH 69/79] rebase --- package-lock.json | 120 +++++-- package.json | 3 +- public/locales/ca-CA/translations.json | 8 +- public/locales/en-US/translations.json | 8 +- .../BreakDownTab/breakDownTab.scss | 119 +++++++ .../Transactions/BreakDownTab/index.tsx | 303 ++++++++++++++++++ src/containers/Transactions/index.tsx | 10 + 7 files changed, 543 insertions(+), 28 deletions(-) create mode 100644 src/containers/Transactions/BreakDownTab/breakDownTab.scss create mode 100644 src/containers/Transactions/BreakDownTab/index.tsx diff --git a/package-lock.json b/package-lock.json index 0a0670ee0..46355693f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -59,7 +59,7 @@ "vite-plugin-html": "^3.2.2", "vite-plugin-svgr": "^4.2.0", "vite-tsconfig-paths": "^4.2.0", - "xrpl-client": "^2.4.0" + "xrpl-tx-path-parser": "github:shortthefomo/xrpl-tx-path-parser#dev" }, "devDependencies": { "@babel/eslint-parser": "^7.22.6", @@ -5366,7 +5366,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", - "dev": true, "dependencies": { "@noble/hashes": "1.3.2" }, @@ -6065,7 +6064,6 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.2.tgz", "integrity": "sha512-N1ZhksgwD3OBlwTv3R6KFEcPojl/W4ElJOeCZdi+vuI5QmTFwLq3OFf2zd2ROpKvxFdgZ6hUpb0dx9bVNEwYCA==", - "dev": true, "dependencies": { "@noble/curves": "~1.2.0", "@noble/hashes": "~1.3.2", @@ -6079,7 +6077,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.1.tgz", "integrity": "sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==", - "dev": true, "dependencies": { "@noble/hashes": "~1.3.0", "@scure/base": "~1.1.0" @@ -7423,12 +7420,33 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/@xrplf/secret-numbers/-/secret-numbers-1.0.0.tgz", "integrity": "sha512-qsCLGyqe1zaq9j7PZJopK+iGTGRbk6akkg6iZXJJgxKwck0C5x5Gnwlb1HKYGOwPKyrXWpV6a2YmcpNpUFctGg==", - "dev": true, "dependencies": { "@xrplf/isomorphic": "^1.0.0", "ripple-keypairs": "^2.0.0" } }, + "node_modules/@xrplkit/amount": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@xrplkit/amount/-/amount-1.2.3.tgz", + "integrity": "sha512-poV7ym7EhjAlEGym9Kc3AHuy3uuhVW3qnl2KDr8D4zk7hANj7aG6l1XdtWIAGAgBpHnvPEaOG7+llPRRv1irZw==", + "dependencies": { + "@xrplkit/xfl": "2.0.2" + } + }, + "node_modules/@xrplkit/txmeta": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@xrplkit/txmeta/-/txmeta-1.3.1.tgz", + "integrity": "sha512-iJNtLgXTpbuYBI0VDsXJhi3MHxmsCdWsI3OumETk+21HjxDw1AmPGmVHWu8q8turFth1qzRIAtHjxLHDl307sg==", + "dependencies": { + "@xrplkit/amount": "1.2.3", + "@xrplkit/xfl": "2.0.2" + } + }, + "node_modules/@xrplkit/xfl": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@xrplkit/xfl/-/xfl-2.0.2.tgz", + "integrity": "sha512-OUZZzSoXSxYxuhBcz08Wb9Xme71PkFYejk3vq4jPzdXreVhF71ZrM6nSObHFgasC8/srWKoqiS37CnB2Ht3k/g==" + }, "node_modules/abab": { "version": "2.0.5", "dev": true, @@ -10471,10 +10489,9 @@ } }, "node_modules/decimal.js": { - "version": "10.3.1", - "dev": true, - "license": "MIT", - "peer": true + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" }, "node_modules/decimal.js-light": { "version": "2.5.1", @@ -24701,10 +24718,16 @@ } }, "node_modules/ripple-binary-codec": { +<<<<<<< HEAD "version": "2.1.0", "resolved": "https://registry.npmjs.org/ripple-binary-codec/-/ripple-binary-codec-2.1.0.tgz", "integrity": "sha512-q0GAx+hj3UVcDbhXVjk7qeNfgUMehlElYJwiCuIBwqs/51GVTOwLr39Ht3eNsX5ow2xPRaC5mqHwcFDvLRm6cA==", "dev": true, +======= + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ripple-binary-codec/-/ripple-binary-codec-2.0.0.tgz", + "integrity": "sha512-zakENc9A5dlW85uzrmQHrJehymhL59ftggboRNrjxFDJdlNJ6DSE210P3ys/9kL0oVtOzFnTrOPFfxHZeOsA/Q==", +>>>>>>> 68ad193 (breakdown tab for payments and offercreates) "dependencies": { "@xrplf/isomorphic": "^1.0.1", "bignumber.js": "^9.0.0", @@ -24718,7 +24741,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ripple-keypairs/-/ripple-keypairs-2.0.0.tgz", "integrity": "sha512-b5rfL2EZiffmklqZk1W+dvSy97v3V/C7936WxCCgDynaGPp7GE6R2XO7EU9O2LlM/z95rj870IylYnOQs+1Rag==", - "dev": true, "dependencies": { "@noble/curves": "^1.0.0", "@xrplf/isomorphic": "^1.0.0", @@ -28897,10 +28919,16 @@ "peer": true }, "node_modules/xrpl": { +<<<<<<< HEAD "version": "3.1.0", "resolved": "https://registry.npmjs.org/xrpl/-/xrpl-3.1.0.tgz", "integrity": "sha512-+97WiaF/AQTT6fXgD9Z5xyYbtlML0USCWrZFYjrC57yqtlWluacwwbMZa/I6ByVIKqCqVXJwRuRl20IQGlVGlg==", "dev": true, +======= + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xrpl/-/xrpl-3.0.0.tgz", + "integrity": "sha512-QC+dNx3tvMEn9IrxcXFFa0rWwvBwACkGFNKl+W2miMGYnlgSiIsnjdqwtG2WRs0Pyxs5dd9nBTQHyQ1BPxZ78A==", +>>>>>>> 68ad193 (breakdown tab for payments and offercreates) "dependencies": { "@scure/bip32": "^1.3.1", "@scure/bip39": "^1.2.1", @@ -28926,11 +28954,20 @@ "websocket": "^1.0.34" } }, + "node_modules/xrpl-tx-path-parser": { + "version": "1.0.4", + "resolved": "git+ssh://git@github.com/shortthefomo/xrpl-tx-path-parser.git#8f5f4d5bc3bc83c6fffedf9bfe172d5a3c9d1c76", + "license": "ISC", + "dependencies": { + "@xrplkit/txmeta": "^1.3.1", + "decimal.js": "^10.4.3", + "xrpl": "^3.0.0" + } + }, "node_modules/xrpl/node_modules/cross-fetch": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==", - "dev": true, "dependencies": { "node-fetch": "^2.6.12" } @@ -28938,8 +28975,7 @@ "node_modules/xrpl/node_modules/eventemitter3": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", - "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", - "dev": true + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==" }, "node_modules/y18n": { "version": "4.0.3", @@ -32491,7 +32527,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", - "dev": true, "requires": { "@noble/hashes": "1.3.2" } @@ -32853,7 +32888,6 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.2.tgz", "integrity": "sha512-N1ZhksgwD3OBlwTv3R6KFEcPojl/W4ElJOeCZdi+vuI5QmTFwLq3OFf2zd2ROpKvxFdgZ6hUpb0dx9bVNEwYCA==", - "dev": true, "requires": { "@noble/curves": "~1.2.0", "@noble/hashes": "~1.3.2", @@ -32864,7 +32898,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.1.tgz", "integrity": "sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==", - "dev": true, "requires": { "@noble/hashes": "~1.3.0", "@scure/base": "~1.1.0" @@ -33766,12 +33799,33 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/@xrplf/secret-numbers/-/secret-numbers-1.0.0.tgz", "integrity": "sha512-qsCLGyqe1zaq9j7PZJopK+iGTGRbk6akkg6iZXJJgxKwck0C5x5Gnwlb1HKYGOwPKyrXWpV6a2YmcpNpUFctGg==", - "dev": true, "requires": { "@xrplf/isomorphic": "^1.0.0", "ripple-keypairs": "^2.0.0" } }, + "@xrplkit/amount": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@xrplkit/amount/-/amount-1.2.3.tgz", + "integrity": "sha512-poV7ym7EhjAlEGym9Kc3AHuy3uuhVW3qnl2KDr8D4zk7hANj7aG6l1XdtWIAGAgBpHnvPEaOG7+llPRRv1irZw==", + "requires": { + "@xrplkit/xfl": "2.0.2" + } + }, + "@xrplkit/txmeta": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@xrplkit/txmeta/-/txmeta-1.3.1.tgz", + "integrity": "sha512-iJNtLgXTpbuYBI0VDsXJhi3MHxmsCdWsI3OumETk+21HjxDw1AmPGmVHWu8q8turFth1qzRIAtHjxLHDl307sg==", + "requires": { + "@xrplkit/amount": "1.2.3", + "@xrplkit/xfl": "2.0.2" + } + }, + "@xrplkit/xfl": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@xrplkit/xfl/-/xfl-2.0.2.tgz", + "integrity": "sha512-OUZZzSoXSxYxuhBcz08Wb9Xme71PkFYejk3vq4jPzdXreVhF71ZrM6nSObHFgasC8/srWKoqiS37CnB2Ht3k/g==" + }, "abab": { "version": "2.0.5", "dev": true @@ -35910,9 +35964,9 @@ } }, "decimal.js": { - "version": "10.3.1", - "dev": true, - "peer": true + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" }, "decimal.js-light": { "version": "2.5.1" @@ -45644,10 +45698,16 @@ } }, "ripple-binary-codec": { +<<<<<<< HEAD "version": "2.1.0", "resolved": "https://registry.npmjs.org/ripple-binary-codec/-/ripple-binary-codec-2.1.0.tgz", "integrity": "sha512-q0GAx+hj3UVcDbhXVjk7qeNfgUMehlElYJwiCuIBwqs/51GVTOwLr39Ht3eNsX5ow2xPRaC5mqHwcFDvLRm6cA==", "dev": true, +======= + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ripple-binary-codec/-/ripple-binary-codec-2.0.0.tgz", + "integrity": "sha512-zakENc9A5dlW85uzrmQHrJehymhL59ftggboRNrjxFDJdlNJ6DSE210P3ys/9kL0oVtOzFnTrOPFfxHZeOsA/Q==", +>>>>>>> 68ad193 (breakdown tab for payments and offercreates) "requires": { "@xrplf/isomorphic": "^1.0.1", "bignumber.js": "^9.0.0", @@ -45658,7 +45718,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ripple-keypairs/-/ripple-keypairs-2.0.0.tgz", "integrity": "sha512-b5rfL2EZiffmklqZk1W+dvSy97v3V/C7936WxCCgDynaGPp7GE6R2XO7EU9O2LlM/z95rj870IylYnOQs+1Rag==", - "dev": true, "requires": { "@noble/curves": "^1.0.0", "@xrplf/isomorphic": "^1.0.0", @@ -48417,10 +48476,16 @@ "peer": true }, "xrpl": { +<<<<<<< HEAD "version": "3.1.0", "resolved": "https://registry.npmjs.org/xrpl/-/xrpl-3.1.0.tgz", "integrity": "sha512-+97WiaF/AQTT6fXgD9Z5xyYbtlML0USCWrZFYjrC57yqtlWluacwwbMZa/I6ByVIKqCqVXJwRuRl20IQGlVGlg==", "dev": true, +======= + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xrpl/-/xrpl-3.0.0.tgz", + "integrity": "sha512-QC+dNx3tvMEn9IrxcXFFa0rWwvBwACkGFNKl+W2miMGYnlgSiIsnjdqwtG2WRs0Pyxs5dd9nBTQHyQ1BPxZ78A==", +>>>>>>> 68ad193 (breakdown tab for payments and offercreates) "requires": { "@scure/bip32": "^1.3.1", "@scure/bip39": "^1.2.1", @@ -48438,7 +48503,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==", - "dev": true, "requires": { "node-fetch": "^2.6.12" } @@ -48446,8 +48510,7 @@ "eventemitter3": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", - "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", - "dev": true + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==" } } }, @@ -48460,6 +48523,15 @@ "websocket": "^1.0.34" } }, + "xrpl-tx-path-parser": { + "version": "git+ssh://git@github.com/shortthefomo/xrpl-tx-path-parser.git#8f5f4d5bc3bc83c6fffedf9bfe172d5a3c9d1c76", + "from": "xrpl-tx-path-parser@github:shortthefomo/xrpl-tx-path-parser#dev", + "requires": { + "@xrplkit/txmeta": "^1.3.1", + "decimal.js": "^10.4.3", + "xrpl": "^3.0.0" + } + }, "y18n": { "version": "4.0.3", "dev": true, diff --git a/package.json b/package.json index 0cd388040..cb3b9666c 100644 --- a/package.json +++ b/package.json @@ -54,7 +54,8 @@ "vite-plugin-html": "^3.2.2", "vite-plugin-svgr": "^4.2.0", "vite-tsconfig-paths": "^4.2.0", - "xrpl-client": "^2.4.0" + "xrpl-client": "^2.4.0", + "xrpl-tx-path-parser": "github:shortthefomo/xrpl-tx-path-parser#dev" }, "devDependencies": { "@babel/eslint-parser": "^7.22.6", diff --git a/public/locales/ca-CA/translations.json b/public/locales/ca-CA/translations.json index 02d1367b3..f908c7f53 100644 --- a/public/locales/ca-CA/translations.json +++ b/public/locales/ca-CA/translations.json @@ -75,6 +75,7 @@ "not_found_default_title": "No s'ha trobat la pàgina", "not_found_check_url": "Si us plau, comproba l'URL", "not_found": "No s'ha trobat", + "breakdown": "Breakdown", "buy": "Compra", "sell": "Ven", "price": "Preu", @@ -525,6 +526,7 @@ "indicate_unl": "indica un validador en una UNL", "transaction_tokens_involved": "<Currency/> i <Currency2/>", "transaction_tokens_swapped": "<Currency/> per <Currency2/>", +<<<<<<< HEAD "oracle_document_id": null, "provider": null, "last_update_time": null, @@ -560,5 +562,9 @@ "search_results_banner": null, "enable_amendment_name": null, "amendment_status": null, - "expected_date": null + "expected_date": null, + "graph_dependant_currency": "*Graph is dependant on the currency used.", + "incomplete_transaction": "Incomplete transaction", + "liquidity_source": "Liquidity Source", + "balance_changes": "Balance Changes" } diff --git a/public/locales/en-US/translations.json b/public/locales/en-US/translations.json index 83fb30d98..20720ef48 100644 --- a/public/locales/en-US/translations.json +++ b/public/locales/en-US/translations.json @@ -78,6 +78,7 @@ "not_found_default_title": "Page Not Found", "not_found_check_url": "Please double check your URL", "not_found": "Not found", + "breakdown": "Breakdown", "buy": "Buy", "sell": "Sell", "price": "Price", @@ -560,6 +561,9 @@ "search_results_banner": "Token search by name and account is now available! Try searching for USD", "enable_amendment_name": "Amendment Name", "amendment_status": "Amendment Status", - "expected_date": "Expected Date" - + "expected_date": "Expected Date", + "graph_dependant_currency": "*Graph is dependant on the currency used.", + "incomplete_transaction": "Incomplete transaction", + "liquidity_source": "Liquidity Source", + "balance_changes": "Balance Changes" } diff --git a/src/containers/Transactions/BreakDownTab/breakDownTab.scss b/src/containers/Transactions/BreakDownTab/breakDownTab.scss new file mode 100644 index 000000000..2dd19fa67 --- /dev/null +++ b/src/containers/Transactions/BreakDownTab/breakDownTab.scss @@ -0,0 +1,119 @@ +@import '../../shared/css/variables'; + +.breakdown-body { + margin-top: 20px; + color: $black-40; + font-size: 12px; + letter-spacing: 0px; +} + +.detail-section { + padding: 5px 15px; + border-bottom: 1px solid $black-70; + margin: 0px 0px 30px; + + &:last-child { + border: none; + } + + &.no-border { + border: none; + } +} + +.title { + margin-bottom: 4px; + color: $white; + font-size: 16px; + text-transform: capitalize; + @include bold; + + span { + margin-left: 8px; + font-size: 10px; + line-height: 18px; + } +} + +.flex { + display: flex; +} + +.rectangle-container { + min-height: 200px; + // margin-top: 100px; +} + +:root{ + --max-height: 80%; +} + +// Build the cylinder +$circle-height: 9px; + +.rectangle-row { + position: relative; + display: block; + height: 50px; +} + +.rectangle { + position: relative; + left: 0; + display: block; + width: $circle-height; + height: 30px; + box-sizing: border-box; + border-top: solid 2px var(--cylinder-color); + border-bottom: solid 2px var(--cylinder-color); + margin-top: 10px; + margin-left: 10px; + animation: grow 600ms 1.5s ease both; + background: linear-gradient(to right, #271527, var(--cylinder-color)); + // transform: rotate(90deg); +} + +.margin-text { + position: relative; + display: block; + border-bottom: dashed 1px $white; + font-weight: bold; + text-align: right; + text-transform: capitalize; + // transform: rotate(-180deg); + // writing-mode: vertical-rl; +} + +.rectangle::before, +.rectangle::after { + position: absolute; + top: -2px; + right: -3px; + width: $circle-height; + height: 30px; + box-sizing: border-box; + border: solid 2px var(--cylinder-color); + border-radius: 50%; + content: ''; +} + +.rectangle::before { + left: calc(-1 * $circle-height / 2); + background: #271527; +} + +.rectangle::after { + z-index: -1; + right: calc(-1 * $circle-height / 2); + background: var(--cylinder-color); +} + +@keyframes grow { + 0% { + width: 0; + } + + 100% { + width: calc(var(--max-height) * var(--percent-value)); // Change this to make things ✨ + } +} diff --git a/src/containers/Transactions/BreakDownTab/index.tsx b/src/containers/Transactions/BreakDownTab/index.tsx new file mode 100644 index 000000000..31decba57 --- /dev/null +++ b/src/containers/Transactions/BreakDownTab/index.tsx @@ -0,0 +1,303 @@ +import { FC, useState } from 'react' +import { useTranslation } from 'react-i18next' +import parsePayment from 'xrpl-tx-path-parser' +import { Account } from '../../shared/components/Account' +import { Amount } from '../../shared/components/Amount' +import { formatAmount } from '../../../rippled/lib/txSummary/formatAmount' +import Currency from '../../shared/components/Currency' + +import './breakDownTab.scss' + +// import { +// createSourceAmount, +// createPaymentDefaultPaths, +// amountToBalance, +// } from 'xrpl-tx-path-parser' + +export const BreakDownTab: FC<{ data: any }> = ({ data }) => { + const { t } = useTranslation() + const [selectedView, setView] = useState('source') + + const hexToString = (hex: string) => { + let string = '' + for (let i = 0; i < hex.length; i += 2) { + const part = hex.substring(i, i + 2) + const code = parseInt(part, 16) + if (!isNaN(code) && code !== 0) { + string += String.fromCharCode(code) + } + } + return string + } + const BalanceChange: FC<{ + data: any + label: Boolean + type: String + }> = ({ data, label, type }) => { + const balances = [] + data.forEach((change, index) => { + change.value *= -1 + + let balanceLabel = + type === 'direct' ? 'recieved' : change.value < 0 ? 'sold' : 'bought' + if (type === 'direct') { + change.value *= -1 + } + if (!label) { + balanceLabel = '' + } + balances.push( + <li key={index}> + {balanceLabel} <Amount value={formatAmount(change)} /> + </li>, + ) + }) + + return <ul>{balances}</ul> + } + // eslint-disable-next-line react/no-unstable-nested-components + const Transaction: FC<{ parsed: any; account: Account }> = ({ + parsed, + account, + }) => { + const changes = [] + parsed.accountBalanceChanges.forEach((change, index) => { + if (account !== change.account) { + let type: String = 'direct' + if (change.isAMM) { + type = 'amm' + } + if (change.isOffer) { + type = 'dex' + } + if (change.isRippling) { + type = 'rippling' + } + changes.push( + <p key={`${index}-p`}> + <span>{type}</span> <Account account={change.account} /> + </p>, + + <BalanceChange + key={`${index}-b`} + data={change.balances} + label={!change.isRippling} + type={type} + />, + ) + } + }) + + return <div>{changes}</div> + } + + // eslint-disable-next-line react/no-unstable-nested-components + const Cylindars: FC<{ parsed: any; account: Account }> = ({ + parsed, + account, + }) => { + const sum = { + amm: 0, + rippling: 0, + dex: 0, + direct: 0, + total: 0, + } + parsed.accountBalanceChanges.forEach((change) => { + if (account !== change.account) { + change.balances.forEach((balance) => { + // if (parsed.sourceAmount.currency === balance.currency) { + if ( + (selectedView === 'source' && + parsed.destinationAmount.currency === balance.currency) || + (selectedView === 'destination' && + parsed.sourceAmount.currency === balance.currency) + ) { + if (change.isAMM) { + sum.amm += balance.value * -1 + sum.total += balance.value * -1 + } + if (change.isOffer) { + sum.dex += balance.value * -1 + sum.total += balance.value * -1 + } + if (change.isDirect) { + sum.direct += balance.value * 1 + sum.total += balance.value * 1 + } + if (change.isRippling && balance.value * 1 > 0) { + sum.rippling += + selectedView === 'destination' + ? balance.value * -1 + : balance.value * 1 + } + } + }) + } + }) + + const NON_STANDARD_CODE_LENGTH = 40 + const XRP = 'XRP' + const LP_TOKEN_IDENTIFIER = '03' + const destinationCurrencyCode = + parsed.destinationAmount.currency?.length === NON_STANDARD_CODE_LENGTH && + parsed.destinationAmount.currency?.substring(0, 2) !== LP_TOKEN_IDENTIFIER + ? hexToString(parsed.destinationAmount.currency) + : parsed.destinationAmount.currency + const sourceCurrencyCode = + parsed.sourceAmount.currency?.length === NON_STANDARD_CODE_LENGTH && + parsed.sourceAmount.currency?.substring(0, 2) !== LP_TOKEN_IDENTIFIER + ? hexToString(parsed.sourceAmount.currency) + : parsed.sourceAmount.currency + + return ( + <div> + {/* <h5> + AMM: {sum.amm} {(sum.amm / sum.total) * 100} + </h5> + <h5> + RIPPLING: {sum.rippling} {(sum.rippling / sum.total) * 100} + </h5> + <h5> + DEX: {sum.dex} {(sum.dex / sum.total) * 100} + </h5> + <h5> + DIRECT: {sum.direct} {(sum.direct / sum.total) * 100} + </h5> + <h5>TOTAL: {sum.total}</h5> */} + + <select + value={selectedView} // ...force the select's value to match the state variable... + onChange={(e) => setView(e.target.value)} + > + <option value="source"> + {sourceCurrencyCode} {t('source')} + </option> + <option value="destination"> + {destinationCurrencyCode} {t('destination')} + </option> + </select> + <p>{t('graph_dependant_currency')}</p> + <div className="rectangle-row"> + <div + className="rectangle" + style={{ + ['--percent-value' as any]: sum.amm / sum.total, + ['--cylinder-color' as any]: '#ff198b', + }} + /> + <span className="margin-text"> + AMM ({Math.round((sum.amm / sum.total) * 100)}%) + </span> + </div> + <div className="rectangle-row"> + <div + className="rectangle" + style={{ + ['--percent-value' as any]: sum.rippling / sum.total, + ['--cylinder-color' as any]: '#32e685', + }} + /> + <span className="margin-text"> + RIPPLING ({Math.round((sum.rippling / sum.total) * 100)}%) + </span> + </div> + <div className="rectangle-row"> + <div + className="rectangle" + style={{ + ['--percent-value' as any]: sum.dex / sum.total, + ['--cylinder-color' as any]: '#19a3ff', + }} + /> + <span className="margin-text"> + DEX ({Math.round((sum.dex / sum.total) * 100)}%) + </span> + </div> + <div className="rectangle-row"> + <div + className="rectangle" + style={{ + ['--percent-value' as any]: sum.direct / sum.total, + ['--cylinder-color' as any]: '#9a52ff', + }} + /> + <span className="margin-text"> + DIRECT ({Math.round((sum.direct / sum.total) * 100)}%) + </span> + </div> + <div className="rectangle-row"> + <div + className="rectangle" + style={{ + ['--percent-value' as any]: 1, + ['--cylinder-color' as any]: '#faff19', + }} + /> + <span className="margin-text"> + TOTAL{' '} + <Amount + value={formatAmount( + selectedView === 'destination' + ? parsed.sourceAmount + : parsed.destinationAmount, + )} + /> + </span> + </div> + </div> + ) + } + + const renderData = () => { + data.tx.meta = data.meta + // delete mutate.meta + try { + const parsed = parsePayment(data.tx) + if ( + parsed.sourceAmount.value === '0' && + data.tx.TransactionType === 'OfferCreate' + ) { + return <h3>{t('The offer has not crossed anything yet.')}</h3> + } + + return ( + <div className="row"> + <div className="detail-section"> + <div className="title">{data.tx.TransactionType}</div> + <div> + Source: <Account account={parsed.sourceAccount} /> + </div> + <div> + <Amount value={formatAmount(parsed.sourceAmount)} /> + </div> + <br /> + <div> + Destination: <Account account={parsed.destinationAccount} /> + </div> + <div> + <Amount value={formatAmount(parsed.destinationAmount)} /> + </div> + </div> + <div className="detail-section no-border"> + <div className="title">{t('liquidity_source')}</div> + <Cylindars parsed={parsed} account={parsed.sourceAccount} /> + </div> + <div className="detail-section"> + <div className="title">{t('balance_changes')}</div> + <Transaction parsed={parsed} account={parsed.sourceAccount} /> + </div> + {/* < + // debug.... + div className="detail-section"> + <pre>{JSON.stringify(parsed, null, 2)}</pre> + </div> */} + </div> + ) + } catch (e) { + return <h3>{t('incomplete_transaction')}</h3> + } + } + + return <div className="breakdown-body">{renderData()}</div> +} diff --git a/src/containers/Transactions/index.tsx b/src/containers/Transactions/index.tsx index 2918e7674..c2c5e0254 100644 --- a/src/containers/Transactions/index.tsx +++ b/src/containers/Transactions/index.tsx @@ -14,6 +14,7 @@ import { } from '../shared/utils' import { SimpleTab } from './SimpleTab' import { DetailTab } from './DetailTab' +import { BreakDownTab } from './BreakDownTab' import './transaction.scss' import { AnalyticsFields, useAnalytics } from '../shared/analytics' import SocketContext from '../shared/SocketContext' @@ -120,6 +121,12 @@ export const Transaction = () => { function renderTabs() { const tabs = ['simple', 'detailed', 'raw'] + if ( + data.raw.tx.TransactionType === 'OfferCreate' || + data.raw.tx.TransactionType === 'Payment' + ) { + tabs.push('breakdown') + } const mainPath = buildPath(TRANSACTION_ROUTE, { identifier }) return <Tabs tabs={tabs} selected={tab} path={mainPath} /> } @@ -130,6 +137,9 @@ export const Transaction = () => { let body switch (tab) { + case 'breakdown': + body = <BreakDownTab data={data.raw} /> + break case 'detailed': body = <DetailTab data={data.processed} /> break From 773dbd28173e073c23bef3a4d787e2db1a21b9b3 Mon Sep 17 00:00:00 2001 From: Lathan Britz <jucallme@gmail.com> Date: Wed, 22 May 2024 12:56:08 -0400 Subject: [PATCH 70/79] color code breakdown and add missing transation labels --- public/locales/ca-CA/translations.json | 6 ++++- public/locales/en-US/translations.json | 6 ++++- .../BreakDownTab/breakDownTab.scss | 24 +++++++++++++++++++ .../Transactions/BreakDownTab/index.tsx | 23 ++++++++++++------ 4 files changed, 50 insertions(+), 9 deletions(-) diff --git a/public/locales/ca-CA/translations.json b/public/locales/ca-CA/translations.json index f908c7f53..4d0f35ecb 100644 --- a/public/locales/ca-CA/translations.json +++ b/public/locales/ca-CA/translations.json @@ -566,5 +566,9 @@ "graph_dependant_currency": "*Graph is dependant on the currency used.", "incomplete_transaction": "Incomplete transaction", "liquidity_source": "Liquidity Source", - "balance_changes": "Balance Changes" + "balance_changes": "Balance Changes", + "direct": "direct", + "dex": "dex", + "amm": "amm", + "rippling": "rippling" } diff --git a/public/locales/en-US/translations.json b/public/locales/en-US/translations.json index 20720ef48..7aad57573 100644 --- a/public/locales/en-US/translations.json +++ b/public/locales/en-US/translations.json @@ -565,5 +565,9 @@ "graph_dependant_currency": "*Graph is dependant on the currency used.", "incomplete_transaction": "Incomplete transaction", "liquidity_source": "Liquidity Source", - "balance_changes": "Balance Changes" + "balance_changes": "Balance Changes", + "direct": "direct", + "dex": "dex", + "amm": "amm", + "rippling": "rippling" } diff --git a/src/containers/Transactions/BreakDownTab/breakDownTab.scss b/src/containers/Transactions/BreakDownTab/breakDownTab.scss index 2dd19fa67..16acfc3d3 100644 --- a/src/containers/Transactions/BreakDownTab/breakDownTab.scss +++ b/src/containers/Transactions/BreakDownTab/breakDownTab.scss @@ -35,6 +35,30 @@ } } +.badge { + padding: 5px; + padding-top: 3px; + border-radius: 5px; + color: $black; + + &.amm { + background-color: #ff198b; + + } + + &.dex { + background-color: #19a3ff; + } + + &.direct { + background-color: #9a52ff; + } + + &.rippling { + background-color: #32e685; + } +} + .flex { display: flex; } diff --git a/src/containers/Transactions/BreakDownTab/index.tsx b/src/containers/Transactions/BreakDownTab/index.tsx index 31decba57..f2ae68ae3 100644 --- a/src/containers/Transactions/BreakDownTab/index.tsx +++ b/src/containers/Transactions/BreakDownTab/index.tsx @@ -63,19 +63,28 @@ export const BreakDownTab: FC<{ data: any }> = ({ data }) => { const changes = [] parsed.accountBalanceChanges.forEach((change, index) => { if (account !== change.account) { - let type: String = 'direct' + let type: String = '' + let span_class: String = '' + if (change.isDirect) { + type = 'direct' + span_class = 'badge direct' + } if (change.isAMM) { type = 'amm' + span_class = 'badge amm' } if (change.isOffer) { type = 'dex' + span_class = 'badge dex' } if (change.isRippling) { type = 'rippling' + span_class = 'badge rippling' } changes.push( <p key={`${index}-p`}> - <span>{type}</span> <Account account={change.account} /> + <span className={span_class}>{type}</span>{' '} + <Account account={change.account} /> </p>, <BalanceChange @@ -187,7 +196,7 @@ export const BreakDownTab: FC<{ data: any }> = ({ data }) => { }} /> <span className="margin-text"> - AMM ({Math.round((sum.amm / sum.total) * 100)}%) + {t('amm')} ({Math.round((sum.amm / sum.total) * 100)}%) </span> </div> <div className="rectangle-row"> @@ -199,7 +208,7 @@ export const BreakDownTab: FC<{ data: any }> = ({ data }) => { }} /> <span className="margin-text"> - RIPPLING ({Math.round((sum.rippling / sum.total) * 100)}%) + {t('rippling')} ({Math.round((sum.rippling / sum.total) * 100)}%) </span> </div> <div className="rectangle-row"> @@ -211,7 +220,7 @@ export const BreakDownTab: FC<{ data: any }> = ({ data }) => { }} /> <span className="margin-text"> - DEX ({Math.round((sum.dex / sum.total) * 100)}%) + {t('dex')} ({Math.round((sum.dex / sum.total) * 100)}%) </span> </div> <div className="rectangle-row"> @@ -223,7 +232,7 @@ export const BreakDownTab: FC<{ data: any }> = ({ data }) => { }} /> <span className="margin-text"> - DIRECT ({Math.round((sum.direct / sum.total) * 100)}%) + {t('direct')} ({Math.round((sum.direct / sum.total) * 100)}%) </span> </div> <div className="rectangle-row"> @@ -235,7 +244,7 @@ export const BreakDownTab: FC<{ data: any }> = ({ data }) => { }} /> <span className="margin-text"> - TOTAL{' '} + {t('total')}{' '} <Amount value={formatAmount( selectedView === 'destination' From ae192a1fe586fd2a7d2f300c3e579aec50eb43d7 Mon Sep 17 00:00:00 2001 From: Fomo <508629+shortthefomo@users.noreply.github.com> Date: Wed, 22 May 2024 14:02:00 -0400 Subject: [PATCH 71/79] Update public/locales/ca-CA/translations.json fix spelling Co-authored-by: Mayukha Vadari <mvadari@gmail.com> --- public/locales/ca-CA/translations.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/public/locales/ca-CA/translations.json b/public/locales/ca-CA/translations.json index 4d0f35ecb..04d7a69eb 100644 --- a/public/locales/ca-CA/translations.json +++ b/public/locales/ca-CA/translations.json @@ -526,6 +526,7 @@ "indicate_unl": "indica un validador en una UNL", "transaction_tokens_involved": "<Currency/> i <Currency2/>", "transaction_tokens_swapped": "<Currency/> per <Currency2/>", +<<<<<<< HEAD <<<<<<< HEAD "oracle_document_id": null, "provider": null, @@ -563,7 +564,7 @@ "enable_amendment_name": null, "amendment_status": null, "expected_date": null, - "graph_dependant_currency": "*Graph is dependant on the currency used.", + "graph_dependant_currency": "*Graph is dependent on the currency used.", "incomplete_transaction": "Incomplete transaction", "liquidity_source": "Liquidity Source", "balance_changes": "Balance Changes", From 92d1c6c615329593f8e949a7ae573424f866a079 Mon Sep 17 00:00:00 2001 From: Fomo <508629+shortthefomo@users.noreply.github.com> Date: Wed, 22 May 2024 14:02:35 -0400 Subject: [PATCH 72/79] Update src/containers/Transactions/index.tsx use of ternary Co-authored-by: Mayukha Vadari <mvadari@gmail.com> --- src/containers/Transactions/index.tsx | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/containers/Transactions/index.tsx b/src/containers/Transactions/index.tsx index c2c5e0254..fe03fa51c 100644 --- a/src/containers/Transactions/index.tsx +++ b/src/containers/Transactions/index.tsx @@ -120,13 +120,7 @@ export const Transaction = () => { } function renderTabs() { - const tabs = ['simple', 'detailed', 'raw'] - if ( - data.raw.tx.TransactionType === 'OfferCreate' || - data.raw.tx.TransactionType === 'Payment' - ) { - tabs.push('breakdown') - } + const tabs = (data.raw.tx.TransactionType === 'OfferCreate' || data.raw.tx.TransactionType === 'Payment') ? ['simple', 'breakdown', 'detailed', 'raw'] ? ['simple', 'detailed', 'raw'] const mainPath = buildPath(TRANSACTION_ROUTE, { identifier }) return <Tabs tabs={tabs} selected={tab} path={mainPath} /> } From f40e705e9528f129b1a7c59cfb9d5b90fcb2708f Mon Sep 17 00:00:00 2001 From: Lathan Britz <jucallme@gmail.com> Date: Wed, 22 May 2024 14:08:55 -0400 Subject: [PATCH 73/79] missed two more translation labels --- package-lock.json | 24 ------------------- public/locales/ca-CA/translations.json | 6 ++--- public/locales/en-US/translations.json | 6 +++-- .../Transactions/BreakDownTab/index.tsx | 8 +++++-- 4 files changed, 13 insertions(+), 31 deletions(-) diff --git a/package-lock.json b/package-lock.json index 46355693f..b160bda44 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24718,16 +24718,10 @@ } }, "node_modules/ripple-binary-codec": { -<<<<<<< HEAD "version": "2.1.0", "resolved": "https://registry.npmjs.org/ripple-binary-codec/-/ripple-binary-codec-2.1.0.tgz", "integrity": "sha512-q0GAx+hj3UVcDbhXVjk7qeNfgUMehlElYJwiCuIBwqs/51GVTOwLr39Ht3eNsX5ow2xPRaC5mqHwcFDvLRm6cA==", "dev": true, -======= - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ripple-binary-codec/-/ripple-binary-codec-2.0.0.tgz", - "integrity": "sha512-zakENc9A5dlW85uzrmQHrJehymhL59ftggboRNrjxFDJdlNJ6DSE210P3ys/9kL0oVtOzFnTrOPFfxHZeOsA/Q==", ->>>>>>> 68ad193 (breakdown tab for payments and offercreates) "dependencies": { "@xrplf/isomorphic": "^1.0.1", "bignumber.js": "^9.0.0", @@ -28919,16 +28913,10 @@ "peer": true }, "node_modules/xrpl": { -<<<<<<< HEAD "version": "3.1.0", "resolved": "https://registry.npmjs.org/xrpl/-/xrpl-3.1.0.tgz", "integrity": "sha512-+97WiaF/AQTT6fXgD9Z5xyYbtlML0USCWrZFYjrC57yqtlWluacwwbMZa/I6ByVIKqCqVXJwRuRl20IQGlVGlg==", "dev": true, -======= - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xrpl/-/xrpl-3.0.0.tgz", - "integrity": "sha512-QC+dNx3tvMEn9IrxcXFFa0rWwvBwACkGFNKl+W2miMGYnlgSiIsnjdqwtG2WRs0Pyxs5dd9nBTQHyQ1BPxZ78A==", ->>>>>>> 68ad193 (breakdown tab for payments and offercreates) "dependencies": { "@scure/bip32": "^1.3.1", "@scure/bip39": "^1.2.1", @@ -45698,16 +45686,10 @@ } }, "ripple-binary-codec": { -<<<<<<< HEAD "version": "2.1.0", "resolved": "https://registry.npmjs.org/ripple-binary-codec/-/ripple-binary-codec-2.1.0.tgz", "integrity": "sha512-q0GAx+hj3UVcDbhXVjk7qeNfgUMehlElYJwiCuIBwqs/51GVTOwLr39Ht3eNsX5ow2xPRaC5mqHwcFDvLRm6cA==", "dev": true, -======= - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ripple-binary-codec/-/ripple-binary-codec-2.0.0.tgz", - "integrity": "sha512-zakENc9A5dlW85uzrmQHrJehymhL59ftggboRNrjxFDJdlNJ6DSE210P3ys/9kL0oVtOzFnTrOPFfxHZeOsA/Q==", ->>>>>>> 68ad193 (breakdown tab for payments and offercreates) "requires": { "@xrplf/isomorphic": "^1.0.1", "bignumber.js": "^9.0.0", @@ -48476,16 +48458,10 @@ "peer": true }, "xrpl": { -<<<<<<< HEAD "version": "3.1.0", "resolved": "https://registry.npmjs.org/xrpl/-/xrpl-3.1.0.tgz", "integrity": "sha512-+97WiaF/AQTT6fXgD9Z5xyYbtlML0USCWrZFYjrC57yqtlWluacwwbMZa/I6ByVIKqCqVXJwRuRl20IQGlVGlg==", "dev": true, -======= - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xrpl/-/xrpl-3.0.0.tgz", - "integrity": "sha512-QC+dNx3tvMEn9IrxcXFFa0rWwvBwACkGFNKl+W2miMGYnlgSiIsnjdqwtG2WRs0Pyxs5dd9nBTQHyQ1BPxZ78A==", ->>>>>>> 68ad193 (breakdown tab for payments and offercreates) "requires": { "@scure/bip32": "^1.3.1", "@scure/bip39": "^1.2.1", diff --git a/public/locales/ca-CA/translations.json b/public/locales/ca-CA/translations.json index 04d7a69eb..5217f95cf 100644 --- a/public/locales/ca-CA/translations.json +++ b/public/locales/ca-CA/translations.json @@ -526,8 +526,6 @@ "indicate_unl": "indica un validador en una UNL", "transaction_tokens_involved": "<Currency/> i <Currency2/>", "transaction_tokens_swapped": "<Currency/> per <Currency2/>", -<<<<<<< HEAD -<<<<<<< HEAD "oracle_document_id": null, "provider": null, "last_update_time": null, @@ -571,5 +569,7 @@ "direct": "direct", "dex": "dex", "amm": "amm", - "rippling": "rippling" + "rippling": "rippling", + "sold": "sold", + "bought": "bought" } diff --git a/public/locales/en-US/translations.json b/public/locales/en-US/translations.json index 7aad57573..caba266bb 100644 --- a/public/locales/en-US/translations.json +++ b/public/locales/en-US/translations.json @@ -562,12 +562,14 @@ "enable_amendment_name": "Amendment Name", "amendment_status": "Amendment Status", "expected_date": "Expected Date", - "graph_dependant_currency": "*Graph is dependant on the currency used.", + "graph_dependent_currency": "*Graph is dependent on the currency used.", "incomplete_transaction": "Incomplete transaction", "liquidity_source": "Liquidity Source", "balance_changes": "Balance Changes", "direct": "direct", "dex": "dex", "amm": "amm", - "rippling": "rippling" + "rippling": "rippling", + "sold": "sold", + "bought": "bought" } diff --git a/src/containers/Transactions/BreakDownTab/index.tsx b/src/containers/Transactions/BreakDownTab/index.tsx index f2ae68ae3..cadfd6791 100644 --- a/src/containers/Transactions/BreakDownTab/index.tsx +++ b/src/containers/Transactions/BreakDownTab/index.tsx @@ -39,7 +39,11 @@ export const BreakDownTab: FC<{ data: any }> = ({ data }) => { change.value *= -1 let balanceLabel = - type === 'direct' ? 'recieved' : change.value < 0 ? 'sold' : 'bought' + type === 'direct' + ? 'recieved' + : change.value < 0 + ? t('sold') + : t('bought') if (type === 'direct') { change.value *= -1 } @@ -186,7 +190,7 @@ export const BreakDownTab: FC<{ data: any }> = ({ data }) => { {destinationCurrencyCode} {t('destination')} </option> </select> - <p>{t('graph_dependant_currency')}</p> + <p>{t('graph_dependent_currency')}</p> <div className="rectangle-row"> <div className="rectangle" From 2af602a365bfb967f560352ff59e8547cdbc1755 Mon Sep 17 00:00:00 2001 From: Lathan Britz <jucallme@gmail.com> Date: Wed, 22 May 2024 16:38:17 -0400 Subject: [PATCH 74/79] fix turnary --- src/containers/Transactions/index.tsx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/containers/Transactions/index.tsx b/src/containers/Transactions/index.tsx index fe03fa51c..1102e4f4c 100644 --- a/src/containers/Transactions/index.tsx +++ b/src/containers/Transactions/index.tsx @@ -120,7 +120,11 @@ export const Transaction = () => { } function renderTabs() { - const tabs = (data.raw.tx.TransactionType === 'OfferCreate' || data.raw.tx.TransactionType === 'Payment') ? ['simple', 'breakdown', 'detailed', 'raw'] ? ['simple', 'detailed', 'raw'] + const tabs = + data.raw.tx.TransactionType === 'OfferCreate' || + data.raw.tx.TransactionType === 'Payment' + ? ['simple', 'breakdown', 'detailed', 'raw'] + : ['simple', 'detailed', 'raw'] const mainPath = buildPath(TRANSACTION_ROUTE, { identifier }) return <Tabs tabs={tabs} selected={tab} path={mainPath} /> } From afa8dccdf33aaaa2945eb9c5df27797a72c7f8e2 Mon Sep 17 00:00:00 2001 From: Lathan Britz <jucallme@gmail.com> Date: Thu, 23 May 2024 08:43:30 -0400 Subject: [PATCH 75/79] use non dev version of xrpl-tx-path-parser changes have been comitted --- package-lock.json | 12 ++-- public/locales/ca-CA/translations.json | 3 +- public/locales/en-US/translations.json | 3 +- .../Transactions/BreakDownTab/index.tsx | 56 ++++++++----------- src/containers/Transactions/index.tsx | 1 + .../Transactions/test/Transaction.test.tsx | 5 +- 6 files changed, 38 insertions(+), 42 deletions(-) diff --git a/package-lock.json b/package-lock.json index b160bda44..6027ebad9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,6 +15,7 @@ "@vitejs/plugin-react": "^4.2.1", "@xrplf/isomorphic": "^1.0.0-beta.1", "@xrplf/prettier-config": "^1.9.1", + "@xrplkit/txmeta": "^1.3.1", "assert": "^2.1.0", "autoprefixer": "^10.4.20", "axios": "^1.6.5", @@ -28943,9 +28944,9 @@ } }, "node_modules/xrpl-tx-path-parser": { - "version": "1.0.4", - "resolved": "git+ssh://git@github.com/shortthefomo/xrpl-tx-path-parser.git#8f5f4d5bc3bc83c6fffedf9bfe172d5a3c9d1c76", - "license": "ISC", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/xrpl-tx-path-parser/-/xrpl-tx-path-parser-1.0.5.tgz", + "integrity": "sha512-eQTdv/OKe5MIjOuiYB6FseUtiD8WOqYTmAGfOkHn4DWn233ES/970Yr10QPTrQoWtoA5forroXSiXBse6xxvow==", "dependencies": { "@xrplkit/txmeta": "^1.3.1", "decimal.js": "^10.4.3", @@ -48500,8 +48501,9 @@ } }, "xrpl-tx-path-parser": { - "version": "git+ssh://git@github.com/shortthefomo/xrpl-tx-path-parser.git#8f5f4d5bc3bc83c6fffedf9bfe172d5a3c9d1c76", - "from": "xrpl-tx-path-parser@github:shortthefomo/xrpl-tx-path-parser#dev", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/xrpl-tx-path-parser/-/xrpl-tx-path-parser-1.0.5.tgz", + "integrity": "sha512-eQTdv/OKe5MIjOuiYB6FseUtiD8WOqYTmAGfOkHn4DWn233ES/970Yr10QPTrQoWtoA5forroXSiXBse6xxvow==", "requires": { "@xrplkit/txmeta": "^1.3.1", "decimal.js": "^10.4.3", diff --git a/public/locales/ca-CA/translations.json b/public/locales/ca-CA/translations.json index 5217f95cf..1418be160 100644 --- a/public/locales/ca-CA/translations.json +++ b/public/locales/ca-CA/translations.json @@ -571,5 +571,6 @@ "amm": "amm", "rippling": "rippling", "sold": "sold", - "bought": "bought" + "bought": "bought", + "no_cross": "The offer has not crossed anything yet" } diff --git a/public/locales/en-US/translations.json b/public/locales/en-US/translations.json index caba266bb..e82ecdee6 100644 --- a/public/locales/en-US/translations.json +++ b/public/locales/en-US/translations.json @@ -571,5 +571,6 @@ "amm": "amm", "rippling": "rippling", "sold": "sold", - "bought": "bought" + "bought": "bought", + "no_cross": "The offer has not crossed anything yet" } diff --git a/src/containers/Transactions/BreakDownTab/index.tsx b/src/containers/Transactions/BreakDownTab/index.tsx index cadfd6791..3e0e92ce7 100644 --- a/src/containers/Transactions/BreakDownTab/index.tsx +++ b/src/containers/Transactions/BreakDownTab/index.tsx @@ -1,25 +1,17 @@ import { FC, useState } from 'react' import { useTranslation } from 'react-i18next' -import parsePayment from 'xrpl-tx-path-parser' +import pathParser from 'xrpl-tx-path-parser' import { Account } from '../../shared/components/Account' import { Amount } from '../../shared/components/Amount' import { formatAmount } from '../../../rippled/lib/txSummary/formatAmount' -import Currency from '../../shared/components/Currency' - import './breakDownTab.scss' -// import { -// createSourceAmount, -// createPaymentDefaultPaths, -// amountToBalance, -// } from 'xrpl-tx-path-parser' - export const BreakDownTab: FC<{ data: any }> = ({ data }) => { const { t } = useTranslation() const [selectedView, setView] = useState('source') const hexToString = (hex: string) => { - let string = '' + let string: string = '' for (let i = 0; i < hex.length; i += 2) { const part = hex.substring(i, i + 2) const code = parseInt(part, 16) @@ -35,24 +27,25 @@ export const BreakDownTab: FC<{ data: any }> = ({ data }) => { type: String }> = ({ data, label, type }) => { const balances = [] - data.forEach((change, index) => { - change.value *= -1 + data.forEach((change: any, index: any) => { + const amount = change + amount.value *= -1 - let balanceLabel = + let balanceLabel: string = type === 'direct' ? 'recieved' - : change.value < 0 + : amount.value < 0 ? t('sold') : t('bought') if (type === 'direct') { - change.value *= -1 + amount.value *= -1 } if (!label) { balanceLabel = '' } balances.push( - <li key={index}> - {balanceLabel} <Amount value={formatAmount(change)} /> + <li key={String(index)}> + {balanceLabel} <Amount value={formatAmount(amount)} /> </li>, ) }) @@ -60,39 +53,39 @@ export const BreakDownTab: FC<{ data: any }> = ({ data }) => { return <ul>{balances}</ul> } // eslint-disable-next-line react/no-unstable-nested-components - const Transaction: FC<{ parsed: any; account: Account }> = ({ + const Transaction: FC<{ parsed: any; account: any }> = ({ parsed, account, }) => { const changes = [] parsed.accountBalanceChanges.forEach((change, index) => { if (account !== change.account) { - let type: String = '' - let span_class: String = '' + let type: string = '' + let spanClass: string = '' if (change.isDirect) { type = 'direct' - span_class = 'badge direct' + spanClass = 'badge direct' } if (change.isAMM) { type = 'amm' - span_class = 'badge amm' + spanClass = 'badge amm' } if (change.isOffer) { type = 'dex' - span_class = 'badge dex' + spanClass = 'badge dex' } if (change.isRippling) { type = 'rippling' - span_class = 'badge rippling' + spanClass = 'badge rippling' } changes.push( - <p key={`${index}-p`}> - <span className={span_class}>{type}</span>{' '} + <p key={`${String(index)}-p`}> + <span className={spanClass}>{type}</span>{' '} <Account account={change.account} /> </p>, <BalanceChange - key={`${index}-b`} + key={`${String(index)}-b`} data={change.balances} label={!change.isRippling} type={type} @@ -105,7 +98,7 @@ export const BreakDownTab: FC<{ data: any }> = ({ data }) => { } // eslint-disable-next-line react/no-unstable-nested-components - const Cylindars: FC<{ parsed: any; account: Account }> = ({ + const Cylindars: FC<{ parsed: any; account: any }> = ({ parsed, account, }) => { @@ -119,7 +112,6 @@ export const BreakDownTab: FC<{ data: any }> = ({ data }) => { parsed.accountBalanceChanges.forEach((change) => { if (account !== change.account) { change.balances.forEach((balance) => { - // if (parsed.sourceAmount.currency === balance.currency) { if ( (selectedView === 'source' && parsed.destinationAmount.currency === balance.currency) || @@ -150,7 +142,6 @@ export const BreakDownTab: FC<{ data: any }> = ({ data }) => { }) const NON_STANDARD_CODE_LENGTH = 40 - const XRP = 'XRP' const LP_TOKEN_IDENTIFIER = '03' const destinationCurrencyCode = parsed.destinationAmount.currency?.length === NON_STANDARD_CODE_LENGTH && @@ -264,14 +255,13 @@ export const BreakDownTab: FC<{ data: any }> = ({ data }) => { const renderData = () => { data.tx.meta = data.meta - // delete mutate.meta try { - const parsed = parsePayment(data.tx) + const parsed = pathParser(data.tx) if ( parsed.sourceAmount.value === '0' && data.tx.TransactionType === 'OfferCreate' ) { - return <h3>{t('The offer has not crossed anything yet.')}</h3> + return <h3>{t('no_cross')}</h3> } return ( diff --git a/src/containers/Transactions/index.tsx b/src/containers/Transactions/index.tsx index 1102e4f4c..1f3f8cc8b 100644 --- a/src/containers/Transactions/index.tsx +++ b/src/containers/Transactions/index.tsx @@ -121,6 +121,7 @@ export const Transaction = () => { function renderTabs() { const tabs = + data === undefined || data.raw.tx.TransactionType === 'OfferCreate' || data.raw.tx.TransactionType === 'Payment' ? ['simple', 'breakdown', 'detailed', 'raw'] diff --git a/src/containers/Transactions/test/Transaction.test.tsx b/src/containers/Transactions/test/Transaction.test.tsx index e4b471e95..31ee2d3e9 100644 --- a/src/containers/Transactions/test/Transaction.test.tsx +++ b/src/containers/Transactions/test/Transaction.test.tsx @@ -137,8 +137,9 @@ describe('Transaction container', () => { expect(wrapper.find('.tabs').length).toBe(1) expect(wrapper.find('a.tab').length).toBe(3) expect(wrapper.find('a.tab').at(0).props().title).toBe('simple') - expect(wrapper.find('a.tab').at(1).props().title).toBe('detailed') - expect(wrapper.find('a.tab').at(2).props().title).toBe('raw') + expect(wrapper.find('a.tab').at(1).props().title).toBe('breakdown') + expect(wrapper.find('a.tab').at(2).props().title).toBe('detailed') + expect(wrapper.find('a.tab').at(3).props().title).toBe('raw') expect(wrapper.find('a.tab.selected').text()).toEqual('simple') wrapper.unmount() }) From 42a8be12cd52f4838d66a0d39d3dea26c3e915f1 Mon Sep 17 00:00:00 2001 From: Lathan Britz <jucallme@gmail.com> Date: Fri, 24 May 2024 16:36:38 -0400 Subject: [PATCH 76/79] add testes --- package-lock.json | 33 +- package.json | 2 + .../Transactions/BreakDownTab/index.tsx | 36 +- .../Transactions/test/BreakDownTab.test.tsx | 76 +++ .../Transactions/test/Transaction.test.tsx | 2 +- .../test/mock_data/PaymentBreakdown.json | 476 ++++++++++++++++++ 6 files changed, 602 insertions(+), 23 deletions(-) create mode 100644 src/containers/Transactions/test/BreakDownTab.test.tsx create mode 100644 src/containers/Transactions/test/mock_data/PaymentBreakdown.json diff --git a/package-lock.json b/package-lock.json index 6027ebad9..800a9c2c7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,6 +16,7 @@ "@xrplf/isomorphic": "^1.0.0-beta.1", "@xrplf/prettier-config": "^1.9.1", "@xrplkit/txmeta": "^1.3.1", + "@xrplkit/xfl": "^2.1.0", "assert": "^2.1.0", "autoprefixer": "^10.4.20", "axios": "^1.6.5", @@ -7434,6 +7435,11 @@ "@xrplkit/xfl": "2.0.2" } }, + "node_modules/@xrplkit/amount/node_modules/@xrplkit/xfl": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@xrplkit/xfl/-/xfl-2.0.2.tgz", + "integrity": "sha512-OUZZzSoXSxYxuhBcz08Wb9Xme71PkFYejk3vq4jPzdXreVhF71ZrM6nSObHFgasC8/srWKoqiS37CnB2Ht3k/g==" + }, "node_modules/@xrplkit/txmeta": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/@xrplkit/txmeta/-/txmeta-1.3.1.tgz", @@ -7443,11 +7449,16 @@ "@xrplkit/xfl": "2.0.2" } }, - "node_modules/@xrplkit/xfl": { + "node_modules/@xrplkit/txmeta/node_modules/@xrplkit/xfl": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/@xrplkit/xfl/-/xfl-2.0.2.tgz", "integrity": "sha512-OUZZzSoXSxYxuhBcz08Wb9Xme71PkFYejk3vq4jPzdXreVhF71ZrM6nSObHFgasC8/srWKoqiS37CnB2Ht3k/g==" }, + "node_modules/@xrplkit/xfl": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@xrplkit/xfl/-/xfl-2.1.0.tgz", + "integrity": "sha512-CgRztE77c0hsZ57aPxwQg0vC6gSP/3Hz7cdzUQJSMBTy+b3VK/rGs+rMrmd9CY68jvVyTrhRpq6EgUPDBsywIg==" + }, "node_modules/abab": { "version": "2.0.5", "dev": true, @@ -33799,6 +33810,13 @@ "integrity": "sha512-poV7ym7EhjAlEGym9Kc3AHuy3uuhVW3qnl2KDr8D4zk7hANj7aG6l1XdtWIAGAgBpHnvPEaOG7+llPRRv1irZw==", "requires": { "@xrplkit/xfl": "2.0.2" + }, + "dependencies": { + "@xrplkit/xfl": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@xrplkit/xfl/-/xfl-2.0.2.tgz", + "integrity": "sha512-OUZZzSoXSxYxuhBcz08Wb9Xme71PkFYejk3vq4jPzdXreVhF71ZrM6nSObHFgasC8/srWKoqiS37CnB2Ht3k/g==" + } } }, "@xrplkit/txmeta": { @@ -33808,12 +33826,19 @@ "requires": { "@xrplkit/amount": "1.2.3", "@xrplkit/xfl": "2.0.2" + }, + "dependencies": { + "@xrplkit/xfl": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@xrplkit/xfl/-/xfl-2.0.2.tgz", + "integrity": "sha512-OUZZzSoXSxYxuhBcz08Wb9Xme71PkFYejk3vq4jPzdXreVhF71ZrM6nSObHFgasC8/srWKoqiS37CnB2Ht3k/g==" + } } }, "@xrplkit/xfl": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@xrplkit/xfl/-/xfl-2.0.2.tgz", - "integrity": "sha512-OUZZzSoXSxYxuhBcz08Wb9Xme71PkFYejk3vq4jPzdXreVhF71ZrM6nSObHFgasC8/srWKoqiS37CnB2Ht3k/g==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@xrplkit/xfl/-/xfl-2.1.0.tgz", + "integrity": "sha512-CgRztE77c0hsZ57aPxwQg0vC6gSP/3Hz7cdzUQJSMBTy+b3VK/rGs+rMrmd9CY68jvVyTrhRpq6EgUPDBsywIg==" }, "abab": { "version": "2.0.5", diff --git a/package.json b/package.json index cb3b9666c..ad022aaf5 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,8 @@ "@vitejs/plugin-react": "^4.2.1", "@xrplf/isomorphic": "^1.0.0-beta.1", "@xrplf/prettier-config": "^1.9.1", + "@xrplkit/txmeta": "^1.3.1", + "@xrplkit/xfl": "^2.1.0", "assert": "^2.1.0", "autoprefixer": "^10.4.20", "axios": "^1.6.5", diff --git a/src/containers/Transactions/BreakDownTab/index.tsx b/src/containers/Transactions/BreakDownTab/index.tsx index 3e0e92ce7..338c479ad 100644 --- a/src/containers/Transactions/BreakDownTab/index.tsx +++ b/src/containers/Transactions/BreakDownTab/index.tsx @@ -26,7 +26,7 @@ export const BreakDownTab: FC<{ data: any }> = ({ data }) => { label: Boolean type: String }> = ({ data, label, type }) => { - const balances = [] + const balances: string[] = [] data.forEach((change: any, index: any) => { const amount = change amount.value *= -1 @@ -43,11 +43,7 @@ export const BreakDownTab: FC<{ data: any }> = ({ data }) => { if (!label) { balanceLabel = '' } - balances.push( - <li key={String(index)}> - {balanceLabel} <Amount value={formatAmount(amount)} /> - </li>, - ) + balances.push(<li key={String(index)}>{balanceLabel}</li>) }) return <ul>{balances}</ul> @@ -57,7 +53,7 @@ export const BreakDownTab: FC<{ data: any }> = ({ data }) => { parsed, account, }) => { - const changes = [] + const changes: string[] = [] parsed.accountBalanceChanges.forEach((change, index) => { if (account !== change.account) { let type: string = '' @@ -254,32 +250,36 @@ export const BreakDownTab: FC<{ data: any }> = ({ data }) => { } const renderData = () => { - data.tx.meta = data.meta + if (data === undefined || data.tx === undefined) { + return null + } + + const mutated = data + mutated.tx.meta = data.meta try { - const parsed = pathParser(data.tx) + const parsed = pathParser(mutated.tx) if ( parsed.sourceAmount.value === '0' && - data.tx.TransactionType === 'OfferCreate' + mutated.tx.TransactionType === 'OfferCreate' ) { return <h3>{t('no_cross')}</h3> } - return ( <div className="row"> <div className="detail-section"> - <div className="title">{data.tx.TransactionType}</div> - <div> + <div className="title">{mutated.tx.TransactionType}</div> + <div className="source-account"> Source: <Account account={parsed.sourceAccount} /> </div> - <div> - <Amount value={formatAmount(parsed.sourceAmount)} /> + <div className="source-amount"> + <Amount value={formatAmount(parsed.sourceAmount as any)} /> </div> <br /> - <div> + <div className="destination-account"> Destination: <Account account={parsed.destinationAccount} /> </div> - <div> - <Amount value={formatAmount(parsed.destinationAmount)} /> + <div className="destination-amount"> + <Amount value={formatAmount(parsed.destinationAmount as any)} /> </div> </div> <div className="detail-section no-border"> diff --git a/src/containers/Transactions/test/BreakDownTab.test.tsx b/src/containers/Transactions/test/BreakDownTab.test.tsx new file mode 100644 index 000000000..0a0f829d4 --- /dev/null +++ b/src/containers/Transactions/test/BreakDownTab.test.tsx @@ -0,0 +1,76 @@ +import { mount } from 'enzyme' +import { I18nextProvider } from 'react-i18next' +import { BrowserRouter as Router } from 'react-router-dom' + +import EnableAmendment from './mock_data/EnableAmendment.json' +import Payment from './mock_data/PaymentBreakdown.json' +import { BreakDownTab } from '../BreakDownTab' +import i18n from '../../../i18n/testConfig' + +describe('BreakdownTab container', () => { + const createWrapper = (tx) => + mount( + <Router> + <I18nextProvider i18n={i18n}> + <BreakDownTab data={tx} /> + </I18nextProvider> + </Router>, + ) + + it('renders EnableAmendment without crashing', () => { + const wrapper = createWrapper(EnableAmendment) + wrapper.unmount() + }) + + it('renders breakdown tab information', () => { + const wrapper = createWrapper(Payment) + + console.log(Payment) + + expect(wrapper.find('.breakdown-body').length).toBe(1) + expect(wrapper.find('.detail-section').length).toBe(3) + + expect(wrapper.find('.source-account').length).toBe(1) + expect(wrapper.find('.source-amount').length).toBe(1) + expect(wrapper.find('.destination-account').length).toBe(1) + expect(wrapper.find('.destination-amount').length).toBe(1) + + expect( + wrapper.contains(<div className="title">liquidity_source</div>), + ).toBe(true) + + expect(wrapper.contains(<option value="source">USD source</option>)).toBe( + true, + ) + expect( + wrapper.contains(<option value="destination">XRP destination</option>), + ).toBe(true) + + expect(wrapper.contains(<p>graph_dependent_currency</p>)).toBe(true) + + expect( + wrapper.contains(<span className="margin-text">amm (98%)</span>), + ).toBe(true) + expect( + wrapper.contains(<span className="margin-text">rippling (0%)</span>), + ).toBe(true) + expect( + wrapper.contains(<span className="margin-text">dex (2%)</span>), + ).toBe(true) + expect( + wrapper.contains(<span className="margin-text">direct (0%)</span>), + ).toBe(true) + + expect(wrapper.contains(<div className="title">balance_changes</div>)).toBe( + true, + ) + expect(wrapper.contains(<span className="badge dex">dex</span>)).toBe(true) + expect( + wrapper.contains(<span className="badge rippling">rippling</span>), + ).toBe(true) + expect(wrapper.contains(<span className="badge amm">amm</span>)).toBe(true) + + console.log(wrapper.debug()) + wrapper.unmount() + }) +}) diff --git a/src/containers/Transactions/test/Transaction.test.tsx b/src/containers/Transactions/test/Transaction.test.tsx index 31ee2d3e9..f9573dffa 100644 --- a/src/containers/Transactions/test/Transaction.test.tsx +++ b/src/containers/Transactions/test/Transaction.test.tsx @@ -135,7 +135,7 @@ describe('Transaction container', () => { ) expect(summary.contains(<TxStatus status="tesSUCCESS" />)).toBe(true) expect(wrapper.find('.tabs').length).toBe(1) - expect(wrapper.find('a.tab').length).toBe(3) + expect(wrapper.find('a.tab').length).toBe(4) expect(wrapper.find('a.tab').at(0).props().title).toBe('simple') expect(wrapper.find('a.tab').at(1).props().title).toBe('breakdown') expect(wrapper.find('a.tab').at(2).props().title).toBe('detailed') diff --git a/src/containers/Transactions/test/mock_data/PaymentBreakdown.json b/src/containers/Transactions/test/mock_data/PaymentBreakdown.json new file mode 100644 index 000000000..0c7223914 --- /dev/null +++ b/src/containers/Transactions/test/mock_data/PaymentBreakdown.json @@ -0,0 +1,476 @@ +{ + "hash": "9D6DC95E7B95F7302EBF711F9384B51666E3D98D5B177A6EF0C0250D7F3410D2", + "ledger_index": 88213902, + "date": 1716575361000, + "tx": { + "Account": "rBrnBoVq2ZBrq53ns1pNCCnsnhFizf59Lj", + "Amount": "149343627", + "DeliverMax": "149343627", + "DeliverMin": "146356755", + "Destination": "rBrnBoVq2ZBrq53ns1pNCCnsnhFizf59Lj", + "Fee": "12", + "Flags": 131072, + "LastLedgerSequence": 88213910, + "Memos": [ + { + "Memo": { + "MemoData": "5472616E73616374696F6E20696E6974696174656420627920786D61676E657469632E6F7267" + } + } + ], + "SendMax": { + "currency": "USD", + "issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B", + "value": "79.6770766125" + }, + "Sequence": 88196798, + "SigningPubKey": "021738EBB3F528A186919463A8B4C31BADDE35B579B1F2F86DF4383547AE7865C9", + "SourceTag": 10011010, + "TransactionType": "Payment", + "TxnSignature": "304402205B749EEE748F7EB49BBA734558ADB257FB83B60C7224A7B6CAD9C910619486F202206EE3C12787A085AEFADC6E053824562A48DB2072E5F19D57C6D41415A5DBE5FB", + "ctid": "C542098E000D0000", + "date": 1716575361000, + "hash": "undefined", + "inLedger": "undefined", + "ledger_index": "undefined", + "meta": { + "AffectedNodes": [ + { + "ModifiedNode": { + "FinalFields": { + "Account": "rsFaWztpAqZKoBSLTuhrhYfBV4nwYg7TFP", + "Balance": "56685726", + "Flags": 0, + "OwnerCount": 13, + "Sequence": 75621582 + }, + "LedgerEntryType": "AccountRoot", + "LedgerIndex": "13CD16752E004F76B468237B2F44DA9CFCA143A28C8EB6686D6A05695C8C3F7B", + "PreviousFields": { "Balance": "59581035", "OwnerCount": 14 }, + "PreviousTxnID": "BE19A57B91862555B86A59A6331E2B56D3156CF18C5E1F74340D3CAFEE909D2F", + "PreviousTxnLgrSeq": 88213895 + } + }, + { + "ModifiedNode": { + "FinalFields": { + "Account": "rBrnBoVq2ZBrq53ns1pNCCnsnhFizf59Lj", + "Balance": "6284089037", + "Flags": 0, + "OwnerCount": 4, + "Sequence": 88196799 + }, + "LedgerEntryType": "AccountRoot", + "LedgerIndex": "181A3BAD298B55A47F4F9A0247D638F33BFF7DEDC7A1ECD1392C2ADF9A3F46C9", + "PreviousFields": { "Balance": "6134969072", "Sequence": 88196798 }, + "PreviousTxnID": "3CFE806B69A8FA91F8965B905BDCDD614B89AF8DC4B8E941D994F00CC1E57BBC", + "PreviousTxnLgrSeq": 88213878 + } + }, + { + "DeletedNode": { + "FinalFields": { + "Account": "rsFaWztpAqZKoBSLTuhrhYfBV4nwYg7TFP", + "BookDirectory": "DFA3B6DDAB58C7E8E5D944E736DA4B7046C30E4F460FD9DE4E12F1B0AE6A0FB3", + "BookNode": "0", + "Flags": 0, + "OwnerNode": "0", + "PreviousTxnID": "BE19A57B91862555B86A59A6331E2B56D3156CF18C5E1F74340D3CAFEE909D2F", + "PreviousTxnLgrSeq": 88213895, + "Sequence": 75621581, + "TakerGets": "0", + "TakerPays": { + "currency": "USD", + "issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B", + "value": "0" + } + }, + "LedgerEntryType": "Offer", + "LedgerIndex": "6AB7F7F338C9FFF65323CCAEF7E38FE93D45D6F67E0ABF11822216D1A90DF89E", + "PreviousFields": { + "TakerGets": "2895309", + "TakerPays": { + "currency": "USD", + "issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B", + "value": "1.543863643330838" + } + } + } + }, + { + "ModifiedNode": { + "FinalFields": { + "Balance": { + "currency": "USD", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji", + "value": "-222732.5928364204" + }, + "Flags": 16908288, + "HighLimit": { + "currency": "USD", + "issuer": "rHUpaqUPbwzKZdzQ8ZQCme18FrgW9pB4am", + "value": "0" + }, + "HighNode": "0", + "LowLimit": { + "currency": "USD", + "issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B", + "value": "0" + }, + "LowNode": "bd7" + }, + "LedgerEntryType": "RippleState", + "LedgerIndex": "832F2523220A304ECEB7B2AE3E0D30829ACBCA0A31722FA8D952CC5BE7D9478B", + "PreviousFields": { + "Balance": { + "currency": "USD", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji", + "value": "-222654.5789600612" + } + }, + "PreviousTxnID": "3CFE806B69A8FA91F8965B905BDCDD614B89AF8DC4B8E941D994F00CC1E57BBC", + "PreviousTxnLgrSeq": 88213878 + } + }, + { + "ModifiedNode": { + "FinalFields": { + "AMMID": "EF95AD04AF97DF0DD76C5C624F93EF6F5479CDF8F30FAE612F1D434B5D6A914B", + "Account": "rHUpaqUPbwzKZdzQ8ZQCme18FrgW9pB4am", + "Balance": "417539550052", + "Flags": 26214400, + "OwnerCount": 1, + "Sequence": 86795414 + }, + "LedgerEntryType": "AccountRoot", + "LedgerIndex": "B21B05E69AFB3F98B8D6F8066A69C4B189F3D804D8BE896AE11E60189AAFAD51", + "PreviousFields": { "Balance": "417685774720" }, + "PreviousTxnID": "3CFE806B69A8FA91F8965B905BDCDD614B89AF8DC4B8E941D994F00CC1E57BBC", + "PreviousTxnLgrSeq": 88213878 + } + }, + { + "ModifiedNode": { + "FinalFields": { + "Balance": { + "currency": "USD", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji", + "value": "-15.22762820406059" + }, + "Flags": 2228224, + "HighLimit": { + "currency": "USD", + "issuer": "rsFaWztpAqZKoBSLTuhrhYfBV4nwYg7TFP", + "value": "1000000000" + }, + "HighNode": "0", + "LowLimit": { + "currency": "USD", + "issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B", + "value": "0" + }, + "LowNode": "b09" + }, + "LedgerEntryType": "RippleState", + "LedgerIndex": "CFCB7153408413FDB9A4B5AD3530680442200FA6F620711A80567DD1A965FD96", + "PreviousFields": { + "Balance": { + "currency": "USD", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji", + "value": "-13.68376456072975" + } + }, + "PreviousTxnID": "BE19A57B91862555B86A59A6331E2B56D3156CF18C5E1F74340D3CAFEE909D2F", + "PreviousTxnLgrSeq": 88213895 + } + }, + { + "ModifiedNode": { + "FinalFields": { + "Flags": 0, + "Owner": "rsFaWztpAqZKoBSLTuhrhYfBV4nwYg7TFP", + "RootIndex": "D838BBCEB616863B8BDCF5F5A638245459F3697855EB03F80BD09DA6F256D011" + }, + "LedgerEntryType": "DirectoryNode", + "LedgerIndex": "D838BBCEB616863B8BDCF5F5A638245459F3697855EB03F80BD09DA6F256D011" + } + }, + { + "ModifiedNode": { + "FinalFields": { + "Balance": { + "currency": "USD", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji", + "value": "-6450000000000000e-26" + }, + "Flags": 2228224, + "HighLimit": { + "currency": "USD", + "issuer": "rBrnBoVq2ZBrq53ns1pNCCnsnhFizf59Lj", + "value": "0" + }, + "HighNode": "0", + "LowLimit": { + "currency": "USD", + "issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B", + "value": "0" + }, + "LowNode": "bea" + }, + "LedgerEntryType": "RippleState", + "LedgerIndex": "DE51B19CCC570DB23F7A831943C8D874FB1928E513EC88090A543E32340AE813", + "PreviousFields": { + "Balance": { + "currency": "USD", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji", + "value": "-79.6770766125645" + } + }, + "PreviousTxnID": "3CFE806B69A8FA91F8965B905BDCDD614B89AF8DC4B8E941D994F00CC1E57BBC", + "PreviousTxnLgrSeq": 88213878 + } + }, + { + "DeletedNode": { + "FinalFields": { + "ExchangeRate": "4e12f1b0ae6a0fb3", + "Flags": 0, + "RootIndex": "DFA3B6DDAB58C7E8E5D944E736DA4B7046C30E4F460FD9DE4E12F1B0AE6A0FB3", + "TakerGetsCurrency": "0000000000000000000000000000000000000000", + "TakerGetsIssuer": "0000000000000000000000000000000000000000", + "TakerPaysCurrency": "0000000000000000000000005553440000000000", + "TakerPaysIssuer": "0A20B3C85F482532A9578DBB3950B85CA06594D1" + }, + "LedgerEntryType": "DirectoryNode", + "LedgerIndex": "DFA3B6DDAB58C7E8E5D944E736DA4B7046C30E4F460FD9DE4E12F1B0AE6A0FB3" + } + } + ], + "DeliveredAmount": "149119977", + "TransactionIndex": 13, + "TransactionResult": "tesSUCCESS", + "delivered_amount": "149119977" + }, + "validated": "undefined", + "metaData": "undefined", + "status": "undefined" + }, + "meta": { + "AffectedNodes": [ + { + "ModifiedNode": { + "FinalFields": { + "Account": "rsFaWztpAqZKoBSLTuhrhYfBV4nwYg7TFP", + "Balance": "56685726", + "Flags": 0, + "OwnerCount": 13, + "Sequence": 75621582 + }, + "LedgerEntryType": "AccountRoot", + "LedgerIndex": "13CD16752E004F76B468237B2F44DA9CFCA143A28C8EB6686D6A05695C8C3F7B", + "PreviousFields": { "Balance": "59581035", "OwnerCount": 14 }, + "PreviousTxnID": "BE19A57B91862555B86A59A6331E2B56D3156CF18C5E1F74340D3CAFEE909D2F", + "PreviousTxnLgrSeq": 88213895 + } + }, + { + "ModifiedNode": { + "FinalFields": { + "Account": "rBrnBoVq2ZBrq53ns1pNCCnsnhFizf59Lj", + "Balance": "6284089037", + "Flags": 0, + "OwnerCount": 4, + "Sequence": 88196799 + }, + "LedgerEntryType": "AccountRoot", + "LedgerIndex": "181A3BAD298B55A47F4F9A0247D638F33BFF7DEDC7A1ECD1392C2ADF9A3F46C9", + "PreviousFields": { "Balance": "6134969072", "Sequence": 88196798 }, + "PreviousTxnID": "3CFE806B69A8FA91F8965B905BDCDD614B89AF8DC4B8E941D994F00CC1E57BBC", + "PreviousTxnLgrSeq": 88213878 + } + }, + { + "DeletedNode": { + "FinalFields": { + "Account": "rsFaWztpAqZKoBSLTuhrhYfBV4nwYg7TFP", + "BookDirectory": "DFA3B6DDAB58C7E8E5D944E736DA4B7046C30E4F460FD9DE4E12F1B0AE6A0FB3", + "BookNode": "0", + "Flags": 0, + "OwnerNode": "0", + "PreviousTxnID": "BE19A57B91862555B86A59A6331E2B56D3156CF18C5E1F74340D3CAFEE909D2F", + "PreviousTxnLgrSeq": 88213895, + "Sequence": 75621581, + "TakerGets": "0", + "TakerPays": { + "currency": "USD", + "issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B", + "value": "0" + } + }, + "LedgerEntryType": "Offer", + "LedgerIndex": "6AB7F7F338C9FFF65323CCAEF7E38FE93D45D6F67E0ABF11822216D1A90DF89E", + "PreviousFields": { + "TakerGets": "2895309", + "TakerPays": { + "currency": "USD", + "issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B", + "value": "1.543863643330838" + } + } + } + }, + { + "ModifiedNode": { + "FinalFields": { + "Balance": { + "currency": "USD", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji", + "value": "-222732.5928364204" + }, + "Flags": 16908288, + "HighLimit": { + "currency": "USD", + "issuer": "rHUpaqUPbwzKZdzQ8ZQCme18FrgW9pB4am", + "value": "0" + }, + "HighNode": "0", + "LowLimit": { + "currency": "USD", + "issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B", + "value": "0" + }, + "LowNode": "bd7" + }, + "LedgerEntryType": "RippleState", + "LedgerIndex": "832F2523220A304ECEB7B2AE3E0D30829ACBCA0A31722FA8D952CC5BE7D9478B", + "PreviousFields": { + "Balance": { + "currency": "USD", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji", + "value": "-222654.5789600612" + } + }, + "PreviousTxnID": "3CFE806B69A8FA91F8965B905BDCDD614B89AF8DC4B8E941D994F00CC1E57BBC", + "PreviousTxnLgrSeq": 88213878 + } + }, + { + "ModifiedNode": { + "FinalFields": { + "AMMID": "EF95AD04AF97DF0DD76C5C624F93EF6F5479CDF8F30FAE612F1D434B5D6A914B", + "Account": "rHUpaqUPbwzKZdzQ8ZQCme18FrgW9pB4am", + "Balance": "417539550052", + "Flags": 26214400, + "OwnerCount": 1, + "Sequence": 86795414 + }, + "LedgerEntryType": "AccountRoot", + "LedgerIndex": "B21B05E69AFB3F98B8D6F8066A69C4B189F3D804D8BE896AE11E60189AAFAD51", + "PreviousFields": { "Balance": "417685774720" }, + "PreviousTxnID": "3CFE806B69A8FA91F8965B905BDCDD614B89AF8DC4B8E941D994F00CC1E57BBC", + "PreviousTxnLgrSeq": 88213878 + } + }, + { + "ModifiedNode": { + "FinalFields": { + "Balance": { + "currency": "USD", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji", + "value": "-15.22762820406059" + }, + "Flags": 2228224, + "HighLimit": { + "currency": "USD", + "issuer": "rsFaWztpAqZKoBSLTuhrhYfBV4nwYg7TFP", + "value": "1000000000" + }, + "HighNode": "0", + "LowLimit": { + "currency": "USD", + "issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B", + "value": "0" + }, + "LowNode": "b09" + }, + "LedgerEntryType": "RippleState", + "LedgerIndex": "CFCB7153408413FDB9A4B5AD3530680442200FA6F620711A80567DD1A965FD96", + "PreviousFields": { + "Balance": { + "currency": "USD", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji", + "value": "-13.68376456072975" + } + }, + "PreviousTxnID": "BE19A57B91862555B86A59A6331E2B56D3156CF18C5E1F74340D3CAFEE909D2F", + "PreviousTxnLgrSeq": 88213895 + } + }, + { + "ModifiedNode": { + "FinalFields": { + "Flags": 0, + "Owner": "rsFaWztpAqZKoBSLTuhrhYfBV4nwYg7TFP", + "RootIndex": "D838BBCEB616863B8BDCF5F5A638245459F3697855EB03F80BD09DA6F256D011" + }, + "LedgerEntryType": "DirectoryNode", + "LedgerIndex": "D838BBCEB616863B8BDCF5F5A638245459F3697855EB03F80BD09DA6F256D011" + } + }, + { + "ModifiedNode": { + "FinalFields": { + "Balance": { + "currency": "USD", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji", + "value": "-6450000000000000e-26" + }, + "Flags": 2228224, + "HighLimit": { + "currency": "USD", + "issuer": "rBrnBoVq2ZBrq53ns1pNCCnsnhFizf59Lj", + "value": "0" + }, + "HighNode": "0", + "LowLimit": { + "currency": "USD", + "issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B", + "value": "0" + }, + "LowNode": "bea" + }, + "LedgerEntryType": "RippleState", + "LedgerIndex": "DE51B19CCC570DB23F7A831943C8D874FB1928E513EC88090A543E32340AE813", + "PreviousFields": { + "Balance": { + "currency": "USD", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji", + "value": "-79.6770766125645" + } + }, + "PreviousTxnID": "3CFE806B69A8FA91F8965B905BDCDD614B89AF8DC4B8E941D994F00CC1E57BBC", + "PreviousTxnLgrSeq": 88213878 + } + }, + { + "DeletedNode": { + "FinalFields": { + "ExchangeRate": "4e12f1b0ae6a0fb3", + "Flags": 0, + "RootIndex": "DFA3B6DDAB58C7E8E5D944E736DA4B7046C30E4F460FD9DE4E12F1B0AE6A0FB3", + "TakerGetsCurrency": "0000000000000000000000000000000000000000", + "TakerGetsIssuer": "0000000000000000000000000000000000000000", + "TakerPaysCurrency": "0000000000000000000000005553440000000000", + "TakerPaysIssuer": "0A20B3C85F482532A9578DBB3950B85CA06594D1" + }, + "LedgerEntryType": "DirectoryNode", + "LedgerIndex": "DFA3B6DDAB58C7E8E5D944E736DA4B7046C30E4F460FD9DE4E12F1B0AE6A0FB3" + } + } + ], + "DeliveredAmount": "149119977", + "TransactionIndex": 13, + "TransactionResult": "tesSUCCESS", + "delivered_amount": "149119977" + } +} From 43071102e86ecab47f4ead05a49af2b741162315 Mon Sep 17 00:00:00 2001 From: Lathan Britz <jucallme@gmail.com> Date: Fri, 24 May 2024 16:45:42 -0400 Subject: [PATCH 77/79] remove debug --- src/containers/Transactions/test/BreakDownTab.test.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/containers/Transactions/test/BreakDownTab.test.tsx b/src/containers/Transactions/test/BreakDownTab.test.tsx index 0a0f829d4..4505cf561 100644 --- a/src/containers/Transactions/test/BreakDownTab.test.tsx +++ b/src/containers/Transactions/test/BreakDownTab.test.tsx @@ -25,7 +25,7 @@ describe('BreakdownTab container', () => { it('renders breakdown tab information', () => { const wrapper = createWrapper(Payment) - console.log(Payment) + // console.log(Payment) expect(wrapper.find('.breakdown-body').length).toBe(1) expect(wrapper.find('.detail-section').length).toBe(3) @@ -70,7 +70,7 @@ describe('BreakdownTab container', () => { ).toBe(true) expect(wrapper.contains(<span className="badge amm">amm</span>)).toBe(true) - console.log(wrapper.debug()) + // console.log(wrapper.debug()) wrapper.unmount() }) }) From 7d79dc45db5f1763ec6319d7483aeb590300d76d Mon Sep 17 00:00:00 2001 From: Lathan Britz <jucallme@gmail.com> Date: Fri, 24 May 2024 16:59:19 -0400 Subject: [PATCH 78/79] revert unwanted change --- src/containers/Transactions/BreakDownTab/index.tsx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/containers/Transactions/BreakDownTab/index.tsx b/src/containers/Transactions/BreakDownTab/index.tsx index 338c479ad..126b5e57c 100644 --- a/src/containers/Transactions/BreakDownTab/index.tsx +++ b/src/containers/Transactions/BreakDownTab/index.tsx @@ -43,7 +43,11 @@ export const BreakDownTab: FC<{ data: any }> = ({ data }) => { if (!label) { balanceLabel = '' } - balances.push(<li key={String(index)}>{balanceLabel}</li>) + balances.push( + <li key={String(index)}> + {balanceLabel} <Amount value={formatAmount(amount)} /> + </li>, + ) }) return <ul>{balances}</ul> From de34ac952512b43115f56556f6606dc20e4c9b21 Mon Sep 17 00:00:00 2001 From: Lathan Britz <jucallme@gmail.com> Date: Fri, 24 May 2024 18:37:27 -0400 Subject: [PATCH 79/79] more test --- .../Transactions/BreakDownTab/index.tsx | 6 +- .../Transactions/test/BreakDownTab.test.tsx | 37 +- .../test/mock_data/PaymentBreakdown.json | 466 ++++++------------ 3 files changed, 173 insertions(+), 336 deletions(-) diff --git a/src/containers/Transactions/BreakDownTab/index.tsx b/src/containers/Transactions/BreakDownTab/index.tsx index 126b5e57c..697caaa14 100644 --- a/src/containers/Transactions/BreakDownTab/index.tsx +++ b/src/containers/Transactions/BreakDownTab/index.tsx @@ -45,7 +45,8 @@ export const BreakDownTab: FC<{ data: any }> = ({ data }) => { } balances.push( <li key={String(index)}> - {balanceLabel} <Amount value={formatAmount(amount)} /> + {balanceLabel}{' '} + <Amount change_type={type} value={formatAmount(amount)} /> </li>, ) }) @@ -290,7 +291,7 @@ export const BreakDownTab: FC<{ data: any }> = ({ data }) => { <div className="title">{t('liquidity_source')}</div> <Cylindars parsed={parsed} account={parsed.sourceAccount} /> </div> - <div className="detail-section"> + <div className="detail-section balance-changes"> <div className="title">{t('balance_changes')}</div> <Transaction parsed={parsed} account={parsed.sourceAccount} /> </div> @@ -302,6 +303,7 @@ export const BreakDownTab: FC<{ data: any }> = ({ data }) => { </div> ) } catch (e) { + // console.log(e) return <h3>{t('incomplete_transaction')}</h3> } } diff --git a/src/containers/Transactions/test/BreakDownTab.test.tsx b/src/containers/Transactions/test/BreakDownTab.test.tsx index 4505cf561..928f7ddf7 100644 --- a/src/containers/Transactions/test/BreakDownTab.test.tsx +++ b/src/containers/Transactions/test/BreakDownTab.test.tsx @@ -39,23 +39,23 @@ describe('BreakdownTab container', () => { wrapper.contains(<div className="title">liquidity_source</div>), ).toBe(true) - expect(wrapper.contains(<option value="source">USD source</option>)).toBe( + expect(wrapper.contains(<option value="source">XRP source</option>)).toBe( true, ) expect( - wrapper.contains(<option value="destination">XRP destination</option>), + wrapper.contains(<option value="destination">USDC destination</option>), ).toBe(true) expect(wrapper.contains(<p>graph_dependent_currency</p>)).toBe(true) expect( - wrapper.contains(<span className="margin-text">amm (98%)</span>), + wrapper.contains(<span className="margin-text">amm (100%)</span>), ).toBe(true) expect( - wrapper.contains(<span className="margin-text">rippling (0%)</span>), + wrapper.contains(<span className="margin-text">rippling (100%)</span>), ).toBe(true) expect( - wrapper.contains(<span className="margin-text">dex (2%)</span>), + wrapper.contains(<span className="margin-text">dex (0%)</span>), ).toBe(true) expect( wrapper.contains(<span className="margin-text">direct (0%)</span>), @@ -64,13 +64,38 @@ describe('BreakdownTab container', () => { expect(wrapper.contains(<div className="title">balance_changes</div>)).toBe( true, ) - expect(wrapper.contains(<span className="badge dex">dex</span>)).toBe(true) + + expect(wrapper.contains(<span className="badge dex">dex</span>)).toBe(false) + expect(wrapper.contains(<span className="badge dex">direct</span>)).toBe( + false, + ) expect( wrapper.contains(<span className="badge rippling">rippling</span>), ).toBe(true) expect(wrapper.contains(<span className="badge amm">amm</span>)).toBe(true) + const balanceChanges = wrapper.find('.balance-changes') + expect(balanceChanges.find('BalanceChange')).toHaveLength(2) // console.log(wrapper.debug()) + + expect( + balanceChanges.contains( + <span className="amount-localized">26.79746261</span>, + ), + ).toBe(true) + expect( + balanceChanges.contains( + <span className="amount-localized">-26.877855</span>, + ), + ).toBe(true) + expect( + balanceChanges.contains( + <span className="amount-localized">-50.624692</span>, + ), + ).toBe(true) + wrapper.unmount() }) + + // console.log(balanceChanges.debug()) }) diff --git a/src/containers/Transactions/test/mock_data/PaymentBreakdown.json b/src/containers/Transactions/test/mock_data/PaymentBreakdown.json index 0c7223914..6336382c0 100644 --- a/src/containers/Transactions/test/mock_data/PaymentBreakdown.json +++ b/src/containers/Transactions/test/mock_data/PaymentBreakdown.json @@ -1,35 +1,40 @@ { - "hash": "9D6DC95E7B95F7302EBF711F9384B51666E3D98D5B177A6EF0C0250D7F3410D2", - "ledger_index": 88213902, - "date": 1716575361000, "tx": { - "Account": "rBrnBoVq2ZBrq53ns1pNCCnsnhFizf59Lj", - "Amount": "149343627", - "DeliverMax": "149343627", - "DeliverMin": "146356755", - "Destination": "rBrnBoVq2ZBrq53ns1pNCCnsnhFizf59Lj", + "Account": "r3GphWJaShhd1RNFnCaGMVyMawYcKHXCvo", + "Amount": { + "currency": "5553444300000000000000000000000000000000", + "issuer": "rcEGREd8NmkKRE8GE424sksyt1tJVFZwu", + "value": "1000000000000000e2" + }, + "DeliverMax": { + "currency": "5553444300000000000000000000000000000000", + "issuer": "rcEGREd8NmkKRE8GE424sksyt1tJVFZwu", + "value": "1000000000000000e2" + }, + "DeliverMin": { + "currency": "5553444300000000000000000000000000000000", + "issuer": "rcEGREd8NmkKRE8GE424sksyt1tJVFZwu", + "value": "25.639817695" + }, + "Destination": "r3GphWJaShhd1RNFnCaGMVyMawYcKHXCvo", "Fee": "12", "Flags": 131072, - "LastLedgerSequence": 88213910, + "LastLedgerSequence": 88214940, "Memos": [ { "Memo": { - "MemoData": "5472616E73616374696F6E20696E6974696174656420627920786D61676E657469632E6F7267" + "MemoData": "53574150205472616E73616374696F6E20696E69746961746564207669612058506D61726B65742E636F6D" } } ], - "SendMax": { - "currency": "USD", - "issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B", - "value": "79.6770766125" - }, - "Sequence": 88196798, - "SigningPubKey": "021738EBB3F528A186919463A8B4C31BADDE35B579B1F2F86DF4383547AE7865C9", - "SourceTag": 10011010, + "SendMax": "50624692", + "Sequence": 88214147, + "SigningPubKey": "02F00DADAD94C694359D9FB84163D390CDC418BDA6313A139945C09D2277B39B55", + "SourceTag": 20221212, "TransactionType": "Payment", - "TxnSignature": "304402205B749EEE748F7EB49BBA734558ADB257FB83B60C7224A7B6CAD9C910619486F202206EE3C12787A085AEFADC6E053824562A48DB2072E5F19D57C6D41415A5DBE5FB", - "ctid": "C542098E000D0000", - "date": 1716575361000, + "TxnSignature": "30450221009510B1D5C84A82D870C2827F6A82E6E8AE930778A75D2623D1E8D8280368D6D602207B74F93375275265AB59988748DD1D34F758960EE8FEE5C572A8E84A71205C0F", + "ctid": "C5420D9400120000", + "date": 1716579292000, "hash": "undefined", "inLedger": "undefined", "ledger_index": "undefined", @@ -38,218 +43,119 @@ { "ModifiedNode": { "FinalFields": { - "Account": "rsFaWztpAqZKoBSLTuhrhYfBV4nwYg7TFP", - "Balance": "56685726", + "Account": "r3GphWJaShhd1RNFnCaGMVyMawYcKHXCvo", + "Balance": "15877383", "Flags": 0, - "OwnerCount": 13, - "Sequence": 75621582 + "OwnerCount": 1, + "Sequence": 88214148 }, "LedgerEntryType": "AccountRoot", - "LedgerIndex": "13CD16752E004F76B468237B2F44DA9CFCA143A28C8EB6686D6A05695C8C3F7B", - "PreviousFields": { "Balance": "59581035", "OwnerCount": 14 }, - "PreviousTxnID": "BE19A57B91862555B86A59A6331E2B56D3156CF18C5E1F74340D3CAFEE909D2F", - "PreviousTxnLgrSeq": 88213895 - } - }, - { - "ModifiedNode": { - "FinalFields": { - "Account": "rBrnBoVq2ZBrq53ns1pNCCnsnhFizf59Lj", - "Balance": "6284089037", - "Flags": 0, - "OwnerCount": 4, - "Sequence": 88196799 - }, - "LedgerEntryType": "AccountRoot", - "LedgerIndex": "181A3BAD298B55A47F4F9A0247D638F33BFF7DEDC7A1ECD1392C2ADF9A3F46C9", - "PreviousFields": { "Balance": "6134969072", "Sequence": 88196798 }, - "PreviousTxnID": "3CFE806B69A8FA91F8965B905BDCDD614B89AF8DC4B8E941D994F00CC1E57BBC", - "PreviousTxnLgrSeq": 88213878 - } - }, - { - "DeletedNode": { - "FinalFields": { - "Account": "rsFaWztpAqZKoBSLTuhrhYfBV4nwYg7TFP", - "BookDirectory": "DFA3B6DDAB58C7E8E5D944E736DA4B7046C30E4F460FD9DE4E12F1B0AE6A0FB3", - "BookNode": "0", - "Flags": 0, - "OwnerNode": "0", - "PreviousTxnID": "BE19A57B91862555B86A59A6331E2B56D3156CF18C5E1F74340D3CAFEE909D2F", - "PreviousTxnLgrSeq": 88213895, - "Sequence": 75621581, - "TakerGets": "0", - "TakerPays": { - "currency": "USD", - "issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B", - "value": "0" - } - }, - "LedgerEntryType": "Offer", - "LedgerIndex": "6AB7F7F338C9FFF65323CCAEF7E38FE93D45D6F67E0ABF11822216D1A90DF89E", - "PreviousFields": { - "TakerGets": "2895309", - "TakerPays": { - "currency": "USD", - "issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B", - "value": "1.543863643330838" - } - } + "LedgerIndex": "4ACE281E26640B951CB4A23768CA6C7E1B0F602053B3C86A653847FE5A5AA1ED", + "PreviousFields": { "Balance": "66502087", "Sequence": 88214147 }, + "PreviousTxnID": "6947EB21D0A745A96F9B2F9B5BABFFE43CE66AF8488365DBC112BC38F8FAC0EA", + "PreviousTxnLgrSeq": 88214779 } }, { "ModifiedNode": { "FinalFields": { "Balance": { - "currency": "USD", + "currency": "5553444300000000000000000000000000000000", "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji", - "value": "-222732.5928364204" + "value": "-26.79746261485543" }, - "Flags": 16908288, + "Flags": 2228224, "HighLimit": { - "currency": "USD", - "issuer": "rHUpaqUPbwzKZdzQ8ZQCme18FrgW9pB4am", - "value": "0" + "currency": "5553444300000000000000000000000000000000", + "issuer": "r3GphWJaShhd1RNFnCaGMVyMawYcKHXCvo", + "value": "775905" }, "HighNode": "0", "LowLimit": { - "currency": "USD", - "issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B", + "currency": "5553444300000000000000000000000000000000", + "issuer": "rcEGREd8NmkKRE8GE424sksyt1tJVFZwu", "value": "0" }, - "LowNode": "bd7" + "LowNode": "14f" }, "LedgerEntryType": "RippleState", - "LedgerIndex": "832F2523220A304ECEB7B2AE3E0D30829ACBCA0A31722FA8D952CC5BE7D9478B", + "LedgerIndex": "5F1DFBA426DB53A57ECEFE3EAEB804107DA1B899D4A90C794E577E5082D7C125", "PreviousFields": { "Balance": { - "currency": "USD", + "currency": "5553444300000000000000000000000000000000", "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji", - "value": "-222654.5789600612" + "value": "0" } }, - "PreviousTxnID": "3CFE806B69A8FA91F8965B905BDCDD614B89AF8DC4B8E941D994F00CC1E57BBC", - "PreviousTxnLgrSeq": 88213878 + "PreviousTxnID": "6947EB21D0A745A96F9B2F9B5BABFFE43CE66AF8488365DBC112BC38F8FAC0EA", + "PreviousTxnLgrSeq": 88214779 } }, { "ModifiedNode": { "FinalFields": { - "AMMID": "EF95AD04AF97DF0DD76C5C624F93EF6F5479CDF8F30FAE612F1D434B5D6A914B", - "Account": "rHUpaqUPbwzKZdzQ8ZQCme18FrgW9pB4am", - "Balance": "417539550052", + "AMMID": "383669860F36CDD7BF543C0711DD523E35F60ACA22C8AAD8FDDBB2632C4C5821", + "Account": "rGHt6LT5v9DVaEAmFzj5ciuxuj41ZjLofs", + "Balance": "534441055888", "Flags": 26214400, "OwnerCount": 1, - "Sequence": 86795414 + "Sequence": 86795379 }, "LedgerEntryType": "AccountRoot", - "LedgerIndex": "B21B05E69AFB3F98B8D6F8066A69C4B189F3D804D8BE896AE11E60189AAFAD51", - "PreviousFields": { "Balance": "417685774720" }, - "PreviousTxnID": "3CFE806B69A8FA91F8965B905BDCDD614B89AF8DC4B8E941D994F00CC1E57BBC", - "PreviousTxnLgrSeq": 88213878 + "LedgerIndex": "AEAC617A4934A4E1029581A159AF8EB3356E4DE3C52324D9D5A73C00B8828BCF", + "PreviousFields": { "Balance": "534390431196" }, + "PreviousTxnID": "1FADA966F7F1E8465E17DE2F83216663BE8360B172AC3A0D13FC81757C64AC42", + "PreviousTxnLgrSeq": 88214747 } }, { "ModifiedNode": { "FinalFields": { "Balance": { - "currency": "USD", + "currency": "5553444300000000000000000000000000000000", "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji", - "value": "-15.22762820406059" - }, - "Flags": 2228224, - "HighLimit": { - "currency": "USD", - "issuer": "rsFaWztpAqZKoBSLTuhrhYfBV4nwYg7TFP", - "value": "1000000000" + "value": "-284983.085646821" }, - "HighNode": "0", - "LowLimit": { - "currency": "USD", - "issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B", - "value": "0" - }, - "LowNode": "b09" - }, - "LedgerEntryType": "RippleState", - "LedgerIndex": "CFCB7153408413FDB9A4B5AD3530680442200FA6F620711A80567DD1A965FD96", - "PreviousFields": { - "Balance": { - "currency": "USD", - "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji", - "value": "-13.68376456072975" - } - }, - "PreviousTxnID": "BE19A57B91862555B86A59A6331E2B56D3156CF18C5E1F74340D3CAFEE909D2F", - "PreviousTxnLgrSeq": 88213895 - } - }, - { - "ModifiedNode": { - "FinalFields": { - "Flags": 0, - "Owner": "rsFaWztpAqZKoBSLTuhrhYfBV4nwYg7TFP", - "RootIndex": "D838BBCEB616863B8BDCF5F5A638245459F3697855EB03F80BD09DA6F256D011" - }, - "LedgerEntryType": "DirectoryNode", - "LedgerIndex": "D838BBCEB616863B8BDCF5F5A638245459F3697855EB03F80BD09DA6F256D011" - } - }, - { - "ModifiedNode": { - "FinalFields": { - "Balance": { - "currency": "USD", - "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji", - "value": "-6450000000000000e-26" - }, - "Flags": 2228224, + "Flags": 16908288, "HighLimit": { - "currency": "USD", - "issuer": "rBrnBoVq2ZBrq53ns1pNCCnsnhFizf59Lj", + "currency": "5553444300000000000000000000000000000000", + "issuer": "rGHt6LT5v9DVaEAmFzj5ciuxuj41ZjLofs", "value": "0" }, "HighNode": "0", "LowLimit": { - "currency": "USD", - "issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B", + "currency": "5553444300000000000000000000000000000000", + "issuer": "rcEGREd8NmkKRE8GE424sksyt1tJVFZwu", "value": "0" }, - "LowNode": "bea" + "LowNode": "10a" }, "LedgerEntryType": "RippleState", - "LedgerIndex": "DE51B19CCC570DB23F7A831943C8D874FB1928E513EC88090A543E32340AE813", + "LedgerIndex": "CDE55A8290DF221A643F51798BE6294A69384066D1ECFB7C2B9BEE2004B38D63", "PreviousFields": { "Balance": { - "currency": "USD", + "currency": "5553444300000000000000000000000000000000", "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji", - "value": "-79.6770766125645" + "value": "-285009.9635018237" } }, - "PreviousTxnID": "3CFE806B69A8FA91F8965B905BDCDD614B89AF8DC4B8E941D994F00CC1E57BBC", - "PreviousTxnLgrSeq": 88213878 - } - }, - { - "DeletedNode": { - "FinalFields": { - "ExchangeRate": "4e12f1b0ae6a0fb3", - "Flags": 0, - "RootIndex": "DFA3B6DDAB58C7E8E5D944E736DA4B7046C30E4F460FD9DE4E12F1B0AE6A0FB3", - "TakerGetsCurrency": "0000000000000000000000000000000000000000", - "TakerGetsIssuer": "0000000000000000000000000000000000000000", - "TakerPaysCurrency": "0000000000000000000000005553440000000000", - "TakerPaysIssuer": "0A20B3C85F482532A9578DBB3950B85CA06594D1" - }, - "LedgerEntryType": "DirectoryNode", - "LedgerIndex": "DFA3B6DDAB58C7E8E5D944E736DA4B7046C30E4F460FD9DE4E12F1B0AE6A0FB3" + "PreviousTxnID": "1FADA966F7F1E8465E17DE2F83216663BE8360B172AC3A0D13FC81757C64AC42", + "PreviousTxnLgrSeq": 88214747 } } ], - "DeliveredAmount": "149119977", - "TransactionIndex": 13, + "DeliveredAmount": { + "currency": "5553444300000000000000000000000000000000", + "issuer": "rcEGREd8NmkKRE8GE424sksyt1tJVFZwu", + "value": "26.79746261485543" + }, + "TransactionIndex": 18, "TransactionResult": "tesSUCCESS", - "delivered_amount": "149119977" + "delivered_amount": { + "currency": "5553444300000000000000000000000000000000", + "issuer": "rcEGREd8NmkKRE8GE424sksyt1tJVFZwu", + "value": "26.79746261485543" + } }, "validated": "undefined", "metaData": "undefined", @@ -260,217 +166,121 @@ { "ModifiedNode": { "FinalFields": { - "Account": "rsFaWztpAqZKoBSLTuhrhYfBV4nwYg7TFP", - "Balance": "56685726", + "Account": "r3GphWJaShhd1RNFnCaGMVyMawYcKHXCvo", + "Balance": "15877383", "Flags": 0, - "OwnerCount": 13, - "Sequence": 75621582 + "OwnerCount": 1, + "Sequence": 88214148 }, "LedgerEntryType": "AccountRoot", - "LedgerIndex": "13CD16752E004F76B468237B2F44DA9CFCA143A28C8EB6686D6A05695C8C3F7B", - "PreviousFields": { "Balance": "59581035", "OwnerCount": 14 }, - "PreviousTxnID": "BE19A57B91862555B86A59A6331E2B56D3156CF18C5E1F74340D3CAFEE909D2F", - "PreviousTxnLgrSeq": 88213895 - } - }, - { - "ModifiedNode": { - "FinalFields": { - "Account": "rBrnBoVq2ZBrq53ns1pNCCnsnhFizf59Lj", - "Balance": "6284089037", - "Flags": 0, - "OwnerCount": 4, - "Sequence": 88196799 - }, - "LedgerEntryType": "AccountRoot", - "LedgerIndex": "181A3BAD298B55A47F4F9A0247D638F33BFF7DEDC7A1ECD1392C2ADF9A3F46C9", - "PreviousFields": { "Balance": "6134969072", "Sequence": 88196798 }, - "PreviousTxnID": "3CFE806B69A8FA91F8965B905BDCDD614B89AF8DC4B8E941D994F00CC1E57BBC", - "PreviousTxnLgrSeq": 88213878 - } - }, - { - "DeletedNode": { - "FinalFields": { - "Account": "rsFaWztpAqZKoBSLTuhrhYfBV4nwYg7TFP", - "BookDirectory": "DFA3B6DDAB58C7E8E5D944E736DA4B7046C30E4F460FD9DE4E12F1B0AE6A0FB3", - "BookNode": "0", - "Flags": 0, - "OwnerNode": "0", - "PreviousTxnID": "BE19A57B91862555B86A59A6331E2B56D3156CF18C5E1F74340D3CAFEE909D2F", - "PreviousTxnLgrSeq": 88213895, - "Sequence": 75621581, - "TakerGets": "0", - "TakerPays": { - "currency": "USD", - "issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B", - "value": "0" - } - }, - "LedgerEntryType": "Offer", - "LedgerIndex": "6AB7F7F338C9FFF65323CCAEF7E38FE93D45D6F67E0ABF11822216D1A90DF89E", - "PreviousFields": { - "TakerGets": "2895309", - "TakerPays": { - "currency": "USD", - "issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B", - "value": "1.543863643330838" - } - } + "LedgerIndex": "4ACE281E26640B951CB4A23768CA6C7E1B0F602053B3C86A653847FE5A5AA1ED", + "PreviousFields": { "Balance": "66502087", "Sequence": 88214147 }, + "PreviousTxnID": "6947EB21D0A745A96F9B2F9B5BABFFE43CE66AF8488365DBC112BC38F8FAC0EA", + "PreviousTxnLgrSeq": 88214779 } }, { "ModifiedNode": { "FinalFields": { "Balance": { - "currency": "USD", + "currency": "5553444300000000000000000000000000000000", "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji", - "value": "-222732.5928364204" + "value": "-26.79746261485543" }, - "Flags": 16908288, + "Flags": 2228224, "HighLimit": { - "currency": "USD", - "issuer": "rHUpaqUPbwzKZdzQ8ZQCme18FrgW9pB4am", - "value": "0" + "currency": "5553444300000000000000000000000000000000", + "issuer": "r3GphWJaShhd1RNFnCaGMVyMawYcKHXCvo", + "value": "775905" }, "HighNode": "0", "LowLimit": { - "currency": "USD", - "issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B", + "currency": "5553444300000000000000000000000000000000", + "issuer": "rcEGREd8NmkKRE8GE424sksyt1tJVFZwu", "value": "0" }, - "LowNode": "bd7" + "LowNode": "14f" }, "LedgerEntryType": "RippleState", - "LedgerIndex": "832F2523220A304ECEB7B2AE3E0D30829ACBCA0A31722FA8D952CC5BE7D9478B", + "LedgerIndex": "5F1DFBA426DB53A57ECEFE3EAEB804107DA1B899D4A90C794E577E5082D7C125", "PreviousFields": { "Balance": { - "currency": "USD", + "currency": "5553444300000000000000000000000000000000", "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji", - "value": "-222654.5789600612" + "value": "0" } }, - "PreviousTxnID": "3CFE806B69A8FA91F8965B905BDCDD614B89AF8DC4B8E941D994F00CC1E57BBC", - "PreviousTxnLgrSeq": 88213878 + "PreviousTxnID": "6947EB21D0A745A96F9B2F9B5BABFFE43CE66AF8488365DBC112BC38F8FAC0EA", + "PreviousTxnLgrSeq": 88214779 } }, { "ModifiedNode": { "FinalFields": { - "AMMID": "EF95AD04AF97DF0DD76C5C624F93EF6F5479CDF8F30FAE612F1D434B5D6A914B", - "Account": "rHUpaqUPbwzKZdzQ8ZQCme18FrgW9pB4am", - "Balance": "417539550052", + "AMMID": "383669860F36CDD7BF543C0711DD523E35F60ACA22C8AAD8FDDBB2632C4C5821", + "Account": "rGHt6LT5v9DVaEAmFzj5ciuxuj41ZjLofs", + "Balance": "534441055888", "Flags": 26214400, "OwnerCount": 1, - "Sequence": 86795414 + "Sequence": 86795379 }, "LedgerEntryType": "AccountRoot", - "LedgerIndex": "B21B05E69AFB3F98B8D6F8066A69C4B189F3D804D8BE896AE11E60189AAFAD51", - "PreviousFields": { "Balance": "417685774720" }, - "PreviousTxnID": "3CFE806B69A8FA91F8965B905BDCDD614B89AF8DC4B8E941D994F00CC1E57BBC", - "PreviousTxnLgrSeq": 88213878 + "LedgerIndex": "AEAC617A4934A4E1029581A159AF8EB3356E4DE3C52324D9D5A73C00B8828BCF", + "PreviousFields": { "Balance": "534390431196" }, + "PreviousTxnID": "1FADA966F7F1E8465E17DE2F83216663BE8360B172AC3A0D13FC81757C64AC42", + "PreviousTxnLgrSeq": 88214747 } }, { "ModifiedNode": { "FinalFields": { "Balance": { - "currency": "USD", + "currency": "5553444300000000000000000000000000000000", "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji", - "value": "-15.22762820406059" - }, - "Flags": 2228224, - "HighLimit": { - "currency": "USD", - "issuer": "rsFaWztpAqZKoBSLTuhrhYfBV4nwYg7TFP", - "value": "1000000000" - }, - "HighNode": "0", - "LowLimit": { - "currency": "USD", - "issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B", - "value": "0" + "value": "-284983.085646821" }, - "LowNode": "b09" - }, - "LedgerEntryType": "RippleState", - "LedgerIndex": "CFCB7153408413FDB9A4B5AD3530680442200FA6F620711A80567DD1A965FD96", - "PreviousFields": { - "Balance": { - "currency": "USD", - "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji", - "value": "-13.68376456072975" - } - }, - "PreviousTxnID": "BE19A57B91862555B86A59A6331E2B56D3156CF18C5E1F74340D3CAFEE909D2F", - "PreviousTxnLgrSeq": 88213895 - } - }, - { - "ModifiedNode": { - "FinalFields": { - "Flags": 0, - "Owner": "rsFaWztpAqZKoBSLTuhrhYfBV4nwYg7TFP", - "RootIndex": "D838BBCEB616863B8BDCF5F5A638245459F3697855EB03F80BD09DA6F256D011" - }, - "LedgerEntryType": "DirectoryNode", - "LedgerIndex": "D838BBCEB616863B8BDCF5F5A638245459F3697855EB03F80BD09DA6F256D011" - } - }, - { - "ModifiedNode": { - "FinalFields": { - "Balance": { - "currency": "USD", - "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji", - "value": "-6450000000000000e-26" - }, - "Flags": 2228224, + "Flags": 16908288, "HighLimit": { - "currency": "USD", - "issuer": "rBrnBoVq2ZBrq53ns1pNCCnsnhFizf59Lj", + "currency": "5553444300000000000000000000000000000000", + "issuer": "rGHt6LT5v9DVaEAmFzj5ciuxuj41ZjLofs", "value": "0" }, "HighNode": "0", "LowLimit": { - "currency": "USD", - "issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B", + "currency": "5553444300000000000000000000000000000000", + "issuer": "rcEGREd8NmkKRE8GE424sksyt1tJVFZwu", "value": "0" }, - "LowNode": "bea" + "LowNode": "10a" }, "LedgerEntryType": "RippleState", - "LedgerIndex": "DE51B19CCC570DB23F7A831943C8D874FB1928E513EC88090A543E32340AE813", + "LedgerIndex": "CDE55A8290DF221A643F51798BE6294A69384066D1ECFB7C2B9BEE2004B38D63", "PreviousFields": { "Balance": { - "currency": "USD", + "currency": "5553444300000000000000000000000000000000", "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji", - "value": "-79.6770766125645" + "value": "-285009.9635018237" } }, - "PreviousTxnID": "3CFE806B69A8FA91F8965B905BDCDD614B89AF8DC4B8E941D994F00CC1E57BBC", - "PreviousTxnLgrSeq": 88213878 - } - }, - { - "DeletedNode": { - "FinalFields": { - "ExchangeRate": "4e12f1b0ae6a0fb3", - "Flags": 0, - "RootIndex": "DFA3B6DDAB58C7E8E5D944E736DA4B7046C30E4F460FD9DE4E12F1B0AE6A0FB3", - "TakerGetsCurrency": "0000000000000000000000000000000000000000", - "TakerGetsIssuer": "0000000000000000000000000000000000000000", - "TakerPaysCurrency": "0000000000000000000000005553440000000000", - "TakerPaysIssuer": "0A20B3C85F482532A9578DBB3950B85CA06594D1" - }, - "LedgerEntryType": "DirectoryNode", - "LedgerIndex": "DFA3B6DDAB58C7E8E5D944E736DA4B7046C30E4F460FD9DE4E12F1B0AE6A0FB3" + "PreviousTxnID": "1FADA966F7F1E8465E17DE2F83216663BE8360B172AC3A0D13FC81757C64AC42", + "PreviousTxnLgrSeq": 88214747 } } ], - "DeliveredAmount": "149119977", - "TransactionIndex": 13, + "DeliveredAmount": { + "currency": "5553444300000000000000000000000000000000", + "issuer": "rcEGREd8NmkKRE8GE424sksyt1tJVFZwu", + "value": "26.79746261485543" + }, + "TransactionIndex": 18, "TransactionResult": "tesSUCCESS", - "delivered_amount": "149119977" - } + "delivered_amount": { + "currency": "5553444300000000000000000000000000000000", + "issuer": "rcEGREd8NmkKRE8GE424sksyt1tJVFZwu", + "value": "26.79746261485543" + } + }, + "hash": "2C9C11811DFC51263267F7D5AA81C807876B905A99AE52321C582D8E186B7E12", + "ledger_index": 88214932, + "date": 1716579292000 }