diff --git a/.changeset/ninety-carpets-watch.md b/.changeset/ninety-carpets-watch.md new file mode 100644 index 0000000000..9b0c215837 --- /dev/null +++ b/.changeset/ninety-carpets-watch.md @@ -0,0 +1,5 @@ +--- +"@internal/benchmarks": patch +--- + +chore: run benchmarking utility in devnet environment diff --git a/.github/workflows/bench-devnet.yaml b/.github/workflows/bench-devnet.yaml new file mode 100644 index 0000000000..4e2d87b7da --- /dev/null +++ b/.github/workflows/bench-devnet.yaml @@ -0,0 +1,27 @@ +name: "Bench Devnet" + +on: + push: + branches: + - release/* + +jobs: + benchmarks: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: CI Setup + uses: ./.github/actions/test-setup + + - name: Pretest + run: pnpm pretest + + - name: Run Node benchmarks + uses: CodSpeedHQ/action@v3 + with: + run: pnpm bench:node + token: ${{ secrets.CODSPEED_TOKEN }} + env: + DEVNET_WALLET_PVT_KEY: ${{ secrets.DEVNET_WALLET_PVT_KEY }} diff --git a/.github/workflows/bench.yml b/.github/workflows/bench.yml index 8203bd4e53..f6de93c55a 100644 --- a/.github/workflows/bench.yml +++ b/.github/workflows/bench.yml @@ -1,4 +1,5 @@ name: Benchmarks + on: pull_request: push: diff --git a/internal/benchmarks/package.json b/internal/benchmarks/package.json index 83fd5634f2..e9df72b0ca 100644 --- a/internal/benchmarks/package.json +++ b/internal/benchmarks/package.json @@ -11,7 +11,8 @@ }, "license": "Apache-2.0", "dependencies": { - "fuels": "workspace:*" + "fuels": "workspace:*", + "@internal/utils": "workspace:*" }, "version": "1.0.3" } diff --git a/internal/benchmarks/src/config.ts b/internal/benchmarks/src/config.ts new file mode 100644 index 0000000000..512c66d155 --- /dev/null +++ b/internal/benchmarks/src/config.ts @@ -0,0 +1,17 @@ +/* eslint-disable import/no-extraneous-dependencies */ + +import { bench } from 'vitest'; + +export const isDevnet = process.env.DEVNET_WALLET_PVT_KEY !== undefined; + +const iterations = isDevnet ? 1 : 10; + +export const runBenchmark = (name: string, benchmarkFn: () => Promise) => { + bench( + isDevnet ? name : `${name} (x${iterations} times)`, + async () => { + await benchmarkFn(); + }, + { iterations } + ); +}; diff --git a/internal/benchmarks/src/contract-interaction.bench.ts b/internal/benchmarks/src/contract-interaction.bench.ts index 1d35bb3b1e..add8eb8425 100644 --- a/internal/benchmarks/src/contract-interaction.bench.ts +++ b/internal/benchmarks/src/contract-interaction.bench.ts @@ -1,12 +1,19 @@ /* eslint-disable import/no-extraneous-dependencies */ -import type { WalletUnlocked } from 'fuels'; -import { bn } from 'fuels'; +import { DEVNET_NETWORK_URL } from '@internal/utils'; +import { WalletUnlocked, bn, Provider } from 'fuels'; import { launchTestNode, TestAssetId } from 'fuels/test-utils'; import { bench } from 'vitest'; import type { CounterContract, CallTestContract } from '../test/typegen/contracts'; -import { CounterContractFactory, CallTestContractFactory } from '../test/typegen/contracts'; +import { + CounterContractFactory, + CallTestContractFactory, + LargeContractFactory, +} from '../test/typegen/contracts'; + +import { isDevnet, runBenchmark } from './config'; + /** * @group node * @group browser @@ -16,55 +23,82 @@ describe('Contract Interaction Benchmarks', () => { let callTestContract: CallTestContract; let wallet: WalletUnlocked; let cleanup: () => void; - beforeEach(async () => { - const launched = await launchTestNode({ - contractsConfigs: [{ factory: CounterContractFactory }, { factory: CallTestContractFactory }], - }); - cleanup = launched.cleanup; - contract = launched.contracts[0]; - callTestContract = launched.contracts[1]; - wallet = launched.wallets[0]; - }); + const setupTestEnvironment = async () => { + if (isDevnet) { + const provider = await Provider.create(DEVNET_NETWORK_URL); + wallet = new WalletUnlocked(process.env.DEVNET_WALLET_PVT_KEY as string, provider); + + const { waitForResult } = await CounterContractFactory.deploy(wallet); + contract = (await waitForResult()).contract; - afterEach(() => { - cleanup(); + const { waitForResult: waitForResultCallTestContract } = + await CallTestContractFactory.deploy(wallet); + callTestContract = (await waitForResultCallTestContract()).contract; + } else { + const launched = await launchTestNode({ + contractsConfigs: [ + { factory: CounterContractFactory }, + { factory: CallTestContractFactory }, + ], + }); + + cleanup = launched.cleanup; + contract = launched.contracts[0]; + callTestContract = launched.contracts[1]; + wallet = launched.wallets[0]; + } + }; + + beforeAll(setupTestEnvironment); + + afterAll(() => { + if (!isDevnet && cleanup) { + cleanup(); + } }); - bench('should successfully execute a contract read function', async () => { + runBenchmark('should successfully execute a contract read function', async () => { const tx = await contract.functions.get_count().call(); - const { value } = await tx.waitForResult(); - - expect(JSON.stringify(value)).toEqual(JSON.stringify(bn(0))); + expect(value).toBeDefined(); }); - bench('should successfully execute a contract multi call', async () => { + runBenchmark('should successfully execute a contract multi call', async () => { + const initialValue = 100; const tx = await contract - .multiCall([contract.functions.increment_counter(100), contract.functions.get_count()]) + .multiCall([ + contract.functions.increment_counter(initialValue), + contract.functions.get_count(), + ]) .call(); - const { value } = await tx.waitForResult(); - - expect(JSON.stringify(value)).toEqual(JSON.stringify([bn(100), bn(100)])); + expect(value).toBeDefined(); }); - bench('should successfully write to a contract', async () => { + runBenchmark('should successfully write to a contract', async () => { const tx = await contract.functions.increment_counter(100).call(); await tx.waitForResult(); }); - bench('should successfully execute a contract mint', async () => { + runBenchmark('should successfully execute a contract mint', async () => { const tx = await callTestContract.functions.mint_coins(TestAssetId.A.value, bn(100)).call(); - await tx.waitForResult(); }); - bench('should successfully execute a contract deploy', async () => { + runBenchmark('should successfully execute a contract deploy', async () => { const factory = new CounterContractFactory(wallet); const { waitForResult } = await factory.deploy(); const { contract: deployedContract } = await waitForResult(); + expect(deployedContract).toBeDefined(); + }); + bench('should successfully execute a contract deploy as blobs', async () => { + const factory = new LargeContractFactory(wallet); + const { waitForResult } = await factory.deployAsBlobTx({ + chunkSizeMultiplier: 0.9, + }); + const { contract: deployedContract } = await waitForResult(); expect(deployedContract).toBeDefined(); }); }); diff --git a/internal/benchmarks/src/cost-estimation.bench.ts b/internal/benchmarks/src/cost-estimation.bench.ts index 1ba18bcb3d..cffa9ba735 100644 --- a/internal/benchmarks/src/cost-estimation.bench.ts +++ b/internal/benchmarks/src/cost-estimation.bench.ts @@ -1,13 +1,13 @@ -/* eslint-disable import/no-extraneous-dependencies */ - -import type { TransferParams, Provider } from 'fuels'; -import { ScriptTransactionRequest, Wallet } from 'fuels'; -import { launchTestNode, TestAssetId } from 'fuels/test-utils'; -import { bench } from 'vitest'; +import { DEVNET_NETWORK_URL } from '@internal/utils'; +import type { TransferParams, TransactionCost } from 'fuels'; +import { Wallet, Provider, ScriptTransactionRequest, WalletUnlocked } from 'fuels'; +import { launchTestNode } from 'fuels/test-utils'; import type { CallTestContract } from '../test/typegen/contracts'; import { CallTestContractFactory } from '../test/typegen/contracts'; +import { isDevnet, runBenchmark } from './config'; + /** * @group node * @group browser @@ -15,22 +15,58 @@ import { CallTestContractFactory } from '../test/typegen/contracts'; describe('Cost Estimation Benchmarks', () => { let contract: CallTestContract; let provider: Provider; + let request: ScriptTransactionRequest; + let recipient: WalletUnlocked; + let receiver1: WalletUnlocked; + let receiver2: WalletUnlocked; + let receiver3: WalletUnlocked; + let sender: WalletUnlocked; let cleanup: () => void; - beforeEach(async () => { - const launched = await launchTestNode({ - contractsConfigs: [{ factory: CallTestContractFactory }], - }); - - cleanup = launched.cleanup; - contract = launched.contracts[0]; - provider = contract.provider; - }); - afterEach(() => { - cleanup(); + const setupTestEnvironment = async () => { + if (isDevnet) { + provider = await Provider.create(DEVNET_NETWORK_URL); + const wallet = new WalletUnlocked(process.env.DEVNET_WALLET_PVT_KEY as string, provider); + + const contractFactory = new CallTestContractFactory(wallet); + const { waitForResult } = await contractFactory.deploy(); + const { contract: deployedContract } = await waitForResult(); + contract = deployedContract; + } else { + const launched = await launchTestNode({ + contractsConfigs: [{ factory: CallTestContractFactory }], + }); + + cleanup = launched.cleanup; + contract = launched.contracts[0]; + provider = contract.provider; + } + + request = new ScriptTransactionRequest({ gasLimit: 1000000 }); + recipient = Wallet.generate({ provider }); + receiver1 = Wallet.generate({ provider }); + receiver2 = Wallet.generate({ provider }); + receiver3 = Wallet.generate({ provider }); + sender = Wallet.generate({ provider }); + }; + + beforeAll(setupTestEnvironment); + + afterAll(() => { + if (!isDevnet && cleanup) { + cleanup(); + } }); - bench( + const expectCostToBeDefined = (cost: TransactionCost) => { + expect(cost.minFee).toBeDefined(); + expect(cost.maxFee).toBeDefined(); + expect(cost.gasPrice).toBeDefined(); + expect(cost.gasUsed).toBeDefined(); + expect(cost.gasPrice).toBeDefined(); + }; + + runBenchmark( 'should successfully get transaction cost estimate for a single contract call', async () => { const cost = await contract.functions @@ -40,95 +76,78 @@ describe('Cost Estimation Benchmarks', () => { }) .getTransactionCost(); - expect(cost.minFee).toBeDefined(); - expect(cost.maxFee).toBeDefined(); - expect(cost.gasPrice).toBeDefined(); - expect(cost.gasUsed).toBeDefined(); - expect(cost.gasPrice).toBeDefined(); + expectCostToBeDefined(cost); } ); - bench('should successfully get transaction cost estimate for multi contract calls', async () => { - const invocationScope = contract.multiCall([ - contract.functions.return_context_amount().callParams({ - forward: [100, contract.provider.getBaseAssetId()], - }), - contract.functions.return_context_amount().callParams({ - forward: [200, TestAssetId.A.value], - }), - ]); - - const cost = await invocationScope.getTransactionCost(); - - expect(cost.minFee).toBeDefined(); - expect(cost.maxFee).toBeDefined(); - expect(cost.gasPrice).toBeDefined(); - expect(cost.gasUsed).toBeDefined(); - expect(cost.gasPrice).toBeDefined(); - }); - - bench('should successfully get transaction cost estimate for a single transfer', async () => { - const request = new ScriptTransactionRequest({ gasLimit: 1000000 }); + runBenchmark( + 'should successfully get transaction cost estimate for multi contract calls', + async () => { + const invocationScope = contract.multiCall([ + contract.functions.return_context_amount().callParams({ + forward: [100, provider.getBaseAssetId()], + }), + contract.functions.return_context_amount().callParams({ + forward: [200, provider.getBaseAssetId()], + }), + ]); + + const cost = await invocationScope.getTransactionCost(); + + expectCostToBeDefined(cost); + } + ); - const recipient = Wallet.generate({ - provider, - }); - const sender = Wallet.fromPrivateKey( - '0x30bb0bc68f5d2ec3b523cee5a65503031b40679d9c72280cd8088c2cfbc34e38', - provider - ); + runBenchmark( + 'should successfully get transaction cost estimate for a single transfer', + async () => { + request.addCoinOutput(recipient.address, 10, provider.getBaseAssetId()); - request.addCoinOutput(recipient.address, 10, provider.getBaseAssetId()); + const cost = await sender.getTransactionCost(request); - const cost = await sender.getTransactionCost(request); + expectCostToBeDefined(cost); + } + ); - expect(cost.minFee).toBeDefined(); - expect(cost.maxFee).toBeDefined(); - expect(cost.gasPrice).toBeDefined(); - expect(cost.gasUsed).toBeDefined(); - expect(cost.gasPrice).toBeDefined(); - }); + runBenchmark( + 'should successfully get transaction cost estimate for a batch transfer', + async () => { + const amountToTransfer1 = 989; + const amountToTransfer2 = 699; + const amountToTransfer3 = 122; + const transferParams: TransferParams[] = [ + { + destination: receiver1.address, + amount: amountToTransfer1, + assetId: provider.getBaseAssetId(), + }, + { + destination: receiver2.address, + amount: amountToTransfer2, + assetId: provider.getBaseAssetId(), + }, + { + destination: receiver3.address, + amount: amountToTransfer3, + assetId: provider.getBaseAssetId(), + }, + ]; - bench('should successfully get transaction cost estimate for a batch transfer', async () => { - const receiver1 = Wallet.generate({ provider }); - const receiver2 = Wallet.generate({ provider }); - const receiver3 = Wallet.generate({ provider }); - - const amountToTransfer1 = 989; - const amountToTransfer2 = 699; - const amountToTransfer3 = 122; - - const transferParams: TransferParams[] = [ - { - destination: receiver1.address, - amount: amountToTransfer1, - assetId: provider.getBaseAssetId(), - }, - { destination: receiver2.address, amount: amountToTransfer2, assetId: TestAssetId.A.value }, - { destination: receiver3.address, amount: amountToTransfer3, assetId: TestAssetId.B.value }, - ]; - - const cost = await contract.functions - .sum(40, 50) - .addBatchTransfer(transferParams) - .getTransactionCost(); + const cost = await contract.functions + .sum(40, 50) + .addBatchTransfer(transferParams) + .getTransactionCost(); - expect(cost.minFee).toBeDefined(); - expect(cost.maxFee).toBeDefined(); - expect(cost.gasPrice).toBeDefined(); - expect(cost.gasUsed).toBeDefined(); - expect(cost.gasPrice).toBeDefined(); - }); + expectCostToBeDefined(cost); + } + ); - it('should successfully get transaction cost estimate for a mint', async () => { + runBenchmark('should successfully get transaction cost estimate for a mint', async () => { const subId = '0x4a778acfad1abc155a009dc976d2cf0db6197d3d360194d74b1fb92b96986b00'; + const amountToMint = 1_000; - const cost = await contract.functions.mint_coins(subId, 1_000).getTransactionCost(); + const cost = await contract.functions.mint_coins(subId, amountToMint).getTransactionCost(); - expect(cost.minFee).toBeDefined(); - expect(cost.maxFee).toBeDefined(); - expect(cost.gasPrice).toBeDefined(); - expect(cost.gasUsed).toBeDefined(); - expect(cost.gasPrice).toBeDefined(); + expectCostToBeDefined(cost); }); }); diff --git a/internal/benchmarks/src/crypto.bench.ts b/internal/benchmarks/src/crypto.bench.ts deleted file mode 100644 index b65db42a17..0000000000 --- a/internal/benchmarks/src/crypto.bench.ts +++ /dev/null @@ -1,61 +0,0 @@ -/* eslint-disable import/no-extraneous-dependencies */ -import type { Keystore } from 'fuels'; -import { bufferFromString, pbkdf2, computeHmac, encrypt, decrypt } from 'fuels'; -import { bench } from 'vitest'; - -/** - * @group node - * @group browser - */ -describe('crypto bench', () => { - bench( - 'should correctly convert string to Uint8Array with base64 encoding in a node environment', - () => { - const string = 'aGVsbG8='; // "hello" in Base64 - bufferFromString(string, 'base64'); - } - ); - - bench('should compute the PBKDF2 hash', () => { - const passwordBuffer = bufferFromString(String('password123').normalize('NFKC'), 'utf-8'); - const saltBuffer = bufferFromString(String('salt456').normalize('NFKC'), 'utf-8'); - const iterations = 1000; - const keylen = 32; - const algo = 'sha256'; - - pbkdf2(passwordBuffer, saltBuffer, iterations, keylen, algo); - }); - - bench('should compute HMAC correctly', () => { - const key = '0x0102030405060708090a0b0c0d0e0f10'; - const data = '0x11121314151617181920212223242526'; - const sha256Length = 64; - const sha512Length = 128; - const prefix = '0x'; - - expect(computeHmac('sha256', key, data).length).toBe(sha256Length + prefix.length); - expect(computeHmac('sha512', key, data).length).toBe(sha512Length + prefix.length); - }); - - bench('Encrypt via aes-ctr', async () => { - const password = '0b540281-f87b-49ca-be37-2264c7f260f7'; - const data = { - name: 'test', - }; - - const encryptedResult = await encrypt(password, data); - expect(encryptedResult.data).toBeTruthy(); - expect(encryptedResult.iv).toBeTruthy(); - expect(encryptedResult.salt).toBeTruthy(); - }); - - bench('Decrypt via aes-ctr', async () => { - const password = '0b540281-f87b-49ca-be37-2264c7f260f7'; - const encryptedResult: Keystore = { - data: 'vj1/JyHR+NiIaWXTpl5T', - iv: '0/lqnRVK5HE/5b1cQAHfqg==', - salt: 'nHdHXW2EmOEagAH2UUDYMRNhd7LJ5XLIcZoVQZMPSlU=', - }; - await decrypt(password, encryptedResult); - }); -}); diff --git a/internal/benchmarks/src/transaction-results.bench.ts b/internal/benchmarks/src/transaction-results.bench.ts index d35f5fc323..c1916826a8 100644 --- a/internal/benchmarks/src/transaction-results.bench.ts +++ b/internal/benchmarks/src/transaction-results.bench.ts @@ -1,9 +1,9 @@ -/* eslint-disable import/no-extraneous-dependencies */ +import { DEVNET_NETWORK_URL } from '@internal/utils'; +import type { TransferParams } from 'fuels'; +import { Wallet, Provider, WalletUnlocked } from 'fuels'; +import { launchTestNode } from 'fuels/test-utils'; -import { Wallet } from 'fuels'; -import type { WalletUnlocked, TransferParams, Provider } from 'fuels'; -import { launchTestNode, TestAssetId } from 'fuels/test-utils'; -import { bench } from 'vitest'; +import { isDevnet, runBenchmark } from './config'; /** * @group node @@ -12,56 +12,62 @@ import { bench } from 'vitest'; describe('Transaction Submission Benchmarks', () => { let provider: Provider; let wallet: WalletUnlocked; - let walletA: WalletUnlocked; + let receiver1: WalletUnlocked; + let receiver2: WalletUnlocked; + let receiver3: WalletUnlocked; let cleanup: () => void; - beforeEach(async () => { - const launched = await launchTestNode(); - cleanup = launched.cleanup; - provider = launched.provider; - walletA = launched.wallets[0]; - wallet = launched.wallets[1]; + const setupTestEnvironment = async () => { + if (isDevnet) { + provider = await Provider.create(DEVNET_NETWORK_URL); + wallet = new WalletUnlocked(process.env.DEVNET_WALLET_PVT_KEY as string, provider); + } else { + const launched = await launchTestNode(); + cleanup = launched.cleanup; + provider = launched.provider; + wallet = launched.wallets[1]; + } + + receiver1 = Wallet.generate({ provider }); + receiver2 = Wallet.generate({ provider }); + receiver3 = Wallet.generate({ provider }); + }; + + beforeAll(setupTestEnvironment); + + afterAll(() => { + if (!isDevnet && cleanup) { + cleanup(); + } }); - afterEach(() => { - cleanup(); - }); - bench('should successfully transfer a single asset between wallets', async () => { - const receiver = Wallet.generate({ provider }); - - const tx = await walletA.transfer(receiver.address, 100, provider.getBaseAssetId()); - + const transfer = async () => { + const tx = await wallet.transfer(receiver1.address, 100, provider.getBaseAssetId()); const { isStatusSuccess } = await tx.waitForResult(); - expect(isStatusSuccess).toBeTruthy(); - }); - - bench('should successfully conduct a custom transfer between wallets', async () => { - const receiver = Wallet.generate({ provider }); + }; + const customTransfer = async () => { const txParams = { tip: 4, witnessLimit: 800, maxFee: 70_000, }; - const pendingTx = await wallet.transfer( - receiver.address, + receiver1.address, 500, provider.getBaseAssetId(), txParams ); - const { transaction } = await pendingTx.waitForResult(); - expect(transaction).toBeDefined(); - }); + }; + + runBenchmark('should successfully transfer a single asset between wallets', transfer); - bench('should successfully perform a batch transfer', async () => { - const receiver1 = Wallet.generate({ provider }); - const receiver2 = Wallet.generate({ provider }); - const receiver3 = Wallet.generate({ provider }); + runBenchmark('should successfully conduct a custom transfer between wallets', customTransfer); + runBenchmark('should successfully perform a batch transfer', async () => { const amountToTransfer1 = 989; const amountToTransfer2 = 699; const amountToTransfer3 = 122; @@ -72,28 +78,30 @@ describe('Transaction Submission Benchmarks', () => { amount: amountToTransfer1, assetId: provider.getBaseAssetId(), }, - { destination: receiver2.address, amount: amountToTransfer2, assetId: TestAssetId.A.value }, - { destination: receiver3.address, amount: amountToTransfer3, assetId: TestAssetId.B.value }, + { + destination: receiver2.address, + amount: amountToTransfer2, + assetId: provider.getBaseAssetId(), + }, + { + destination: receiver3.address, + amount: amountToTransfer3, + assetId: provider.getBaseAssetId(), + }, ]; const tx = await wallet.batchTransfer(transferParams); - const { isStatusSuccess } = await tx.waitForResult(); - expect(isStatusSuccess).toBeTruthy(); }); - bench('should successfully withdraw to the base layer', async () => { - const receiver = Wallet.generate({ provider }); - + runBenchmark('should successfully withdraw to the base layer', async () => { const txParams = { witnessLimit: 800, maxFee: 100_000, }; - - const pendingTx = await wallet.withdrawToBaseLayer(receiver.address, 500, txParams); + const pendingTx = await wallet.withdrawToBaseLayer(receiver1.address, 500, txParams); const { transaction } = await pendingTx.waitForResult(); - expect(transaction).toBeDefined(); }); }); diff --git a/internal/benchmarks/src/wallet.bench.ts b/internal/benchmarks/src/wallet.bench.ts index ff16cc2b1b..123dc4d5a7 100644 --- a/internal/benchmarks/src/wallet.bench.ts +++ b/internal/benchmarks/src/wallet.bench.ts @@ -1,9 +1,12 @@ /* eslint-disable import/no-extraneous-dependencies */ -import { WalletLocked, WalletUnlocked, Wallet } from 'fuels'; +import { DEVNET_NETWORK_URL } from '@internal/utils'; +import { Provider, WalletLocked, WalletUnlocked, Wallet } from 'fuels'; import { launchTestNode } from 'fuels/test-utils'; import { bench } from 'vitest'; +import { isDevnet } from './config'; + const expectedPrivateKey = '0x5f70feeff1f229e4a95e1056e8b4d80d0b24b565674860cc213bdb07127ce1b1'; const expectedPublicKey = '0x2f34bc0df4db0ec391792cedb05768832b49b1aa3a2dd8c30054d1af00f67d00b74b7acbbf3087c8e0b1a4c343db50aa471d21f278ff5ce09f07795d541fb47e'; @@ -15,29 +18,40 @@ const expectedLockedAddress = 'fuel1tac0aml37g57f227zptw3dxcp59jfdt9vayxpnpp80ds * @group browser */ describe('Wallet Benchmarks', () => { - bench('Instantiate a new Unlocked wallet', async () => { - using launched = await launchTestNode(); - const { provider } = launched; + let cleanup: () => void; + let provider: Provider; + + const setupTestEnvironment = async () => { + if (isDevnet) { + provider = await Provider.create(DEVNET_NETWORK_URL); + } else { + const launched = await launchTestNode(); + cleanup = launched.cleanup; + provider = launched.provider; + } + }; + + beforeAll(setupTestEnvironment); + + afterAll(() => { + if (!isDevnet && cleanup) { + cleanup(); + } + }); + bench('Instantiate a new Unlocked wallet', () => { const unlockedWallet = new WalletUnlocked(expectedPrivateKey, provider); - expect(unlockedWallet.publicKey).toEqual(expectedPublicKey); expect(unlockedWallet.address.toAddress()).toEqual(expectedAddress); }); - bench('Instantiate from a constructor', async () => { - using launched = await launchTestNode(); - const { provider } = launched; + bench('Instantiate a new Locked wallet from a constructor', () => { const lockedWallet = new WalletLocked(expectedPrivateKey, provider); - expect(lockedWallet.address.toAddress()).toEqual(expectedLockedAddress); }); - bench('Instantiate from an address', async () => { - using launched = await launchTestNode(); - const { provider } = launched; + bench('Instantiate from an address', () => { const lockedWallet = Wallet.fromAddress(expectedAddress, provider); - expect(lockedWallet.address.toAddress()).toEqual(expectedAddress); expect(lockedWallet).toBeInstanceOf(WalletLocked); }); diff --git a/internal/benchmarks/test/fixtures/forc-projects/Forc.toml b/internal/benchmarks/test/fixtures/forc-projects/Forc.toml index 2db5c4ff42..36733197e5 100644 --- a/internal/benchmarks/test/fixtures/forc-projects/Forc.toml +++ b/internal/benchmarks/test/fixtures/forc-projects/Forc.toml @@ -1,2 +1,2 @@ [workspace] -members = ["call-test-contract", "counter-contract"] +members = ["call-test-contract", "counter-contract", "large-contract"] diff --git a/internal/benchmarks/test/fixtures/forc-projects/large-contract/Forc.toml b/internal/benchmarks/test/fixtures/forc-projects/large-contract/Forc.toml new file mode 100644 index 0000000000..09e85255d6 --- /dev/null +++ b/internal/benchmarks/test/fixtures/forc-projects/large-contract/Forc.toml @@ -0,0 +1,7 @@ +[project] +authors = ["Fuel Labs "] +entry = "main.sw" +license = "Apache-2.0" +name = "large-contract" + +[dependencies] diff --git a/internal/benchmarks/test/fixtures/forc-projects/large-contract/src/main.sw b/internal/benchmarks/test/fixtures/forc-projects/large-contract/src/main.sw new file mode 100644 index 0000000000..3dc4af3d05 --- /dev/null +++ b/internal/benchmarks/test/fixtures/forc-projects/large-contract/src/main.sw @@ -0,0 +1,14 @@ +contract; + +abi MyContract { + fn something() -> u64; +} + +impl MyContract for Contract { + fn something() -> u64 { + asm() { + blob i450000; + } + 1001 + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 79a560abb4..cc32d5cc43 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -103,7 +103,7 @@ importers: version: 3.2.0(eslint@8.57.0) eslint-plugin-import: specifier: ^2.29.1 - version: 2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + version: 2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.6.2))(eslint@8.57.0) eslint-plugin-jsdoc: specifier: ^46.8.2 version: 46.8.2(eslint@8.57.0) @@ -163,7 +163,7 @@ importers: version: 0.1.1 tsup: specifier: ^6.7.0 - version: 6.7.0(@swc/core@1.7.14)(postcss@8.4.47)(ts-node@10.9.1(@swc/core@1.7.14)(@types/node@22.5.5)(typescript@5.6.2))(typescript@5.6.2) + version: 6.7.0(@swc/core@1.7.14(@swc/helpers@0.5.12))(postcss@8.4.47)(ts-node@10.9.1(@swc/core@1.7.14(@swc/helpers@0.5.12))(@types/node@22.5.5)(typescript@5.6.2))(typescript@5.6.2) tsx: specifier: ^4.19.1 version: 4.19.1 @@ -266,7 +266,7 @@ importers: version: 8.4.47 tailwindcss: specifier: ^3.4.12 - version: 3.4.13(ts-node@10.9.1(@swc/core@1.7.14)(@types/node@22.5.5)(typescript@5.6.2)) + version: 3.4.13(ts-node@10.9.1(@swc/core@1.7.14(@swc/helpers@0.5.12))(@types/node@22.5.5)(typescript@5.6.2)) typescript: specifier: ~5.6.2 version: 5.6.2 @@ -363,7 +363,7 @@ importers: version: 18.3.0 eslint-config-react-app: specifier: ^7.0.1 - version: 7.0.1(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.22.5))(@babel/plugin-transform-react-jsx@7.25.2(@babel/core@7.22.5))(eslint@9.9.1(jiti@1.21.6))(jest@27.5.1(bufferutil@4.0.8)(ts-node@10.9.1(@swc/core@1.7.14)(@types/node@22.5.5)(typescript@5.6.2))(utf-8-validate@5.0.10))(typescript@5.6.2) + version: 7.0.1(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.22.5))(@babel/plugin-transform-react-jsx@7.25.2(@babel/core@7.22.5))(eslint@9.9.1(jiti@1.21.6))(jest@27.5.1(bufferutil@4.0.8)(ts-node@10.9.1(@swc/core@1.7.14(@swc/helpers@0.5.12))(@types/node@22.5.5)(typescript@5.6.2))(utf-8-validate@5.0.10))(typescript@5.6.2) fuels: specifier: workspace:* version: link:../../packages/fuels @@ -375,7 +375,7 @@ importers: version: 18.3.1(react@18.3.1) react-scripts: specifier: 5.0.1 - version: 5.0.1(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.22.5))(@babel/plugin-transform-react-jsx@7.25.2(@babel/core@7.22.5))(@swc/core@1.7.14)(@types/babel__core@7.20.5)(bufferutil@4.0.8)(esbuild@0.17.19)(eslint@9.9.1(jiti@1.21.6))(react@18.3.1)(ts-node@10.9.1(@swc/core@1.7.14)(@types/node@22.5.5)(typescript@5.6.2))(type-fest@3.1.0)(typescript@5.6.2)(utf-8-validate@5.0.10) + version: 5.0.1(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.22.5))(@babel/plugin-transform-react-jsx@7.25.2(@babel/core@7.22.5))(@swc/core@1.7.14(@swc/helpers@0.5.12))(@types/babel__core@7.20.5)(bufferutil@4.0.8)(esbuild@0.17.19)(eslint@9.9.1(jiti@1.21.6))(react@18.3.1)(ts-node@10.9.1(@swc/core@1.7.14(@swc/helpers@0.5.12))(@types/node@22.5.5)(typescript@5.6.2))(type-fest@3.1.0)(typescript@5.6.2)(utf-8-validate@5.0.10) typescript: specifier: ~5.6.2 version: 5.6.2 @@ -496,7 +496,7 @@ importers: version: 6.0.1(jiti@1.21.6)(postcss@8.4.47)(tsx@4.19.1)(yaml@2.5.1) tailwindcss: specifier: ^3.4.12 - version: 3.4.13(ts-node@10.9.1(@swc/core@1.7.14)(@types/node@22.5.5)(typescript@5.6.2)) + version: 3.4.13(ts-node@10.9.1(@swc/core@1.7.14(@swc/helpers@0.5.12))(@types/node@22.5.5)(typescript@5.6.2)) typescript: specifier: ~5.6.2 version: 5.6.2 @@ -583,6 +583,9 @@ importers: internal/benchmarks: dependencies: + '@internal/utils': + specifier: workspace:* + version: link:../utils fuels: specifier: workspace:* version: link:../../packages/fuels @@ -1316,7 +1319,7 @@ importers: version: 8.4.47 tailwindcss: specifier: ^3.4.12 - version: 3.4.13(ts-node@10.9.1(@swc/core@1.7.14)(@types/node@22.5.5)(typescript@5.6.2)) + version: 3.4.13(ts-node@10.9.1(@swc/core@1.7.14(@swc/helpers@0.5.12))(@types/node@22.5.5)(typescript@5.6.2)) typescript: specifier: ~5.6.2 version: 5.6.2 @@ -1398,7 +1401,7 @@ importers: version: 8.4.47 tailwindcss: specifier: ^3.4.12 - version: 3.4.13(ts-node@10.9.1(@swc/core@1.7.14)(@types/node@22.7.4)(typescript@5.6.2)) + version: 3.4.13(ts-node@10.9.1(@swc/core@1.7.14(@swc/helpers@0.5.12))(@types/node@22.7.4)(typescript@5.6.2)) typescript: specifier: ~5.6.2 version: 5.6.2 @@ -3997,10 +4000,6 @@ packages: resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} engines: {node: '>=6.0.0'} - '@jridgewell/resolve-uri@3.1.0': - resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} - engines: {node: '>=6.0.0'} - '@jridgewell/resolve-uri@3.1.2': resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} @@ -4015,15 +4014,9 @@ packages: '@jridgewell/source-map@0.3.6': resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} - '@jridgewell/sourcemap-codec@1.4.14': - resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} - '@jridgewell/sourcemap-codec@1.5.0': resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} - '@jridgewell/trace-mapping@0.3.18': - resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==} - '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} @@ -5006,6 +4999,9 @@ packages: cpu: [x64] os: [win32] + '@rtsao/scc@1.1.0': + resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} + '@rushstack/eslint-patch@1.3.2': resolution: {integrity: sha512-V+MvGwaHH03hYhY+k6Ef/xKd6RYlc4q8WBx+2ANmipHJcKuktNcI/NgEsJgdSUF6Lw32njT6OnrRsKYCdgHjYw==} @@ -5537,8 +5533,8 @@ packages: '@types/estree@0.0.39': resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} - '@types/estree@1.0.1': - resolution: {integrity: sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==} + '@types/estree@1.0.5': + resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} '@types/estree@1.0.6': resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} @@ -6649,11 +6645,6 @@ packages: engines: {node: '>=0.4.0'} hasBin: true - acorn@8.9.0: - resolution: {integrity: sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==} - engines: {node: '>=0.4.0'} - hasBin: true - address@1.2.2: resolution: {integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==} engines: {node: '>= 10.0.0'} @@ -6864,6 +6855,10 @@ packages: resolution: {integrity: sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==} engines: {node: '>= 0.4'} + array.prototype.findlastindex@1.2.5: + resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} + engines: {node: '>= 0.4'} + array.prototype.flat@1.3.2: resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} engines: {node: '>= 0.4'} @@ -7333,7 +7328,6 @@ packages: bun@1.1.29: resolution: {integrity: sha512-SKhpyKNZtgxrVel9ec9xon3LDv8mgpiuFhARgcJo1YIbggY2PBrKHRNiwQ6Qlb+x3ivmRurfuwWgwGexjpgBRg==} - cpu: [arm64, x64] os: [darwin, linux, win32] hasBin: true @@ -8904,6 +8898,27 @@ packages: eslint: '*' eslint-plugin-import: '*' + eslint-module-utils@2.11.0: + resolution: {integrity: sha512-gbBE5Hitek/oG6MUVj6sFuzEjA/ClzNflVrLovHi/JgLdC7fiN5gLAY1WIPW1a0V5I999MnsrvVrCOGmmVqDBQ==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + eslint-module-utils@2.8.0: resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} engines: {node: '>=4'} @@ -8949,6 +8964,16 @@ packages: '@typescript-eslint/parser': optional: true + eslint-plugin-import@2.30.0: + resolution: {integrity: sha512-/mHNE9jINJfiD2EKkg1BKyPyUk4zdnT54YgbOgfjSakWT5oyX/qQLVNTkehyfpcMxZXMy1zyonZ2v7hZTX43Yw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint-plugin-jest@25.7.0: resolution: {integrity: sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} @@ -9452,8 +9477,8 @@ packages: focus-trap@7.5.4: resolution: {integrity: sha512-N7kHdlgsO/v+iD/dMoJKtsSqs5Dz/dXZVebRgJw23LDk+jMi/974zyiOYDziY2JPp8xivq9BmUGwIJMiuSBi7w==} - follow-redirects@1.15.2: - resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==} + follow-redirects@1.15.8: + resolution: {integrity: sha512-xgrmBhBToVKay1q2Tao5LI26B83UhrB/vM1avwVSDzt8rx3rO6AizBAaF46EgksTVr+rFTQaqZZ9MVBfUe4nig==} engines: {node: '>=4.0'} peerDependencies: debug: '*' @@ -10328,6 +10353,10 @@ packages: resolution: {integrity: sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==} engines: {node: '>= 0.4'} + is-core-module@2.15.1: + resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} + engines: {node: '>= 0.4'} + is-data-view@1.0.1: resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} engines: {node: '>= 0.4'} @@ -12146,6 +12175,10 @@ packages: object.groupby@1.0.1: resolution: {integrity: sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==} + object.groupby@1.0.3: + resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} + engines: {node: '>= 0.4'} + object.values@1.2.0: resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} engines: {node: '>= 0.4'} @@ -13274,7 +13307,6 @@ packages: engines: {node: '>=0.6.0', teleport: '>=0.2.0'} deprecated: |- You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other. - (For a CapTP with native promises, see @endo/eventual-send and @endo/captp) qr-code-styling@1.6.0-rc.1: @@ -13936,10 +13968,6 @@ packages: select-hose@2.0.0: resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==} - selfsigned@2.1.1: - resolution: {integrity: sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==} - engines: {node: '>=10'} - selfsigned@2.4.1: resolution: {integrity: sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==} engines: {node: '>=10'} @@ -20355,7 +20383,7 @@ snapshots: jest-util: 28.1.3 slash: 3.0.0 - '@jest/core@27.5.1(bufferutil@4.0.8)(ts-node@10.9.1(@swc/core@1.7.14)(@types/node@22.5.5)(typescript@5.6.2))(utf-8-validate@5.0.10)': + '@jest/core@27.5.1(bufferutil@4.0.8)(ts-node@10.9.1(@swc/core@1.7.14(@swc/helpers@0.5.12))(@types/node@22.5.5)(typescript@5.6.2))(utf-8-validate@5.0.10)': dependencies: '@jest/console': 27.5.1 '@jest/reporters': 27.5.1 @@ -20369,7 +20397,7 @@ snapshots: exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 27.5.1 - jest-config: 27.5.1(bufferutil@4.0.8)(ts-node@10.9.1(@swc/core@1.7.14)(@types/node@22.5.5)(typescript@5.6.2))(utf-8-validate@5.0.10) + jest-config: 27.5.1(bufferutil@4.0.8)(ts-node@10.9.1(@swc/core@1.7.14(@swc/helpers@0.5.12))(@types/node@22.5.5)(typescript@5.6.2))(utf-8-validate@5.0.10) jest-haste-map: 27.5.1 jest-message-util: 27.5.1 jest-regex-util: 27.5.1 @@ -20590,8 +20618,6 @@ snapshots: '@jridgewell/sourcemap-codec': 1.5.0 '@jridgewell/trace-mapping': 0.3.25 - '@jridgewell/resolve-uri@3.1.0': {} - '@jridgewell/resolve-uri@3.1.2': {} '@jridgewell/set-array@1.2.1': {} @@ -20606,15 +20632,8 @@ snapshots: '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 - '@jridgewell/sourcemap-codec@1.4.14': {} - '@jridgewell/sourcemap-codec@1.5.0': {} - '@jridgewell/trace-mapping@0.3.18': - dependencies: - '@jridgewell/resolve-uri': 3.1.0 - '@jridgewell/sourcemap-codec': 1.4.14 - '@jridgewell/trace-mapping@0.3.25': dependencies: '@jridgewell/resolve-uri': 3.1.2 @@ -21254,7 +21273,7 @@ snapshots: dependencies: playwright: 1.47.2 - '@pmmmwh/react-refresh-webpack-plugin@0.5.10(react-refresh@0.11.0)(type-fest@3.1.0)(webpack-dev-server@4.15.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)(webpack@5.88.0(@swc/core@1.7.14)(esbuild@0.17.19)))(webpack@5.88.0(@swc/core@1.7.14)(esbuild@0.17.19))': + '@pmmmwh/react-refresh-webpack-plugin@0.5.10(react-refresh@0.11.0)(type-fest@3.1.0)(webpack-dev-server@4.15.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)(webpack@5.88.0(@swc/core@1.7.14(@swc/helpers@0.5.12))(esbuild@0.17.19)))(webpack@5.88.0(@swc/core@1.7.14(@swc/helpers@0.5.12))(esbuild@0.17.19))': dependencies: ansi-html-community: 0.0.8 common-path-prefix: 3.0.0 @@ -21266,10 +21285,10 @@ snapshots: react-refresh: 0.11.0 schema-utils: 3.3.0 source-map: 0.7.4 - webpack: 5.88.0(@swc/core@1.7.14)(esbuild@0.17.19) + webpack: 5.88.0(@swc/core@1.7.14(@swc/helpers@0.5.12))(esbuild@0.17.19) optionalDependencies: type-fest: 3.1.0 - webpack-dev-server: 4.15.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)(webpack@5.88.0(@swc/core@1.7.14)(esbuild@0.17.19)) + webpack-dev-server: 4.15.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)(webpack@5.88.0(@swc/core@1.7.14(@swc/helpers@0.5.12))(esbuild@0.17.19)) '@polka/url@1.0.0-next.24': {} @@ -21950,6 +21969,8 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.22.5': optional: true + '@rtsao/scc@1.1.0': {} + '@rushstack/eslint-patch@1.3.2': {} '@rushstack/eslint-patch@1.6.1': {} @@ -22349,7 +22370,7 @@ snapshots: '@swc/core-win32-x64-msvc@1.7.14': optional: true - '@swc/core@1.7.14': + '@swc/core@1.7.14(@swc/helpers@0.5.12)': dependencies: '@swc/counter': 0.1.3 '@swc/types': 0.1.12 @@ -22364,6 +22385,7 @@ snapshots: '@swc/core-win32-arm64-msvc': 1.7.14 '@swc/core-win32-ia32-msvc': 1.7.14 '@swc/core-win32-x64-msvc': 1.7.14 + '@swc/helpers': 0.5.12 optional: true '@swc/counter@0.1.3': {} @@ -22679,7 +22701,7 @@ snapshots: '@types/estree@0.0.39': {} - '@types/estree@1.0.1': {} + '@types/estree@1.0.5': {} '@types/estree@1.0.6': {} @@ -23335,7 +23357,7 @@ snapshots: vite: 5.4.8(@types/node@22.7.4)(terser@5.34.1) vue: 3.5.10(typescript@5.6.2) - '@vitest/browser@2.0.5(bufferutil@4.0.8)(playwright@1.47.2)(typescript@5.6.2)(utf-8-validate@5.0.10)(vitest@2.0.5)(webdriverio@9.0.9(bufferutil@4.0.8)(utf-8-validate@6.0.4))': + '@vitest/browser@2.0.5(bufferutil@4.0.8)(playwright@1.47.2)(typescript@5.6.2)(utf-8-validate@5.0.10)(vitest@2.0.5)(webdriverio@9.0.9(bufferutil@4.0.8)(utf-8-validate@5.0.10))': dependencies: '@testing-library/dom': 10.4.0 '@testing-library/user-event': 14.5.2(@testing-library/dom@10.4.0) @@ -23347,7 +23369,7 @@ snapshots: ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) optionalDependencies: playwright: 1.47.2 - webdriverio: 9.0.9(bufferutil@4.0.8)(utf-8-validate@6.0.4) + webdriverio: 9.0.9(bufferutil@4.0.8)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - typescript @@ -24864,9 +24886,9 @@ snapshots: acorn: 7.4.1 acorn-walk: 7.2.0 - acorn-import-assertions@1.9.0(acorn@8.9.0): + acorn-import-assertions@1.9.0(acorn@8.12.1): dependencies: - acorn: 8.9.0 + acorn: 8.12.1 acorn-jsx@5.3.2(acorn@8.12.1): dependencies: @@ -24889,8 +24911,6 @@ snapshots: acorn@8.12.1: {} - acorn@8.9.0: {} - address@1.2.2: {} adjust-sourcemap-loader@4.0.0: @@ -25120,6 +25140,15 @@ snapshots: es-shim-unscopables: 1.0.2 get-intrinsic: 1.2.4 + array.prototype.findlastindex@1.2.5: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-shim-unscopables: 1.0.2 + array.prototype.flat@1.3.2: dependencies: call-bind: 1.0.7 @@ -25334,14 +25363,14 @@ snapshots: transitivePeerDependencies: - supports-color - babel-loader@8.3.0(@babel/core@7.22.5)(webpack@5.88.0(@swc/core@1.7.14)(esbuild@0.17.19)): + babel-loader@8.3.0(@babel/core@7.22.5)(webpack@5.88.0(@swc/core@1.7.14(@swc/helpers@0.5.12))(esbuild@0.17.19)): dependencies: '@babel/core': 7.22.5 find-cache-dir: 3.3.2 loader-utils: 2.0.4 make-dir: 3.1.0 schema-utils: 2.7.1 - webpack: 5.88.0(@swc/core@1.7.14)(esbuild@0.17.19) + webpack: 5.88.0(@swc/core@1.7.14(@swc/helpers@0.5.12))(esbuild@0.17.19) babel-plugin-istanbul@6.1.1: dependencies: @@ -26689,7 +26718,7 @@ snapshots: dependencies: hyphenate-style-name: 1.0.4 - css-loader@6.8.1(webpack@5.88.0(@swc/core@1.7.14)(esbuild@0.17.19)): + css-loader@6.8.1(webpack@5.88.0(@swc/core@1.7.14(@swc/helpers@0.5.12))(esbuild@0.17.19)): dependencies: icss-utils: 5.1.0(postcss@8.4.47) postcss: 8.4.47 @@ -26699,9 +26728,9 @@ snapshots: postcss-modules-values: 4.0.0(postcss@8.4.47) postcss-value-parser: 4.2.0 semver: 7.6.3 - webpack: 5.88.0(@swc/core@1.7.14)(esbuild@0.17.19) + webpack: 5.88.0(@swc/core@1.7.14(@swc/helpers@0.5.12))(esbuild@0.17.19) - css-minimizer-webpack-plugin@3.4.1(esbuild@0.17.19)(webpack@5.88.0(@swc/core@1.7.14)(esbuild@0.17.19)): + css-minimizer-webpack-plugin@3.4.1(esbuild@0.17.19)(webpack@5.88.0(@swc/core@1.7.14(@swc/helpers@0.5.12))(esbuild@0.17.19)): dependencies: cssnano: 5.1.15(postcss@8.4.47) jest-worker: 27.5.1 @@ -26709,7 +26738,7 @@ snapshots: schema-utils: 4.2.0 serialize-javascript: 6.0.1 source-map: 0.6.1 - webpack: 5.88.0(@swc/core@1.7.14)(esbuild@0.17.19) + webpack: 5.88.0(@swc/core@1.7.14(@swc/helpers@0.5.12))(esbuild@0.17.19) optionalDependencies: esbuild: 0.17.19 @@ -27765,7 +27794,7 @@ snapshots: dependencies: confusing-browser-globals: 1.0.11 eslint: 8.57.0 - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.6.2))(eslint@8.57.0) object.assign: 4.1.4 object.entries: 1.1.6 semver: 6.3.0 @@ -27776,7 +27805,7 @@ snapshots: '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.6.2) eslint: 8.57.0 eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.6.2))(eslint@8.57.0))(eslint@8.57.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.6.2))(eslint@8.57.0) eslint-config-next@14.2.13(eslint@8.57.0)(typescript@5.6.2): dependencies: @@ -27786,8 +27815,8 @@ snapshots: '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.6.2) eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.6.2))(eslint@8.57.0))(eslint@8.57.0) + eslint-plugin-import: 2.30.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.6.2))(eslint@8.57.0))(eslint@8.57.0))(eslint@8.57.0) eslint-plugin-jsx-a11y: 6.9.0(eslint@8.57.0) eslint-plugin-react: 7.35.0(eslint@8.57.0) eslint-plugin-react-hooks: 4.6.2(eslint@8.57.0) @@ -27801,7 +27830,7 @@ snapshots: dependencies: eslint: 8.57.0 - eslint-config-react-app@7.0.1(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.22.5))(@babel/plugin-transform-react-jsx@7.25.2(@babel/core@7.22.5))(eslint@9.9.1(jiti@1.21.6))(jest@27.5.1(bufferutil@4.0.8)(ts-node@10.9.1(@swc/core@1.7.14)(@types/node@22.5.5)(typescript@5.6.2))(utf-8-validate@5.0.10))(typescript@5.6.2): + eslint-config-react-app@7.0.1(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.22.5))(@babel/plugin-transform-react-jsx@7.25.2(@babel/core@7.22.5))(eslint@9.9.1(jiti@1.21.6))(jest@27.5.1(bufferutil@4.0.8)(ts-node@10.9.1(@swc/core@1.7.14(@swc/helpers@0.5.12))(@types/node@22.5.5)(typescript@5.6.2))(utf-8-validate@5.0.10))(typescript@5.6.2): dependencies: '@babel/core': 7.22.5 '@babel/eslint-parser': 7.22.5(@babel/core@7.22.5)(eslint@9.9.1(jiti@1.21.6)) @@ -27813,7 +27842,7 @@ snapshots: eslint: 9.9.1(jiti@1.21.6) eslint-plugin-flowtype: 8.0.3(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.22.5))(@babel/plugin-transform-react-jsx@7.25.2(@babel/core@7.22.5))(eslint@9.9.1(jiti@1.21.6)) eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.59.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2))(eslint@9.9.1(jiti@1.21.6)) - eslint-plugin-jest: 25.7.0(@typescript-eslint/eslint-plugin@5.59.0(@typescript-eslint/parser@5.59.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2))(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2))(eslint@9.9.1(jiti@1.21.6))(jest@27.5.1(bufferutil@4.0.8)(ts-node@10.9.1(@swc/core@1.7.14)(@types/node@22.5.5)(typescript@5.6.2))(utf-8-validate@5.0.10))(typescript@5.6.2) + eslint-plugin-jest: 25.7.0(@typescript-eslint/eslint-plugin@5.59.0(@typescript-eslint/parser@5.59.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2))(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2))(eslint@9.9.1(jiti@1.21.6))(jest@27.5.1(bufferutil@4.0.8)(ts-node@10.9.1(@swc/core@1.7.14(@swc/helpers@0.5.12))(@types/node@22.5.5)(typescript@5.6.2))(utf-8-validate@5.0.10))(typescript@5.6.2) eslint-plugin-jsx-a11y: 6.9.0(eslint@9.9.1(jiti@1.21.6)) eslint-plugin-react: 7.35.0(eslint@9.9.1(jiti@1.21.6)) eslint-plugin-react-hooks: 4.6.2(eslint@9.9.1(jiti@1.21.6)) @@ -27836,13 +27865,13 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0): + eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.6.2))(eslint@8.57.0))(eslint@8.57.0): dependencies: debug: 4.3.7(supports-color@5.5.0) enhanced-resolve: 5.17.1 eslint: 8.57.0 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + eslint-module-utils: 2.11.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.6.2))(eslint@8.57.0))(eslint@8.57.0))(eslint@8.57.0) + eslint-plugin-import: 2.30.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.6.2))(eslint@8.57.0))(eslint@8.57.0))(eslint@8.57.0) fast-glob: 3.3.2 get-tsconfig: 4.7.6 is-core-module: 2.15.0 @@ -27853,6 +27882,17 @@ snapshots: - eslint-import-resolver-webpack - supports-color + eslint-module-utils@2.11.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.6.2))(eslint@8.57.0))(eslint@8.57.0))(eslint@8.57.0): + dependencies: + debug: 3.2.7 + optionalDependencies: + '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.6.2) + eslint: 8.57.0 + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.6.2))(eslint@8.57.0))(eslint@8.57.0) + transitivePeerDependencies: + - supports-color + eslint-module-utils@2.8.0(@typescript-eslint/parser@5.59.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint@9.9.1(jiti@1.21.6)): dependencies: debug: 3.2.7 @@ -27863,14 +27903,13 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.8.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0): + eslint-module-utils@2.8.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint@8.57.0): dependencies: debug: 3.2.7 optionalDependencies: '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.6.2) eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0) transitivePeerDependencies: - supports-color @@ -27915,7 +27954,7 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): + eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.6.2))(eslint@8.57.0): dependencies: array-includes: 3.1.8 array.prototype.findlastindex: 1.2.3 @@ -27925,7 +27964,7 @@ snapshots: doctrine: 2.1.0 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint@8.57.0) hasown: 2.0.2 is-core-module: 2.15.0 is-glob: 4.0.3 @@ -27942,13 +27981,41 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-plugin-jest@25.7.0(@typescript-eslint/eslint-plugin@5.59.0(@typescript-eslint/parser@5.59.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2))(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2))(eslint@9.9.1(jiti@1.21.6))(jest@27.5.1(bufferutil@4.0.8)(ts-node@10.9.1(@swc/core@1.7.14)(@types/node@22.5.5)(typescript@5.6.2))(utf-8-validate@5.0.10))(typescript@5.6.2): + eslint-plugin-import@2.30.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.6.2))(eslint@8.57.0))(eslint@8.57.0))(eslint@8.57.0): + dependencies: + '@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: 8.57.0 + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.11.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.6.2))(eslint@8.57.0))(eslint@8.57.0))(eslint@8.57.0) + hasown: 2.0.2 + is-core-module: 2.15.1 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.0 + semver: 6.3.1 + tsconfig-paths: 3.15.0 + optionalDependencies: + '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.6.2) + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + + eslint-plugin-jest@25.7.0(@typescript-eslint/eslint-plugin@5.59.0(@typescript-eslint/parser@5.59.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2))(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2))(eslint@9.9.1(jiti@1.21.6))(jest@27.5.1(bufferutil@4.0.8)(ts-node@10.9.1(@swc/core@1.7.14(@swc/helpers@0.5.12))(@types/node@22.5.5)(typescript@5.6.2))(utf-8-validate@5.0.10))(typescript@5.6.2): dependencies: '@typescript-eslint/experimental-utils': 5.60.1(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) eslint: 9.9.1(jiti@1.21.6) optionalDependencies: '@typescript-eslint/eslint-plugin': 5.59.0(@typescript-eslint/parser@5.59.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2))(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2) - jest: 27.5.1(bufferutil@4.0.8)(ts-node@10.9.1(@swc/core@1.7.14)(@types/node@22.5.5)(typescript@5.6.2))(utf-8-validate@5.0.10) + jest: 27.5.1(bufferutil@4.0.8)(ts-node@10.9.1(@swc/core@1.7.14(@swc/helpers@0.5.12))(@types/node@22.5.5)(typescript@5.6.2))(utf-8-validate@5.0.10) transitivePeerDependencies: - supports-color - typescript @@ -28108,7 +28175,7 @@ snapshots: eslint-visitor-keys@4.1.0: {} - eslint-webpack-plugin@3.2.0(eslint@9.9.1(jiti@1.21.6))(webpack@5.88.0(@swc/core@1.7.14)(esbuild@0.17.19)): + eslint-webpack-plugin@3.2.0(eslint@9.9.1(jiti@1.21.6))(webpack@5.88.0(@swc/core@1.7.14(@swc/helpers@0.5.12))(esbuild@0.17.19)): dependencies: '@types/eslint': 8.40.2 eslint: 9.9.1(jiti@1.21.6) @@ -28116,7 +28183,7 @@ snapshots: micromatch: 4.0.8 normalize-path: 3.0.0 schema-utils: 4.2.0 - webpack: 5.88.0(@swc/core@1.7.14)(esbuild@0.17.19) + webpack: 5.88.0(@swc/core@1.7.14(@swc/helpers@0.5.12))(esbuild@0.17.19) eslint@8.57.0: dependencies: @@ -28577,11 +28644,11 @@ snapshots: dependencies: flat-cache: 4.0.1 - file-loader@6.2.0(webpack@5.88.0(@swc/core@1.7.14)(esbuild@0.17.19)): + file-loader@6.2.0(webpack@5.88.0(@swc/core@1.7.14(@swc/helpers@0.5.12))(esbuild@0.17.19)): dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 5.88.0(@swc/core@1.7.14)(esbuild@0.17.19) + webpack: 5.88.0(@swc/core@1.7.14(@swc/helpers@0.5.12))(esbuild@0.17.19) file-uri-to-path@1.0.0: {} @@ -28696,7 +28763,7 @@ snapshots: dependencies: tabbable: 6.2.0 - follow-redirects@1.15.2: {} + follow-redirects@1.15.8: {} follow-redirects@1.15.9: {} @@ -28721,7 +28788,7 @@ snapshots: forever-agent@0.6.1: {} - fork-ts-checker-webpack-plugin@6.5.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2)(webpack@5.88.0(@swc/core@1.7.14)(esbuild@0.17.19)): + fork-ts-checker-webpack-plugin@6.5.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2)(webpack@5.88.0(@swc/core@1.7.14(@swc/helpers@0.5.12))(esbuild@0.17.19)): dependencies: '@babel/code-frame': 7.24.7 '@types/json-schema': 7.0.12 @@ -28737,7 +28804,7 @@ snapshots: semver: 7.6.3 tapable: 1.1.3 typescript: 5.6.2 - webpack: 5.88.0(@swc/core@1.7.14)(esbuild@0.17.19) + webpack: 5.88.0(@swc/core@1.7.14(@swc/helpers@0.5.12))(esbuild@0.17.19) optionalDependencies: eslint: 9.9.1(jiti@1.21.6) @@ -29301,14 +29368,14 @@ snapshots: relateurl: 0.2.7 terser: 5.18.2 - html-webpack-plugin@5.5.3(webpack@5.88.0(@swc/core@1.7.14)(esbuild@0.17.19)): + html-webpack-plugin@5.5.3(webpack@5.88.0(@swc/core@1.7.14(@swc/helpers@0.5.12))(esbuild@0.17.19)): dependencies: '@types/html-minifier-terser': 6.1.0 html-minifier-terser: 6.1.0 lodash: 4.17.21 pretty-error: 4.0.0 tapable: 2.2.1 - webpack: 5.88.0(@swc/core@1.7.14)(esbuild@0.17.19) + webpack: 5.88.0(@swc/core@1.7.14(@swc/helpers@0.5.12))(esbuild@0.17.19) htmlescape@1.1.1: {} @@ -29386,7 +29453,7 @@ snapshots: http-proxy@1.18.1: dependencies: eventemitter3: 4.0.7 - follow-redirects: 1.15.2 + follow-redirects: 1.15.8 requires-port: 1.0.0 transitivePeerDependencies: - debug @@ -29693,6 +29760,10 @@ snapshots: dependencies: hasown: 2.0.2 + is-core-module@2.15.1: + dependencies: + hasown: 2.0.2 + is-data-view@1.0.1: dependencies: is-typed-array: 1.1.13 @@ -30055,16 +30126,16 @@ snapshots: transitivePeerDependencies: - supports-color - jest-cli@27.5.1(bufferutil@4.0.8)(ts-node@10.9.1(@swc/core@1.7.14)(@types/node@22.5.5)(typescript@5.6.2))(utf-8-validate@5.0.10): + jest-cli@27.5.1(bufferutil@4.0.8)(ts-node@10.9.1(@swc/core@1.7.14(@swc/helpers@0.5.12))(@types/node@22.5.5)(typescript@5.6.2))(utf-8-validate@5.0.10): dependencies: - '@jest/core': 27.5.1(bufferutil@4.0.8)(ts-node@10.9.1(@swc/core@1.7.14)(@types/node@22.5.5)(typescript@5.6.2))(utf-8-validate@5.0.10) + '@jest/core': 27.5.1(bufferutil@4.0.8)(ts-node@10.9.1(@swc/core@1.7.14(@swc/helpers@0.5.12))(@types/node@22.5.5)(typescript@5.6.2))(utf-8-validate@5.0.10) '@jest/test-result': 27.5.1 '@jest/types': 27.5.1 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 import-local: 3.1.0 - jest-config: 27.5.1(bufferutil@4.0.8)(ts-node@10.9.1(@swc/core@1.7.14)(@types/node@22.5.5)(typescript@5.6.2))(utf-8-validate@5.0.10) + jest-config: 27.5.1(bufferutil@4.0.8)(ts-node@10.9.1(@swc/core@1.7.14(@swc/helpers@0.5.12))(@types/node@22.5.5)(typescript@5.6.2))(utf-8-validate@5.0.10) jest-util: 27.5.1 jest-validate: 27.5.1 prompts: 2.4.2 @@ -30076,7 +30147,7 @@ snapshots: - ts-node - utf-8-validate - jest-config@27.5.1(bufferutil@4.0.8)(ts-node@10.9.1(@swc/core@1.7.14)(@types/node@22.5.5)(typescript@5.6.2))(utf-8-validate@5.0.10): + jest-config@27.5.1(bufferutil@4.0.8)(ts-node@10.9.1(@swc/core@1.7.14(@swc/helpers@0.5.12))(@types/node@22.5.5)(typescript@5.6.2))(utf-8-validate@5.0.10): dependencies: '@babel/core': 7.25.2 '@jest/test-sequencer': 27.5.1 @@ -30103,7 +30174,7 @@ snapshots: slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - ts-node: 10.9.1(@swc/core@1.7.14)(@types/node@22.5.5)(typescript@5.6.2) + ts-node: 10.9.1(@swc/core@1.7.14(@swc/helpers@0.5.12))(@types/node@22.5.5)(typescript@5.6.2) transitivePeerDependencies: - bufferutil - canvas @@ -30440,11 +30511,11 @@ snapshots: leven: 3.1.0 pretty-format: 29.7.0 - jest-watch-typeahead@1.1.0(jest@27.5.1(bufferutil@4.0.8)(ts-node@10.9.1(@swc/core@1.7.14)(@types/node@22.5.5)(typescript@5.6.2))(utf-8-validate@5.0.10)): + jest-watch-typeahead@1.1.0(jest@27.5.1(bufferutil@4.0.8)(ts-node@10.9.1(@swc/core@1.7.14(@swc/helpers@0.5.12))(@types/node@22.5.5)(typescript@5.6.2))(utf-8-validate@5.0.10)): dependencies: ansi-escapes: 4.3.2 chalk: 4.1.2 - jest: 27.5.1(bufferutil@4.0.8)(ts-node@10.9.1(@swc/core@1.7.14)(@types/node@22.5.5)(typescript@5.6.2))(utf-8-validate@5.0.10) + jest: 27.5.1(bufferutil@4.0.8)(ts-node@10.9.1(@swc/core@1.7.14(@swc/helpers@0.5.12))(@types/node@22.5.5)(typescript@5.6.2))(utf-8-validate@5.0.10) jest-regex-util: 28.0.2 jest-watcher: 28.1.3 slash: 4.0.0 @@ -30497,11 +30568,11 @@ snapshots: merge-stream: 2.0.0 supports-color: 8.1.1 - jest@27.5.1(bufferutil@4.0.8)(ts-node@10.9.1(@swc/core@1.7.14)(@types/node@22.5.5)(typescript@5.6.2))(utf-8-validate@5.0.10): + jest@27.5.1(bufferutil@4.0.8)(ts-node@10.9.1(@swc/core@1.7.14(@swc/helpers@0.5.12))(@types/node@22.5.5)(typescript@5.6.2))(utf-8-validate@5.0.10): dependencies: - '@jest/core': 27.5.1(bufferutil@4.0.8)(ts-node@10.9.1(@swc/core@1.7.14)(@types/node@22.5.5)(typescript@5.6.2))(utf-8-validate@5.0.10) + '@jest/core': 27.5.1(bufferutil@4.0.8)(ts-node@10.9.1(@swc/core@1.7.14(@swc/helpers@0.5.12))(@types/node@22.5.5)(typescript@5.6.2))(utf-8-validate@5.0.10) import-local: 3.1.0 - jest-cli: 27.5.1(bufferutil@4.0.8)(ts-node@10.9.1(@swc/core@1.7.14)(@types/node@22.5.5)(typescript@5.6.2))(utf-8-validate@5.0.10) + jest-cli: 27.5.1(bufferutil@4.0.8)(ts-node@10.9.1(@swc/core@1.7.14(@swc/helpers@0.5.12))(@types/node@22.5.5)(typescript@5.6.2))(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - canvas @@ -31565,10 +31636,10 @@ snapshots: mimic-response@1.0.1: {} - mini-css-extract-plugin@2.7.6(webpack@5.88.0(@swc/core@1.7.14)(esbuild@0.17.19)): + mini-css-extract-plugin@2.7.6(webpack@5.88.0(@swc/core@1.7.14(@swc/helpers@0.5.12))(esbuild@0.17.19)): dependencies: schema-utils: 4.2.0 - webpack: 5.88.0(@swc/core@1.7.14)(esbuild@0.17.19) + webpack: 5.88.0(@swc/core@1.7.14(@swc/helpers@0.5.12))(esbuild@0.17.19) minify-stream@2.1.0: dependencies: @@ -32167,6 +32238,12 @@ snapshots: es-abstract: 1.23.3 get-intrinsic: 1.2.4 + object.groupby@1.0.3: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + object.values@1.2.0: dependencies: call-bind: 1.0.7 @@ -32822,29 +32899,29 @@ snapshots: postcss: 8.4.47 postcss-value-parser: 4.2.0 - postcss-load-config@3.1.4(postcss@8.4.47)(ts-node@10.9.1(@swc/core@1.7.14)(@types/node@22.5.5)(typescript@5.6.2)): + postcss-load-config@3.1.4(postcss@8.4.47)(ts-node@10.9.1(@swc/core@1.7.14(@swc/helpers@0.5.12))(@types/node@22.5.5)(typescript@5.6.2)): dependencies: lilconfig: 2.1.0 yaml: 1.10.2 optionalDependencies: postcss: 8.4.47 - ts-node: 10.9.1(@swc/core@1.7.14)(@types/node@22.5.5)(typescript@5.6.2) + ts-node: 10.9.1(@swc/core@1.7.14(@swc/helpers@0.5.12))(@types/node@22.5.5)(typescript@5.6.2) - postcss-load-config@4.0.1(postcss@8.4.47)(ts-node@10.9.1(@swc/core@1.7.14)(@types/node@22.5.5)(typescript@5.6.2)): + postcss-load-config@4.0.1(postcss@8.4.47)(ts-node@10.9.1(@swc/core@1.7.14(@swc/helpers@0.5.12))(@types/node@22.5.5)(typescript@5.6.2)): dependencies: lilconfig: 2.1.0 yaml: 2.5.0 optionalDependencies: postcss: 8.4.47 - ts-node: 10.9.1(@swc/core@1.7.14)(@types/node@22.5.5)(typescript@5.6.2) + ts-node: 10.9.1(@swc/core@1.7.14(@swc/helpers@0.5.12))(@types/node@22.5.5)(typescript@5.6.2) - postcss-load-config@4.0.1(postcss@8.4.47)(ts-node@10.9.1(@swc/core@1.7.14)(@types/node@22.7.4)(typescript@5.6.2)): + postcss-load-config@4.0.1(postcss@8.4.47)(ts-node@10.9.1(@swc/core@1.7.14(@swc/helpers@0.5.12))(@types/node@22.7.4)(typescript@5.6.2)): dependencies: lilconfig: 2.1.0 yaml: 2.5.0 optionalDependencies: postcss: 8.4.47 - ts-node: 10.9.1(@swc/core@1.7.14)(@types/node@22.7.4)(typescript@5.6.2) + ts-node: 10.9.1(@swc/core@1.7.14(@swc/helpers@0.5.12))(@types/node@22.7.4)(typescript@5.6.2) postcss-load-config@6.0.1(jiti@1.21.6)(postcss@8.4.47)(tsx@4.19.1)(yaml@2.5.1): dependencies: @@ -32855,13 +32932,13 @@ snapshots: tsx: 4.19.1 yaml: 2.5.1 - postcss-loader@6.2.1(postcss@8.4.47)(webpack@5.88.0(@swc/core@1.7.14)(esbuild@0.17.19)): + postcss-loader@6.2.1(postcss@8.4.47)(webpack@5.88.0(@swc/core@1.7.14(@swc/helpers@0.5.12))(esbuild@0.17.19)): dependencies: cosmiconfig: 7.1.0 klona: 2.0.6 postcss: 8.4.47 semver: 7.6.3 - webpack: 5.88.0(@swc/core@1.7.14)(esbuild@0.17.19) + webpack: 5.88.0(@swc/core@1.7.14(@swc/helpers@0.5.12))(esbuild@0.17.19) postcss-logical@5.0.4(postcss@8.4.47): dependencies: @@ -33428,7 +33505,7 @@ snapshots: regenerator-runtime: 0.13.11 whatwg-fetch: 3.6.2 - react-dev-utils@12.0.1(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2)(webpack@5.88.0(@swc/core@1.7.14)(esbuild@0.17.19)): + react-dev-utils@12.0.1(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2)(webpack@5.88.0(@swc/core@1.7.14(@swc/helpers@0.5.12))(esbuild@0.17.19)): dependencies: '@babel/code-frame': 7.22.5 address: 1.2.2 @@ -33439,7 +33516,7 @@ snapshots: escape-string-regexp: 4.0.0 filesize: 8.0.7 find-up: 5.0.0 - fork-ts-checker-webpack-plugin: 6.5.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2)(webpack@5.88.0(@swc/core@1.7.14)(esbuild@0.17.19)) + fork-ts-checker-webpack-plugin: 6.5.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2)(webpack@5.88.0(@swc/core@1.7.14(@swc/helpers@0.5.12))(esbuild@0.17.19)) global-modules: 2.0.0 globby: 11.1.0 gzip-size: 6.0.0 @@ -33454,7 +33531,7 @@ snapshots: shell-quote: 1.8.1 strip-ansi: 6.0.1 text-table: 0.2.0 - webpack: 5.88.0(@swc/core@1.7.14)(esbuild@0.17.19) + webpack: 5.88.0(@swc/core@1.7.14(@swc/helpers@0.5.12))(esbuild@0.17.19) optionalDependencies: typescript: 5.6.2 transitivePeerDependencies: @@ -33621,56 +33698,56 @@ snapshots: optionalDependencies: '@types/react': 18.3.1 - react-scripts@5.0.1(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.22.5))(@babel/plugin-transform-react-jsx@7.25.2(@babel/core@7.22.5))(@swc/core@1.7.14)(@types/babel__core@7.20.5)(bufferutil@4.0.8)(esbuild@0.17.19)(eslint@9.9.1(jiti@1.21.6))(react@18.3.1)(ts-node@10.9.1(@swc/core@1.7.14)(@types/node@22.5.5)(typescript@5.6.2))(type-fest@3.1.0)(typescript@5.6.2)(utf-8-validate@5.0.10): + react-scripts@5.0.1(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.22.5))(@babel/plugin-transform-react-jsx@7.25.2(@babel/core@7.22.5))(@swc/core@1.7.14(@swc/helpers@0.5.12))(@types/babel__core@7.20.5)(bufferutil@4.0.8)(esbuild@0.17.19)(eslint@9.9.1(jiti@1.21.6))(react@18.3.1)(ts-node@10.9.1(@swc/core@1.7.14(@swc/helpers@0.5.12))(@types/node@22.5.5)(typescript@5.6.2))(type-fest@3.1.0)(typescript@5.6.2)(utf-8-validate@5.0.10): dependencies: '@babel/core': 7.22.5 - '@pmmmwh/react-refresh-webpack-plugin': 0.5.10(react-refresh@0.11.0)(type-fest@3.1.0)(webpack-dev-server@4.15.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)(webpack@5.88.0(@swc/core@1.7.14)(esbuild@0.17.19)))(webpack@5.88.0(@swc/core@1.7.14)(esbuild@0.17.19)) + '@pmmmwh/react-refresh-webpack-plugin': 0.5.10(react-refresh@0.11.0)(type-fest@3.1.0)(webpack-dev-server@4.15.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)(webpack@5.88.0(@swc/core@1.7.14(@swc/helpers@0.5.12))(esbuild@0.17.19)))(webpack@5.88.0(@swc/core@1.7.14(@swc/helpers@0.5.12))(esbuild@0.17.19)) '@svgr/webpack': 5.5.0 babel-jest: 27.5.1(@babel/core@7.22.5) - babel-loader: 8.3.0(@babel/core@7.22.5)(webpack@5.88.0(@swc/core@1.7.14)(esbuild@0.17.19)) + babel-loader: 8.3.0(@babel/core@7.22.5)(webpack@5.88.0(@swc/core@1.7.14(@swc/helpers@0.5.12))(esbuild@0.17.19)) babel-plugin-named-asset-import: 0.3.8(@babel/core@7.22.5) babel-preset-react-app: 10.0.1 bfj: 7.0.2 browserslist: 4.21.9 camelcase: 6.3.0 case-sensitive-paths-webpack-plugin: 2.4.0 - css-loader: 6.8.1(webpack@5.88.0(@swc/core@1.7.14)(esbuild@0.17.19)) - css-minimizer-webpack-plugin: 3.4.1(esbuild@0.17.19)(webpack@5.88.0(@swc/core@1.7.14)(esbuild@0.17.19)) + css-loader: 6.8.1(webpack@5.88.0(@swc/core@1.7.14(@swc/helpers@0.5.12))(esbuild@0.17.19)) + css-minimizer-webpack-plugin: 3.4.1(esbuild@0.17.19)(webpack@5.88.0(@swc/core@1.7.14(@swc/helpers@0.5.12))(esbuild@0.17.19)) dotenv: 10.0.0 dotenv-expand: 5.1.0 eslint: 9.9.1(jiti@1.21.6) - eslint-config-react-app: 7.0.1(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.22.5))(@babel/plugin-transform-react-jsx@7.25.2(@babel/core@7.22.5))(eslint@9.9.1(jiti@1.21.6))(jest@27.5.1(bufferutil@4.0.8)(ts-node@10.9.1(@swc/core@1.7.14)(@types/node@22.5.5)(typescript@5.6.2))(utf-8-validate@5.0.10))(typescript@5.6.2) - eslint-webpack-plugin: 3.2.0(eslint@9.9.1(jiti@1.21.6))(webpack@5.88.0(@swc/core@1.7.14)(esbuild@0.17.19)) - file-loader: 6.2.0(webpack@5.88.0(@swc/core@1.7.14)(esbuild@0.17.19)) + eslint-config-react-app: 7.0.1(@babel/plugin-syntax-flow@7.24.7(@babel/core@7.22.5))(@babel/plugin-transform-react-jsx@7.25.2(@babel/core@7.22.5))(eslint@9.9.1(jiti@1.21.6))(jest@27.5.1(bufferutil@4.0.8)(ts-node@10.9.1(@swc/core@1.7.14(@swc/helpers@0.5.12))(@types/node@22.5.5)(typescript@5.6.2))(utf-8-validate@5.0.10))(typescript@5.6.2) + eslint-webpack-plugin: 3.2.0(eslint@9.9.1(jiti@1.21.6))(webpack@5.88.0(@swc/core@1.7.14(@swc/helpers@0.5.12))(esbuild@0.17.19)) + file-loader: 6.2.0(webpack@5.88.0(@swc/core@1.7.14(@swc/helpers@0.5.12))(esbuild@0.17.19)) fs-extra: 10.1.0 - html-webpack-plugin: 5.5.3(webpack@5.88.0(@swc/core@1.7.14)(esbuild@0.17.19)) + html-webpack-plugin: 5.5.3(webpack@5.88.0(@swc/core@1.7.14(@swc/helpers@0.5.12))(esbuild@0.17.19)) identity-obj-proxy: 3.0.0 - jest: 27.5.1(bufferutil@4.0.8)(ts-node@10.9.1(@swc/core@1.7.14)(@types/node@22.5.5)(typescript@5.6.2))(utf-8-validate@5.0.10) + jest: 27.5.1(bufferutil@4.0.8)(ts-node@10.9.1(@swc/core@1.7.14(@swc/helpers@0.5.12))(@types/node@22.5.5)(typescript@5.6.2))(utf-8-validate@5.0.10) jest-resolve: 27.5.1 - jest-watch-typeahead: 1.1.0(jest@27.5.1(bufferutil@4.0.8)(ts-node@10.9.1(@swc/core@1.7.14)(@types/node@22.5.5)(typescript@5.6.2))(utf-8-validate@5.0.10)) - mini-css-extract-plugin: 2.7.6(webpack@5.88.0(@swc/core@1.7.14)(esbuild@0.17.19)) + jest-watch-typeahead: 1.1.0(jest@27.5.1(bufferutil@4.0.8)(ts-node@10.9.1(@swc/core@1.7.14(@swc/helpers@0.5.12))(@types/node@22.5.5)(typescript@5.6.2))(utf-8-validate@5.0.10)) + mini-css-extract-plugin: 2.7.6(webpack@5.88.0(@swc/core@1.7.14(@swc/helpers@0.5.12))(esbuild@0.17.19)) postcss: 8.4.47 postcss-flexbugs-fixes: 5.0.2(postcss@8.4.47) - postcss-loader: 6.2.1(postcss@8.4.47)(webpack@5.88.0(@swc/core@1.7.14)(esbuild@0.17.19)) + postcss-loader: 6.2.1(postcss@8.4.47)(webpack@5.88.0(@swc/core@1.7.14(@swc/helpers@0.5.12))(esbuild@0.17.19)) postcss-normalize: 10.0.1(browserslist@4.21.9)(postcss@8.4.47) postcss-preset-env: 7.8.3(postcss@8.4.47) prompts: 2.4.2 react: 18.3.1 react-app-polyfill: 3.0.0 - react-dev-utils: 12.0.1(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2)(webpack@5.88.0(@swc/core@1.7.14)(esbuild@0.17.19)) + react-dev-utils: 12.0.1(eslint@9.9.1(jiti@1.21.6))(typescript@5.6.2)(webpack@5.88.0(@swc/core@1.7.14(@swc/helpers@0.5.12))(esbuild@0.17.19)) react-refresh: 0.11.0 resolve: 1.22.2 resolve-url-loader: 4.0.0 - sass-loader: 12.6.0(webpack@5.88.0(@swc/core@1.7.14)(esbuild@0.17.19)) + sass-loader: 12.6.0(webpack@5.88.0(@swc/core@1.7.14(@swc/helpers@0.5.12))(esbuild@0.17.19)) semver: 7.3.8 - source-map-loader: 3.0.2(webpack@5.88.0(@swc/core@1.7.14)(esbuild@0.17.19)) - style-loader: 3.3.3(webpack@5.88.0(@swc/core@1.7.14)(esbuild@0.17.19)) - tailwindcss: 3.4.12(ts-node@10.9.1(@swc/core@1.7.14)(@types/node@22.5.5)(typescript@5.6.2)) - terser-webpack-plugin: 5.3.9(@swc/core@1.7.14)(esbuild@0.17.19)(webpack@5.88.0(@swc/core@1.7.14)(esbuild@0.17.19)) - webpack: 5.88.0(@swc/core@1.7.14)(esbuild@0.17.19) - webpack-dev-server: 4.15.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)(webpack@5.88.0(@swc/core@1.7.14)(esbuild@0.17.19)) - webpack-manifest-plugin: 4.1.1(webpack@5.88.0(@swc/core@1.7.14)(esbuild@0.17.19)) - workbox-webpack-plugin: 6.6.0(@types/babel__core@7.20.5)(webpack@5.88.0(@swc/core@1.7.14)(esbuild@0.17.19)) + source-map-loader: 3.0.2(webpack@5.88.0(@swc/core@1.7.14(@swc/helpers@0.5.12))(esbuild@0.17.19)) + style-loader: 3.3.3(webpack@5.88.0(@swc/core@1.7.14(@swc/helpers@0.5.12))(esbuild@0.17.19)) + tailwindcss: 3.4.12(ts-node@10.9.1(@swc/core@1.7.14(@swc/helpers@0.5.12))(@types/node@22.5.5)(typescript@5.6.2)) + terser-webpack-plugin: 5.3.9(@swc/core@1.7.14(@swc/helpers@0.5.12))(esbuild@0.17.19)(webpack@5.88.0(@swc/core@1.7.14(@swc/helpers@0.5.12))(esbuild@0.17.19)) + webpack: 5.88.0(@swc/core@1.7.14(@swc/helpers@0.5.12))(esbuild@0.17.19) + webpack-dev-server: 4.15.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)(webpack@5.88.0(@swc/core@1.7.14(@swc/helpers@0.5.12))(esbuild@0.17.19)) + webpack-manifest-plugin: 4.1.1(webpack@5.88.0(@swc/core@1.7.14(@swc/helpers@0.5.12))(esbuild@0.17.19)) + workbox-webpack-plugin: 6.6.0(@types/babel__core@7.20.5)(webpack@5.88.0(@swc/core@1.7.14(@swc/helpers@0.5.12))(esbuild@0.17.19)) optionalDependencies: fsevents: 2.3.3 typescript: 5.6.2 @@ -34088,7 +34165,7 @@ snapshots: jest-worker: 26.6.2 rollup: 2.79.2 serialize-javascript: 4.0.0 - terser: 5.18.2 + terser: 5.34.1 rollup-plugin-visualizer@5.12.0(rollup@4.22.5): dependencies: @@ -34202,11 +34279,11 @@ snapshots: sanitize.css@13.0.0: {} - sass-loader@12.6.0(webpack@5.88.0(@swc/core@1.7.14)(esbuild@0.17.19)): + sass-loader@12.6.0(webpack@5.88.0(@swc/core@1.7.14(@swc/helpers@0.5.12))(esbuild@0.17.19)): dependencies: klona: 2.0.6 neo-async: 2.6.2 - webpack: 5.88.0(@swc/core@1.7.14)(esbuild@0.17.19) + webpack: 5.88.0(@swc/core@1.7.14(@swc/helpers@0.5.12))(esbuild@0.17.19) sax@1.2.4: {} @@ -34273,10 +34350,6 @@ snapshots: select-hose@2.0.0: {} - selfsigned@2.1.1: - dependencies: - node-forge: 1.3.1 - selfsigned@2.4.1: dependencies: '@types/node-forge': 1.3.11 @@ -34589,12 +34662,12 @@ snapshots: source-map-js@1.2.1: {} - source-map-loader@3.0.2(webpack@5.88.0(@swc/core@1.7.14)(esbuild@0.17.19)): + source-map-loader@3.0.2(webpack@5.88.0(@swc/core@1.7.14(@swc/helpers@0.5.12))(esbuild@0.17.19)): dependencies: abab: 2.0.6 iconv-lite: 0.6.3 source-map-js: 1.2.1 - webpack: 5.88.0(@swc/core@1.7.14)(esbuild@0.17.19) + webpack: 5.88.0(@swc/core@1.7.14(@swc/helpers@0.5.12))(esbuild@0.17.19) source-map-support@0.5.21: dependencies: @@ -34983,9 +35056,9 @@ snapshots: dependencies: boundary: 2.0.0 - style-loader@3.3.3(webpack@5.88.0(@swc/core@1.7.14)(esbuild@0.17.19)): + style-loader@3.3.3(webpack@5.88.0(@swc/core@1.7.14(@swc/helpers@0.5.12))(esbuild@0.17.19)): dependencies: - webpack: 5.88.0(@swc/core@1.7.14)(esbuild@0.17.19) + webpack: 5.88.0(@swc/core@1.7.14(@swc/helpers@0.5.12))(esbuild@0.17.19) styled-jsx@5.1.1(@babel/core@7.25.2)(react@18.3.1): dependencies: @@ -35128,7 +35201,7 @@ snapshots: tachyons@4.12.0: {} - tailwindcss@3.4.12(ts-node@10.9.1(@swc/core@1.7.14)(@types/node@22.5.5)(typescript@5.6.2)): + tailwindcss@3.4.12(ts-node@10.9.1(@swc/core@1.7.14(@swc/helpers@0.5.12))(@types/node@22.5.5)(typescript@5.6.2)): dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -35147,7 +35220,7 @@ snapshots: postcss: 8.4.47 postcss-import: 15.1.0(postcss@8.4.47) postcss-js: 4.0.1(postcss@8.4.47) - postcss-load-config: 4.0.1(postcss@8.4.47)(ts-node@10.9.1(@swc/core@1.7.14)(@types/node@22.5.5)(typescript@5.6.2)) + postcss-load-config: 4.0.1(postcss@8.4.47)(ts-node@10.9.1(@swc/core@1.7.14(@swc/helpers@0.5.12))(@types/node@22.5.5)(typescript@5.6.2)) postcss-nested: 6.0.1(postcss@8.4.47) postcss-selector-parser: 6.0.13 resolve: 1.22.8 @@ -35155,7 +35228,7 @@ snapshots: transitivePeerDependencies: - ts-node - tailwindcss@3.4.13(ts-node@10.9.1(@swc/core@1.7.14)(@types/node@22.5.5)(typescript@5.6.2)): + tailwindcss@3.4.13(ts-node@10.9.1(@swc/core@1.7.14(@swc/helpers@0.5.12))(@types/node@22.5.5)(typescript@5.6.2)): dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -35174,7 +35247,7 @@ snapshots: postcss: 8.4.47 postcss-import: 15.1.0(postcss@8.4.47) postcss-js: 4.0.1(postcss@8.4.47) - postcss-load-config: 4.0.1(postcss@8.4.47)(ts-node@10.9.1(@swc/core@1.7.14)(@types/node@22.5.5)(typescript@5.6.2)) + postcss-load-config: 4.0.1(postcss@8.4.47)(ts-node@10.9.1(@swc/core@1.7.14(@swc/helpers@0.5.12))(@types/node@22.5.5)(typescript@5.6.2)) postcss-nested: 6.0.1(postcss@8.4.47) postcss-selector-parser: 6.0.13 resolve: 1.22.8 @@ -35182,7 +35255,7 @@ snapshots: transitivePeerDependencies: - ts-node - tailwindcss@3.4.13(ts-node@10.9.1(@swc/core@1.7.14)(@types/node@22.7.4)(typescript@5.6.2)): + tailwindcss@3.4.13(ts-node@10.9.1(@swc/core@1.7.14(@swc/helpers@0.5.12))(@types/node@22.7.4)(typescript@5.6.2)): dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -35201,7 +35274,7 @@ snapshots: postcss: 8.4.47 postcss-import: 15.1.0(postcss@8.4.47) postcss-js: 4.0.1(postcss@8.4.47) - postcss-load-config: 4.0.1(postcss@8.4.47)(ts-node@10.9.1(@swc/core@1.7.14)(@types/node@22.7.4)(typescript@5.6.2)) + postcss-load-config: 4.0.1(postcss@8.4.47)(ts-node@10.9.1(@swc/core@1.7.14(@swc/helpers@0.5.12))(@types/node@22.7.4)(typescript@5.6.2)) postcss-nested: 6.0.1(postcss@8.4.47) postcss-selector-parser: 6.0.13 resolve: 1.22.8 @@ -35247,16 +35320,16 @@ snapshots: ansi-escapes: 4.3.2 supports-hyperlinks: 2.3.0 - terser-webpack-plugin@5.3.9(@swc/core@1.7.14)(esbuild@0.17.19)(webpack@5.88.0(@swc/core@1.7.14)(esbuild@0.17.19)): + terser-webpack-plugin@5.3.9(@swc/core@1.7.14(@swc/helpers@0.5.12))(esbuild@0.17.19)(webpack@5.88.0(@swc/core@1.7.14(@swc/helpers@0.5.12))(esbuild@0.17.19)): dependencies: - '@jridgewell/trace-mapping': 0.3.18 + '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.1 - terser: 5.18.2 - webpack: 5.88.0(@swc/core@1.7.14)(esbuild@0.17.19) + terser: 5.34.1 + webpack: 5.88.0(@swc/core@1.7.14(@swc/helpers@0.5.12))(esbuild@0.17.19) optionalDependencies: - '@swc/core': 1.7.14 + '@swc/core': 1.7.14(@swc/helpers@0.5.12) esbuild: 0.17.19 terser@4.8.1: @@ -35526,7 +35599,7 @@ snapshots: ts-log@2.2.5: {} - ts-node@10.9.1(@swc/core@1.7.14)(@types/node@22.5.5)(typescript@5.6.2): + ts-node@10.9.1(@swc/core@1.7.14(@swc/helpers@0.5.12))(@types/node@22.5.5)(typescript@5.6.2): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 @@ -35544,10 +35617,10 @@ snapshots: v8-compile-cache-lib: 3.0.1 yn: 3.1.1 optionalDependencies: - '@swc/core': 1.7.14 + '@swc/core': 1.7.14(@swc/helpers@0.5.12) optional: true - ts-node@10.9.1(@swc/core@1.7.14)(@types/node@22.7.4)(typescript@5.6.2): + ts-node@10.9.1(@swc/core@1.7.14(@swc/helpers@0.5.12))(@types/node@22.7.4)(typescript@5.6.2): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 @@ -35565,7 +35638,7 @@ snapshots: v8-compile-cache-lib: 3.0.1 yn: 3.1.1 optionalDependencies: - '@swc/core': 1.7.14 + '@swc/core': 1.7.14(@swc/helpers@0.5.12) optional: true ts-toolbelt@9.6.0: {} @@ -35589,7 +35662,7 @@ snapshots: tslib@2.7.0: {} - tsup@6.7.0(@swc/core@1.7.14)(postcss@8.4.47)(ts-node@10.9.1(@swc/core@1.7.14)(@types/node@22.5.5)(typescript@5.6.2))(typescript@5.6.2): + tsup@6.7.0(@swc/core@1.7.14(@swc/helpers@0.5.12))(postcss@8.4.47)(ts-node@10.9.1(@swc/core@1.7.14(@swc/helpers@0.5.12))(@types/node@22.5.5)(typescript@5.6.2))(typescript@5.6.2): dependencies: bundle-require: 4.0.1(esbuild@0.17.19) cac: 6.7.14 @@ -35599,14 +35672,14 @@ snapshots: execa: 5.1.1 globby: 11.1.0 joycon: 3.1.1 - postcss-load-config: 3.1.4(postcss@8.4.47)(ts-node@10.9.1(@swc/core@1.7.14)(@types/node@22.5.5)(typescript@5.6.2)) + postcss-load-config: 3.1.4(postcss@8.4.47)(ts-node@10.9.1(@swc/core@1.7.14(@swc/helpers@0.5.12))(@types/node@22.5.5)(typescript@5.6.2)) resolve-from: 5.0.0 rollup: 3.25.3 source-map: 0.8.0-beta.0 sucrase: 3.32.0 tree-kill: 1.2.2 optionalDependencies: - '@swc/core': 1.7.14 + '@swc/core': 1.7.14(@swc/helpers@0.5.12) postcss: 8.4.47 typescript: 5.6.2 transitivePeerDependencies: @@ -36314,7 +36387,7 @@ snapshots: why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 22.5.5 - '@vitest/browser': 2.0.5(bufferutil@4.0.8)(playwright@1.47.2)(typescript@5.6.2)(utf-8-validate@5.0.10)(vitest@2.0.5)(webdriverio@9.0.9(bufferutil@4.0.8)(utf-8-validate@6.0.4)) + '@vitest/browser': 2.0.5(bufferutil@4.0.8)(playwright@1.47.2)(typescript@5.6.2)(utf-8-validate@5.0.10)(vitest@2.0.5)(webdriverio@9.0.9(bufferutil@4.0.8)(utf-8-validate@5.0.10)) jsdom: 16.7.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) transitivePeerDependencies: - less @@ -36384,7 +36457,7 @@ snapshots: why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 22.7.4 - '@vitest/browser': 2.0.5(bufferutil@4.0.8)(playwright@1.47.2)(typescript@5.6.2)(utf-8-validate@5.0.10)(vitest@2.0.5)(webdriverio@9.0.9(bufferutil@4.0.8)(utf-8-validate@6.0.4)) + '@vitest/browser': 2.0.5(bufferutil@4.0.8)(playwright@1.47.2)(typescript@5.6.2)(utf-8-validate@5.0.10)(vitest@2.0.5)(webdriverio@9.0.9(bufferutil@4.0.8)(utf-8-validate@5.0.10)) jsdom: 16.7.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) transitivePeerDependencies: - less @@ -36499,6 +36572,23 @@ snapshots: pvtsutils: 1.3.2 tslib: 2.7.0 + webdriver@9.0.8(bufferutil@4.0.8)(utf-8-validate@5.0.10): + dependencies: + '@types/node': 20.14.15 + '@types/ws': 8.5.12 + '@wdio/config': 9.0.8 + '@wdio/logger': 9.0.8 + '@wdio/protocols': 9.0.8 + '@wdio/types': 9.0.8 + '@wdio/utils': 9.0.8 + deepmerge-ts: 7.1.0 + ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + optional: true + webdriver@9.0.8(bufferutil@4.0.8)(utf-8-validate@6.0.4): dependencies: '@types/node': 20.14.15 @@ -36515,6 +36605,41 @@ snapshots: - supports-color - utf-8-validate + webdriverio@9.0.9(bufferutil@4.0.8)(utf-8-validate@5.0.10): + dependencies: + '@types/node': 20.14.15 + '@types/sinonjs__fake-timers': 8.1.5 + '@wdio/config': 9.0.8 + '@wdio/logger': 9.0.8 + '@wdio/protocols': 9.0.8 + '@wdio/repl': 9.0.8 + '@wdio/types': 9.0.8 + '@wdio/utils': 9.0.8 + archiver: 7.0.1 + aria-query: 5.3.0 + cheerio: 1.0.0 + css-shorthand-properties: 1.1.1 + css-value: 0.0.1 + grapheme-splitter: 1.0.4 + htmlfy: 0.2.1 + import-meta-resolve: 4.1.0 + is-plain-obj: 4.1.0 + jszip: 3.10.1 + lodash.clonedeep: 4.5.0 + lodash.zip: 4.2.0 + minimatch: 9.0.5 + query-selector-shadow-dom: 1.0.1 + resq: 1.11.0 + rgb2hex: 0.2.5 + serialize-error: 11.0.3 + urlpattern-polyfill: 10.0.0 + webdriver: 9.0.8(bufferutil@4.0.8)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + optional: true + webdriverio@9.0.9(bufferutil@4.0.8)(utf-8-validate@6.0.4): dependencies: '@types/node': 20.14.15 @@ -36561,16 +36686,16 @@ snapshots: webidl-conversions@6.1.0: {} - webpack-dev-middleware@5.3.3(webpack@5.88.0(@swc/core@1.7.14)(esbuild@0.17.19)): + webpack-dev-middleware@5.3.3(webpack@5.88.0(@swc/core@1.7.14(@swc/helpers@0.5.12))(esbuild@0.17.19)): dependencies: colorette: 2.0.20 memfs: 3.5.3 mime-types: 2.1.35 range-parser: 1.2.1 schema-utils: 4.2.0 - webpack: 5.88.0(@swc/core@1.7.14)(esbuild@0.17.19) + webpack: 5.88.0(@swc/core@1.7.14(@swc/helpers@0.5.12))(esbuild@0.17.19) - webpack-dev-server@4.15.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)(webpack@5.88.0(@swc/core@1.7.14)(esbuild@0.17.19)): + webpack-dev-server@4.15.1(bufferutil@4.0.8)(utf-8-validate@5.0.10)(webpack@5.88.0(@swc/core@1.7.14(@swc/helpers@0.5.12))(esbuild@0.17.19)): dependencies: '@types/bonjour': 3.5.10 '@types/connect-history-api-fallback': 1.5.0 @@ -36578,7 +36703,7 @@ snapshots: '@types/serve-index': 1.9.1 '@types/serve-static': 1.15.2 '@types/sockjs': 0.3.33 - '@types/ws': 8.5.5 + '@types/ws': 8.5.12 ansi-html-community: 0.0.8 bonjour-service: 1.1.1 chokidar: 3.6.0 @@ -36596,24 +36721,24 @@ snapshots: p-retry: 4.6.2 rimraf: 3.0.2 schema-utils: 4.2.0 - selfsigned: 2.1.1 + selfsigned: 2.4.1 serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack-dev-middleware: 5.3.3(webpack@5.88.0(@swc/core@1.7.14)(esbuild@0.17.19)) + webpack-dev-middleware: 5.3.3(webpack@5.88.0(@swc/core@1.7.14(@swc/helpers@0.5.12))(esbuild@0.17.19)) ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) optionalDependencies: - webpack: 5.88.0(@swc/core@1.7.14)(esbuild@0.17.19) + webpack: 5.88.0(@swc/core@1.7.14(@swc/helpers@0.5.12))(esbuild@0.17.19) transitivePeerDependencies: - bufferutil - debug - supports-color - utf-8-validate - webpack-manifest-plugin@4.1.1(webpack@5.88.0(@swc/core@1.7.14)(esbuild@0.17.19)): + webpack-manifest-plugin@4.1.1(webpack@5.88.0(@swc/core@1.7.14(@swc/helpers@0.5.12))(esbuild@0.17.19)): dependencies: tapable: 2.2.1 - webpack: 5.88.0(@swc/core@1.7.14)(esbuild@0.17.19) + webpack: 5.88.0(@swc/core@1.7.14(@swc/helpers@0.5.12))(esbuild@0.17.19) webpack-sources: 2.3.1 webpack-sources@1.4.3: @@ -36630,15 +36755,15 @@ snapshots: webpack-virtual-modules@0.6.2: {} - webpack@5.88.0(@swc/core@1.7.14)(esbuild@0.17.19): + webpack@5.88.0(@swc/core@1.7.14(@swc/helpers@0.5.12))(esbuild@0.17.19): dependencies: '@types/eslint-scope': 3.7.4 - '@types/estree': 1.0.1 + '@types/estree': 1.0.5 '@webassemblyjs/ast': 1.11.6 '@webassemblyjs/wasm-edit': 1.11.6 '@webassemblyjs/wasm-parser': 1.11.6 - acorn: 8.9.0 - acorn-import-assertions: 1.9.0(acorn@8.9.0) + acorn: 8.12.1 + acorn-import-assertions: 1.9.0(acorn@8.12.1) browserslist: 4.23.3 chrome-trace-event: 1.0.3 enhanced-resolve: 5.17.1 @@ -36653,7 +36778,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.9(@swc/core@1.7.14)(esbuild@0.17.19)(webpack@5.88.0(@swc/core@1.7.14)(esbuild@0.17.19)) + terser-webpack-plugin: 5.3.9(@swc/core@1.7.14(@swc/helpers@0.5.12))(esbuild@0.17.19)(webpack@5.88.0(@swc/core@1.7.14(@swc/helpers@0.5.12))(esbuild@0.17.19)) watchpack: 2.4.0 webpack-sources: 3.2.3 transitivePeerDependencies: @@ -36879,12 +37004,12 @@ snapshots: workbox-sw@6.6.0: {} - workbox-webpack-plugin@6.6.0(@types/babel__core@7.20.5)(webpack@5.88.0(@swc/core@1.7.14)(esbuild@0.17.19)): + workbox-webpack-plugin@6.6.0(@types/babel__core@7.20.5)(webpack@5.88.0(@swc/core@1.7.14(@swc/helpers@0.5.12))(esbuild@0.17.19)): dependencies: fast-json-stable-stringify: 2.1.0 pretty-bytes: 5.6.0 upath: 1.2.0 - webpack: 5.88.0(@swc/core@1.7.14)(esbuild@0.17.19) + webpack: 5.88.0(@swc/core@1.7.14(@swc/helpers@0.5.12))(esbuild@0.17.19) webpack-sources: 1.4.3 workbox-build: 6.6.0(@types/babel__core@7.20.5) transitivePeerDependencies: