diff --git a/package.json b/package.json index 0f510440..49787683 100644 --- a/package.json +++ b/package.json @@ -93,10 +93,10 @@ ] }, "dependencies": { - "@lifi/types": "^15.11.0", + "@lifi/types": "^15.13.0", "@solana/wallet-adapter-base": "^0.9.23", "@solana/web3.js": "^1.95.3", - "viem": "^2.21.6" + "viem": "^2.21.8" }, "devDependencies": { "@commitlint/cli": "^19.5.0", @@ -105,9 +105,9 @@ "@types/ws": "^8.5.12", "@typescript-eslint/eslint-plugin": "^7.18.0", "@typescript-eslint/parser": "^7.18.0", - "@vitest/coverage-v8": "^2.0.5", + "@vitest/coverage-v8": "^2.1.1", "bs58": "^6.0.0", - "eslint": "^8.57.0", + "eslint": "^8.57.1", "eslint-config-prettier": "^9.1.0", "eslint-plugin-jsdoc": "^48.11.0", "eslint-plugin-prettier": "^5.2.1", @@ -115,13 +115,13 @@ "husky": "^9.1.6", "lint-staged": "^15.2.10", "madge": "^8.0.0", - "msw": "^2.4.5", + "msw": "^2.4.8", "pinst": "^3.0.0", "prettier": "^3.3.3", "standard-version": "^9.5.0", "ts-node": "^10.9.2", "typescript": "^5.6.2", - "vitest": "^2.0.5" + "vitest": "^2.1.1" }, "peerDependencies": { "@solana/wallet-adapter-base": "^0.9.0", diff --git a/src/core/EVM/EVMStepExecutor.ts b/src/core/EVM/EVMStepExecutor.ts index e422c338..e42ab600 100644 --- a/src/core/EVM/EVMStepExecutor.ts +++ b/src/core/EVM/EVMStepExecutor.ts @@ -72,10 +72,10 @@ export class EVMStepExecutor extends BaseStepExecutor { let processToUpdate = process if (!processToUpdate) { // We need to create some process if we don't have one so we can show the error - processToUpdate = this.statusManager.findOrCreateProcess( + processToUpdate = this.statusManager.findOrCreateProcess({ step, - 'TRANSACTION' - ) + type: 'TRANSACTION', + }) } const errorMessage = 'The wallet address that requested the quote does not match the wallet address attempting to sign the transaction.' @@ -164,10 +164,11 @@ export class EVMStepExecutor extends BaseStepExecutor { } // STEP 2: Get transaction - let process = this.statusManager.findOrCreateProcess( + let process = this.statusManager.findOrCreateProcess({ step, - currentProcessType - ) + type: currentProcessType, + chainId: fromChain.id, + }) if (process.status !== 'DONE') { const multisigProcess = step.execution.process.find( @@ -413,11 +414,12 @@ export class EVMStepExecutor extends BaseStepExecutor { // STEP 5: Wait for the receiving chain const processTxHash = process.txHash if (isBridgeExecution) { - process = this.statusManager.findOrCreateProcess( + process = this.statusManager.findOrCreateProcess({ step, - 'RECEIVING_CHAIN', - 'PENDING' - ) + type: 'RECEIVING_CHAIN', + status: 'PENDING', + chainId: toChain.id, + }) } let statusResponse: FullStatusData diff --git a/src/core/EVM/checkAllowance.ts b/src/core/EVM/checkAllowance.ts index 84e66ca6..b1d4b665 100644 --- a/src/core/EVM/checkAllowance.ts +++ b/src/core/EVM/checkAllowance.ts @@ -17,10 +17,11 @@ export const checkAllowance = async ( shouldBatchTransactions = false ): Promise => { // Ask the user to set an allowance - let allowanceProcess: Process = statusManager.findOrCreateProcess( + let allowanceProcess: Process = statusManager.findOrCreateProcess({ step, - 'TOKEN_ALLOWANCE' - ) + type: 'TOKEN_ALLOWANCE', + chainId: step.action.fromChainId, + }) // Check allowance try { diff --git a/src/core/EVM/switchChain.ts b/src/core/EVM/switchChain.ts index 81b2b1b0..07f64ce6 100644 --- a/src/core/EVM/switchChain.ts +++ b/src/core/EVM/switchChain.ts @@ -39,11 +39,11 @@ export const switchChain = async ( step.execution = statusManager.initExecutionObject(step) statusManager.updateExecution(step, 'ACTION_REQUIRED') - let switchProcess = statusManager.findOrCreateProcess( + let switchProcess = statusManager.findOrCreateProcess({ step, - 'SWITCH_CHAIN', - 'ACTION_REQUIRED' - ) + type: 'SWITCH_CHAIN', + status: 'ACTION_REQUIRED', + }) if (!allowUserInteraction) { return diff --git a/src/core/Solana/SolanaStepExecutor.ts b/src/core/Solana/SolanaStepExecutor.ts index ca3e6f6d..0c7b369c 100644 --- a/src/core/Solana/SolanaStepExecutor.ts +++ b/src/core/Solana/SolanaStepExecutor.ts @@ -58,10 +58,10 @@ export class SolanaStepExecutor extends BaseStepExecutor { const currentProcessType = isBridgeExecution ? 'CROSS_CHAIN' : 'SWAP' // STEP 2: Get transaction - let process = this.statusManager.findOrCreateProcess( + let process = this.statusManager.findOrCreateProcess({ step, - currentProcessType - ) + type: currentProcessType, + }) if (process.status !== 'DONE') { try { @@ -297,11 +297,12 @@ export class SolanaStepExecutor extends BaseStepExecutor { // STEP 5: Wait for the receiving chain const processTxHash = process.txHash if (isBridgeExecution) { - process = this.statusManager.findOrCreateProcess( + process = this.statusManager.findOrCreateProcess({ step, - 'RECEIVING_CHAIN', - 'PENDING' - ) + type: 'RECEIVING_CHAIN', + status: 'PENDING', + chainId: toChain.id, + }) } let statusResponse: FullStatusData try { diff --git a/src/core/StatusManager.ts b/src/core/StatusManager.ts index d6c2d3b3..25730ae9 100644 --- a/src/core/StatusManager.ts +++ b/src/core/StatusManager.ts @@ -1,4 +1,5 @@ import type { + ChainId, Execution, ExecutionStatus, LiFiStep, @@ -10,19 +11,12 @@ import { executionState } from './executionState.js' import { getProcessMessage } from './processMessages.js' import type { LiFiStepExtended } from './types.js' -type OptionalParameters = Partial< - Pick< - Process, - | 'doneAt' - | 'failedAt' - | 'txHash' - | 'txLink' - | 'error' - | 'substatus' - | 'substatusMessage' - | 'multisigTxHash' - > -> +export type FindOrCreateProcessProps = { + step: LiFiStepExtended + type: ProcessType + chainId?: ChainId + status?: ProcessStatus +} /** * Manages status updates of a route and provides various functions for tracking processes @@ -88,16 +82,23 @@ export class StatusManager { /** * Create and push a new process into the execution. - * @param step The step that should contain the new process. - * @param type Type of the process. Used to identify already existing processes. - * @param status By default created procces is set to the STARTED status. We can override new process with the needed status. + * @param step.step The step that should contain the new process. + * @param step.type Type of the process. Used to identify already existing processes. + * @param step.chainId Chain Id of the process. + * @param step.status By default created procces is set to the STARTED status. We can override new process with the needed status. + * @param root0 + * @param root0.step + * @param root0.type + * @param root0.chainId + * @param root0.status * @returns Returns process. */ - findOrCreateProcess = ( - step: LiFiStepExtended, - type: ProcessType, - status?: ProcessStatus - ): Process => { + findOrCreateProcess = ({ + step, + type, + chainId, + status, + }: FindOrCreateProcessProps): Process => { if (!step.execution?.process) { throw new Error("Execution hasn't been initialized.") } @@ -117,6 +118,7 @@ export class StatusManager { startedAt: Date.now(), message: getProcessMessage(type, status ?? 'STARTED'), status: status ?? 'STARTED', + chainId: chainId, } step.execution.process.push(newProcess) @@ -136,7 +138,7 @@ export class StatusManager { step: LiFiStepExtended, type: ProcessType, status: ProcessStatus, - params?: OptionalParameters + params?: Partial ): Process => { if (!step.execution) { throw new Error("Can't update an empty step execution.") diff --git a/src/core/StatusManager.unit.spec.ts b/src/core/StatusManager.unit.spec.ts index 54aa86ac..155bd087 100644 --- a/src/core/StatusManager.unit.spec.ts +++ b/src/core/StatusManager.unit.spec.ts @@ -129,7 +129,10 @@ describe('StatusManager', () => { it('should throw an error', () => { expect(() => - statusManager.findOrCreateProcess(structuredClone(step), 'SWAP') + statusManager.findOrCreateProcess({ + step: structuredClone(step), + type: 'SWAP', + }) ).toThrow("Execution hasn't been initialized.") }) }) @@ -141,10 +144,10 @@ describe('StatusManager', () => { describe('and the process already exists', () => { it('should return the process and not call the callbacks', () => { - const process = statusManager.findOrCreateProcess( - structuredClone(step), - 'TOKEN_ALLOWANCE' - ) + const process = statusManager.findOrCreateProcess({ + step: structuredClone(step), + type: 'TOKEN_ALLOWANCE', + }) expect(process).toEqual(step.execution?.process[0]) @@ -154,10 +157,10 @@ describe('StatusManager', () => { describe("and the process doesn't exist", () => { it('should create a process and call the callbacks with the updated route', () => { - const process = statusManager.findOrCreateProcess( - structuredClone(step), - 'CROSS_CHAIN' - ) + const process = statusManager.findOrCreateProcess({ + step: structuredClone(step), + type: 'CROSS_CHAIN', + }) expect(process.type).toEqual('CROSS_CHAIN') expect(process.status).toEqual('STARTED') diff --git a/yarn.lock b/yarn.lock index 8c201f94..e4cb3999 100644 --- a/yarn.lock +++ b/yarn.lock @@ -182,16 +182,6 @@ __metadata: languageName: node linkType: hard -"@commitlint/format@npm:7.6.1": - version: 7.6.1 - resolution: "@commitlint/format@npm:7.6.1" - dependencies: - babel-runtime: "npm:^6.23.0" - chalk: "npm:^2.0.1" - checksum: 10/a6e034909318e8a8dcad21139df02c77896d289ae6e290085309ae64b20f0a648ddb062c43a30e481143b820b3bf1d589caa47ca7bb4c9b0cbee1717eb4771d0 - languageName: node - linkType: hard - "@commitlint/format@npm:^19.5.0": version: 19.5.0 resolution: "@commitlint/format@npm:19.5.0" @@ -528,9 +518,9 @@ __metadata: linkType: hard "@eslint-community/regexpp@npm:^4.10.0, @eslint-community/regexpp@npm:^4.6.1": - version: 4.11.0 - resolution: "@eslint-community/regexpp@npm:4.11.0" - checksum: 10/f053f371c281ba173fe6ee16dbc4fe544c84870d58035ccca08dba7f6ce1830d895ce3237a0db89ba37616524775dca82f1c502066b58e2d5712d7f87f5ba17c + version: 4.11.1 + resolution: "@eslint-community/regexpp@npm:4.11.1" + checksum: 10/934b6d3588c7f16b18d41efec4fdb89616c440b7e3256b8cb92cfd31ae12908600f2b986d6c1e61a84cbc10256b1dd3448cd1eec79904bd67ac365d0f1aba2e2 languageName: node linkType: hard @@ -551,21 +541,21 @@ __metadata: languageName: node linkType: hard -"@eslint/js@npm:8.57.0": - version: 8.57.0 - resolution: "@eslint/js@npm:8.57.0" - checksum: 10/3c501ce8a997cf6cbbaf4ed358af5492875e3550c19b9621413b82caa9ae5382c584b0efa79835639e6e0ddaa568caf3499318e5bdab68643ef4199dce5eb0a0 +"@eslint/js@npm:8.57.1": + version: 8.57.1 + resolution: "@eslint/js@npm:8.57.1" + checksum: 10/7562b21be10c2adbfa4aa5bb2eccec2cb9ac649a3569560742202c8d1cb6c931ce634937a2f0f551e078403a1c1285d6c2c0aa345dafc986149665cd69fe8b59 languageName: node linkType: hard -"@humanwhocodes/config-array@npm:^0.11.14": - version: 0.11.14 - resolution: "@humanwhocodes/config-array@npm:0.11.14" +"@humanwhocodes/config-array@npm:^0.13.0": + version: 0.13.0 + resolution: "@humanwhocodes/config-array@npm:0.13.0" dependencies: - "@humanwhocodes/object-schema": "npm:^2.0.2" + "@humanwhocodes/object-schema": "npm:^2.0.3" debug: "npm:^4.3.1" minimatch: "npm:^3.0.5" - checksum: 10/3ffb24ecdfab64014a230e127118d50a1a04d11080cbb748bc21629393d100850496456bbcb4e8c438957fe0934430d731042f1264d6a167b62d32fc2863580a + checksum: 10/524df31e61a85392a2433bf5d03164e03da26c03d009f27852e7dcfdafbc4a23f17f021dacf88e0a7a9fe04ca032017945d19b57a16e2676d9114c22a53a9d11 languageName: node linkType: hard @@ -576,7 +566,7 @@ __metadata: languageName: node linkType: hard -"@humanwhocodes/object-schema@npm:^2.0.2": +"@humanwhocodes/object-schema@npm:^2.0.3": version: 2.0.3 resolution: "@humanwhocodes/object-schema@npm:2.0.3" checksum: 10/05bb99ed06c16408a45a833f03a732f59bf6184795d4efadd33238ff8699190a8c871ad1121241bb6501589a9598dc83bf25b99dcbcf41e155cdf36e35e937a3 @@ -601,39 +591,47 @@ __metadata: linkType: hard "@inquirer/core@npm:^9.1.0": - version: 9.1.0 - resolution: "@inquirer/core@npm:9.1.0" + version: 9.2.1 + resolution: "@inquirer/core@npm:9.2.1" dependencies: - "@inquirer/figures": "npm:^1.0.5" - "@inquirer/type": "npm:^1.5.3" + "@inquirer/figures": "npm:^1.0.6" + "@inquirer/type": "npm:^2.0.0" "@types/mute-stream": "npm:^0.0.4" - "@types/node": "npm:^22.5.2" + "@types/node": "npm:^22.5.5" "@types/wrap-ansi": "npm:^3.0.0" ansi-escapes: "npm:^4.3.2" - cli-spinners: "npm:^2.9.2" cli-width: "npm:^4.1.0" mute-stream: "npm:^1.0.0" signal-exit: "npm:^4.1.0" strip-ansi: "npm:^6.0.1" wrap-ansi: "npm:^6.2.0" yoctocolors-cjs: "npm:^2.1.2" - checksum: 10/4aff54e4df53c2d8b93ab12e543f67b2f3193b448f8b0111eb111c21df1a7fdd0a7d081bf0a9029db8bda1a25031c11e643ac046df21c2b12edb3f096bb7c119 + checksum: 10/bf35e46e70add8ffa9e9d4ae6b528ac660484afca082bca31af95ce8a145a2f8c8d0d07cc7a8627771452e68ade9849c9c9c450a004133ed10ac2d6730900452 languageName: node linkType: hard -"@inquirer/figures@npm:^1.0.5": - version: 1.0.5 - resolution: "@inquirer/figures@npm:1.0.5" - checksum: 10/60a51b2cdef03c89be25071c23d8c4ae427c56d8ac1b00bf054ca7be446674adc4edd66c15465fe6a81ff0726b024bf37f8a2903a8387ef968d33058da3e7a15 +"@inquirer/figures@npm:^1.0.6": + version: 1.0.6 + resolution: "@inquirer/figures@npm:1.0.6" + checksum: 10/1b9023d331c41f09d0848b8920885d535cdaf52edd782009e003b2f3b2df6a6a6a26fb8ecd05eb3c3df3df9d080e042ca525438a1513cdcc4410f3eefce3e4e0 languageName: node linkType: hard "@inquirer/type@npm:^1.5.3": - version: 1.5.3 - resolution: "@inquirer/type@npm:1.5.3" + version: 1.5.5 + resolution: "@inquirer/type@npm:1.5.5" + dependencies: + mute-stream: "npm:^1.0.0" + checksum: 10/bd3f3d7510785af4ad599e042e99e4be6380f52f79f3db140fe6fed0a605acf27b1a0a20fb5cc688eaf7b8aa0c36dacb1d89c7bba4586f38cbf58ba9f159e7b5 + languageName: node + linkType: hard + +"@inquirer/type@npm:^2.0.0": + version: 2.0.0 + resolution: "@inquirer/type@npm:2.0.0" dependencies: mute-stream: "npm:^1.0.0" - checksum: 10/63976016f10a0cba725243dbe0beea88ee0090874e454482070e62e54a478405f3662acd3d97ce24516ada049e6e2aa72db627b65b2308f90a7398e11a287bd5 + checksum: 10/e85f359866c28cce06272d2d51cc17788a5c9de9fda7f181c27775dd26821de0dacbc947b521cfe2009cd2965ec54696799035ef3a25a9a5794e47d8e8bdf794 languageName: node linkType: hard @@ -716,16 +714,16 @@ __metadata: dependencies: "@commitlint/cli": "npm:^19.5.0" "@commitlint/config-conventional": "npm:^19.5.0" - "@lifi/types": "npm:^15.11.0" + "@lifi/types": "npm:^15.13.0" "@solana/wallet-adapter-base": "npm:^0.9.23" "@solana/web3.js": "npm:^1.95.3" "@types/fs-extra": "npm:^11.0.4" "@types/ws": "npm:^8.5.12" "@typescript-eslint/eslint-plugin": "npm:^7.18.0" "@typescript-eslint/parser": "npm:^7.18.0" - "@vitest/coverage-v8": "npm:^2.0.5" + "@vitest/coverage-v8": "npm:^2.1.1" bs58: "npm:^6.0.0" - eslint: "npm:^8.57.0" + eslint: "npm:^8.57.1" eslint-config-prettier: "npm:^9.1.0" eslint-plugin-jsdoc: "npm:^48.11.0" eslint-plugin-prettier: "npm:^5.2.1" @@ -733,14 +731,14 @@ __metadata: husky: "npm:^9.1.6" lint-staged: "npm:^15.2.10" madge: "npm:^8.0.0" - msw: "npm:^2.4.5" + msw: "npm:^2.4.8" pinst: "npm:^3.0.0" prettier: "npm:^3.3.3" standard-version: "npm:^9.5.0" ts-node: "npm:^10.9.2" typescript: "npm:^5.6.2" - viem: "npm:^2.21.6" - vitest: "npm:^2.0.5" + viem: "npm:^2.21.8" + vitest: "npm:^2.1.1" peerDependencies: "@solana/wallet-adapter-base": ^0.9.0 "@solana/web3.js": ^1.93.0 @@ -748,18 +746,16 @@ __metadata: languageName: unknown linkType: soft -"@lifi/types@npm:^15.11.0": - version: 15.11.0 - resolution: "@lifi/types@npm:15.11.0" - dependencies: - "@commitlint/format": "npm:7.6.1" - checksum: 10/57036733504c971ff511c7cfaa9ac70dda72ecdeb318e7070576b60a29bfdf80a883d4c3ad1696dfa4a5d12db2aecba6085e09ec872e80cf39d2363457a5ac26 +"@lifi/types@npm:^15.13.0": + version: 15.13.0 + resolution: "@lifi/types@npm:15.13.0" + checksum: 10/32bea41ec4c3ee75b5fabb40045b5af529de336712b72c0158870d12024d6e006cb17507a26c7b15466a18436e11290f11699c973bc16fcbf055d1e4649ab070 languageName: node linkType: hard -"@mswjs/interceptors@npm:^0.35.0": - version: 0.35.1 - resolution: "@mswjs/interceptors@npm:0.35.1" +"@mswjs/interceptors@npm:^0.35.6": + version: 0.35.6 + resolution: "@mswjs/interceptors@npm:0.35.6" dependencies: "@open-draft/deferred-promise": "npm:^2.2.0" "@open-draft/logger": "npm:^0.3.0" @@ -767,7 +763,7 @@ __metadata: is-node-process: "npm:^1.2.0" outvariant: "npm:^1.4.3" strict-event-emitter: "npm:^0.5.1" - checksum: 10/d7af1d100efa44bc874ea4751f3311b6dcb1a9d136553d46b83228df15c01fde404047430c99e0df87d12b8e158e5d2795e25db3abba010ec22685e34e8ed965 + checksum: 10/da0c50c924301fd8d6a57b102bae65721f1253b5bbf1a64c4d9108cc70f91f89552d67efe01effe37413eb0b93ca268f63a899f0578dc1f7be7621658b4b292d languageName: node linkType: hard @@ -1234,12 +1230,12 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:*, @types/node@npm:^22.5.2": - version: 22.5.4 - resolution: "@types/node@npm:22.5.4" +"@types/node@npm:*, @types/node@npm:^22.5.5": + version: 22.5.5 + resolution: "@types/node@npm:22.5.5" dependencies: undici-types: "npm:~6.19.2" - checksum: 10/d46e0abf437b36bdf89011287aa43873d68ea6f2521a11b5c9a033056fd0d07af36daf51439010e8d41c62c55d0b00e9b5e09ed00bb2617723f73f28a873903a + checksum: 10/172d02c8e6d921699edcf559c28b3805616bd6481af1b3cb0299f89ad9a6f33b71050434c06ce7b503166054a26275344187c443f99f745d0b12601372452f19 languageName: node linkType: hard @@ -1428,145 +1424,168 @@ __metadata: languageName: node linkType: hard -"@vitest/coverage-v8@npm:^2.0.5": - version: 2.0.5 - resolution: "@vitest/coverage-v8@npm:2.0.5" +"@vitest/coverage-v8@npm:^2.1.1": + version: 2.1.1 + resolution: "@vitest/coverage-v8@npm:2.1.1" dependencies: "@ampproject/remapping": "npm:^2.3.0" "@bcoe/v8-coverage": "npm:^0.2.3" - debug: "npm:^4.3.5" + debug: "npm:^4.3.6" istanbul-lib-coverage: "npm:^3.2.2" istanbul-lib-report: "npm:^3.0.1" istanbul-lib-source-maps: "npm:^5.0.6" istanbul-reports: "npm:^3.1.7" - magic-string: "npm:^0.30.10" + magic-string: "npm:^0.30.11" magicast: "npm:^0.3.4" std-env: "npm:^3.7.0" test-exclude: "npm:^7.0.1" tinyrainbow: "npm:^1.2.0" peerDependencies: - vitest: 2.0.5 - checksum: 10/bb774d1a52b85adf94dcf62dc9684c59bd6aba6f8d43ce4d4afa06e3ca85651ec217f74842c0c4a81ea0158f029e484055207869e5d741cfbc3119257399fb83 + "@vitest/browser": 2.1.1 + vitest: 2.1.1 + peerDependenciesMeta: + "@vitest/browser": + optional: true + checksum: 10/f53e4ce5174b88007428faa0d253c62ed7cab6186172691f43e8a2fd2b7b569e8b06f92fd783f34c52f1251e7b5943be58515588b0634155be9c6a234b412b5b languageName: node linkType: hard -"@vitest/expect@npm:2.0.5": - version: 2.0.5 - resolution: "@vitest/expect@npm:2.0.5" +"@vitest/expect@npm:2.1.1": + version: 2.1.1 + resolution: "@vitest/expect@npm:2.1.1" dependencies: - "@vitest/spy": "npm:2.0.5" - "@vitest/utils": "npm:2.0.5" + "@vitest/spy": "npm:2.1.1" + "@vitest/utils": "npm:2.1.1" chai: "npm:^5.1.1" tinyrainbow: "npm:^1.2.0" - checksum: 10/ca9a218f50254b2259fd16166b2d8c9ccc8ee2cc068905e6b3d6281da10967b1590cc7d34b5fa9d429297f97e740450233745583b4cc12272ff11705faf70a37 + checksum: 10/ece8d7f9e0c083c5cf30c0df9e052bba4402649736293a18e56a8db4be46a847b18dc7b33cdd1c08bea51bf6f2cb021e40e7227d9cfc24fdba4a955bffe371a2 languageName: node linkType: hard -"@vitest/pretty-format@npm:2.0.5, @vitest/pretty-format@npm:^2.0.5": - version: 2.0.5 - resolution: "@vitest/pretty-format@npm:2.0.5" +"@vitest/mocker@npm:2.1.1": + version: 2.1.1 + resolution: "@vitest/mocker@npm:2.1.1" + dependencies: + "@vitest/spy": "npm:^2.1.0-beta.1" + estree-walker: "npm:^3.0.3" + magic-string: "npm:^0.30.11" + peerDependencies: + "@vitest/spy": 2.1.1 + msw: ^2.3.5 + vite: ^5.0.0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + checksum: 10/4fbdaac36e3f603235b131e25d9e561381bd989a34e49522e16652077021532ae6653907b47bbca93c14ae4629e3e6a8f61438e3812620dc5654b61595b45208 + languageName: node + linkType: hard + +"@vitest/pretty-format@npm:2.1.1, @vitest/pretty-format@npm:^2.1.1": + version: 2.1.1 + resolution: "@vitest/pretty-format@npm:2.1.1" dependencies: tinyrainbow: "npm:^1.2.0" - checksum: 10/70bf452dd0b8525e658795125b3f11110bd6baadfaa38c5bb91ca763bded35ec6dc80e27964ad4e91b91be6544d35e18ea7748c1997693988f975a7283c3e9a0 + checksum: 10/744278a3a91d080e51a94b03eaf7cf43779978d6391060cbfdda6d03194eef744ce8f12a2fe2fa90a9bf9b9f038d4c4c4d88f6192f042c88c5ee4125f38bf892 languageName: node linkType: hard -"@vitest/runner@npm:2.0.5": - version: 2.0.5 - resolution: "@vitest/runner@npm:2.0.5" +"@vitest/runner@npm:2.1.1": + version: 2.1.1 + resolution: "@vitest/runner@npm:2.1.1" dependencies: - "@vitest/utils": "npm:2.0.5" + "@vitest/utils": "npm:2.1.1" pathe: "npm:^1.1.2" - checksum: 10/464449abb84b3c779e1c6d1bedfc9e7469240ba3ccc4b4fa884386d1752d6572b68b9a87440159d433f17f61aca4012ee3bb78a3718d0e2bc64d810e9fc574a5 + checksum: 10/cf13a2f0bebb494484e60614ff0e7cab06f4310b36c96fe311035ab2eec9cbc057fa5702e904d43e8976fb2214fe550286ceb0b3dc1c72081e23eb1b1f8fa193 languageName: node linkType: hard -"@vitest/snapshot@npm:2.0.5": - version: 2.0.5 - resolution: "@vitest/snapshot@npm:2.0.5" +"@vitest/snapshot@npm:2.1.1": + version: 2.1.1 + resolution: "@vitest/snapshot@npm:2.1.1" dependencies: - "@vitest/pretty-format": "npm:2.0.5" - magic-string: "npm:^0.30.10" + "@vitest/pretty-format": "npm:2.1.1" + magic-string: "npm:^0.30.11" pathe: "npm:^1.1.2" - checksum: 10/fb46bc65851d4c8dcbbf86279c4146d5e7c17ad0d1be97132dedd98565d37f70ac8b0bf51ead0c6707786ffb15652535398c14d4304fa2146b0393d3db26fdff + checksum: 10/820f429d950cf63316464e7f2bc1f0ba4b7d2691c51f6ad03ba1c6edc7dbdc6a86b017c082f2a519b743ae53880b41366bbb596c8b43cf8cd68032f9433ec844 languageName: node linkType: hard -"@vitest/spy@npm:2.0.5": - version: 2.0.5 - resolution: "@vitest/spy@npm:2.0.5" +"@vitest/spy@npm:2.1.1, @vitest/spy@npm:^2.1.0-beta.1": + version: 2.1.1 + resolution: "@vitest/spy@npm:2.1.1" dependencies: tinyspy: "npm:^3.0.0" - checksum: 10/ed19f4c3bb4d3853241e8070979615138e24403ce4c137fa48c903b3af2c8b3ada2cc26aca9c1aa323bb314a457a8130a29acbb18dafd4e42737deefb2abf1ca + checksum: 10/47e83b4a3d091c4fdc2fbf861ccf2df697d3446a6c69d384b168f9c3e0fa1cabec03e52cc8bec1909735969176ac6272cc4dee8dda945ff059183a5c4568a488 languageName: node linkType: hard -"@vitest/utils@npm:2.0.5": - version: 2.0.5 - resolution: "@vitest/utils@npm:2.0.5" +"@vitest/utils@npm:2.1.1": + version: 2.1.1 + resolution: "@vitest/utils@npm:2.1.1" dependencies: - "@vitest/pretty-format": "npm:2.0.5" - estree-walker: "npm:^3.0.3" + "@vitest/pretty-format": "npm:2.1.1" loupe: "npm:^3.1.1" tinyrainbow: "npm:^1.2.0" - checksum: 10/d631d56d29c33bc8de631166b2b6691c470187a345469dfef7048befe6027e1c6ff9552f2ee11c8a247522c325c4a64bfcc73f8f0f0c525da39cb9f190f119f8 + checksum: 10/605f1807c343ac01cde053b062bda8f0cc51b321a3cd9c751424a1e24549a35120896bd58612a14f068460242013f69e08fc0a69355387e981a5a50bce9ae04e languageName: node linkType: hard -"@vue/compiler-core@npm:3.5.4": - version: 3.5.4 - resolution: "@vue/compiler-core@npm:3.5.4" +"@vue/compiler-core@npm:3.5.6": + version: 3.5.6 + resolution: "@vue/compiler-core@npm:3.5.6" dependencies: "@babel/parser": "npm:^7.25.3" - "@vue/shared": "npm:3.5.4" + "@vue/shared": "npm:3.5.6" entities: "npm:^4.5.0" estree-walker: "npm:^2.0.2" source-map-js: "npm:^1.2.0" - checksum: 10/1466e72f5c7ebc2bb8267b3737ee2f0e8f4f8337ee3add5fe29f9544dbefb6cc35aa162f2c45578a339f2e8b9f034368d4468b46f1cff9ddf015abff9e0727bf + checksum: 10/f65e22a48fbdd01cbcd022271ba1449ea75509e92400e015b87bb7c3bb0d2544b1ab25d991ca9340532de6088088559808547488877ce45e184262019ea9877a languageName: node linkType: hard -"@vue/compiler-dom@npm:3.5.4": - version: 3.5.4 - resolution: "@vue/compiler-dom@npm:3.5.4" +"@vue/compiler-dom@npm:3.5.6": + version: 3.5.6 + resolution: "@vue/compiler-dom@npm:3.5.6" dependencies: - "@vue/compiler-core": "npm:3.5.4" - "@vue/shared": "npm:3.5.4" - checksum: 10/73ef5e6808c27611b83ce9f54d0bbd2e5f96e3f9d2eccafafa8e56b1be1c747a53e245f2031cdf1cb14876e6c6aaa51fe083f9327ee415db0137da91d5e767f6 + "@vue/compiler-core": "npm:3.5.6" + "@vue/shared": "npm:3.5.6" + checksum: 10/1ca7e11fe8312ca88193565fcb173ea3e5e8aa072e3af03f14656ce2617bce12c9af8f31d2f8cffeeef55bb65f3a8e4f827c4c00d27925285f2b151cb191094a languageName: node linkType: hard "@vue/compiler-sfc@npm:^3.4.27": - version: 3.5.4 - resolution: "@vue/compiler-sfc@npm:3.5.4" + version: 3.5.6 + resolution: "@vue/compiler-sfc@npm:3.5.6" dependencies: "@babel/parser": "npm:^7.25.3" - "@vue/compiler-core": "npm:3.5.4" - "@vue/compiler-dom": "npm:3.5.4" - "@vue/compiler-ssr": "npm:3.5.4" - "@vue/shared": "npm:3.5.4" + "@vue/compiler-core": "npm:3.5.6" + "@vue/compiler-dom": "npm:3.5.6" + "@vue/compiler-ssr": "npm:3.5.6" + "@vue/shared": "npm:3.5.6" estree-walker: "npm:^2.0.2" magic-string: "npm:^0.30.11" - postcss: "npm:^8.4.44" + postcss: "npm:^8.4.47" source-map-js: "npm:^1.2.0" - checksum: 10/ebb33ad35f4984d1519b631f022fd89e5c5ce0c2ee9ac8fc3725a20d0943b74e79463c3986b810ea8309b5c59becb07fdc12e5bc3d1111137bd8fdadcb1958c0 + checksum: 10/6ee3b33d18c9cd2ee4994bd1399fd4c0cc411f00d9f24882d38d5fa38b866cb7ed9eebd665f7a66a23eb1b2b61860f8241f4eaf099b965ddfd30f41f1cf8ccc7 languageName: node linkType: hard -"@vue/compiler-ssr@npm:3.5.4": - version: 3.5.4 - resolution: "@vue/compiler-ssr@npm:3.5.4" +"@vue/compiler-ssr@npm:3.5.6": + version: 3.5.6 + resolution: "@vue/compiler-ssr@npm:3.5.6" dependencies: - "@vue/compiler-dom": "npm:3.5.4" - "@vue/shared": "npm:3.5.4" - checksum: 10/0ea9e282df7f2b770685a886cdc3daa08fce2d0a05205854eb622446529b6a068f843e5fd660b349aa8c9446cc0047fd339a271cb26e6a40eaa82a776a2f777e + "@vue/compiler-dom": "npm:3.5.6" + "@vue/shared": "npm:3.5.6" + checksum: 10/f356decb5b7515e604bf055689cff6052b2cc2301aac5bbf8da392aa66f5164848a6a3d59ad0697d8e6355aeb1387a13ade7350861123ada4cf53ee78f551abf languageName: node linkType: hard -"@vue/shared@npm:3.5.4": - version: 3.5.4 - resolution: "@vue/shared@npm:3.5.4" - checksum: 10/518c086bd6a87649a5cce8e4548fb013de0261169794ef7d18fbf97d88ba29cd83fe53d170ad3f2108adbcd710a66306de72dd13cf1733e1e1e3f8597120a5be +"@vue/shared@npm:3.5.6": + version: 3.5.6 + resolution: "@vue/shared@npm:3.5.6" + checksum: 10/81864ade53cd97558e975d3f50d6e4e4c48313a7aa60a99a3c602149b4d43d3b0cb07dd6f30a8f282de062e6209f7c6c87b7fa4a5e65e96650c38ddc6474b23d languageName: node linkType: hard @@ -1833,16 +1852,6 @@ __metadata: languageName: node linkType: hard -"babel-runtime@npm:^6.23.0": - version: 6.26.0 - resolution: "babel-runtime@npm:6.26.0" - dependencies: - core-js: "npm:^2.4.0" - regenerator-runtime: "npm:^0.11.0" - checksum: 10/2cdf0f083b9598a43cdb11cbf1e7060584079a9a2230f06aec997ba81e887ef17fdcb5ad813a484ee099e06d2de0cea832bdd3011c06325acb284284c754ee8f - languageName: node - linkType: hard - "balanced-match@npm:^1.0.0": version: 1.0.2 resolution: "balanced-match@npm:1.0.2" @@ -2069,7 +2078,7 @@ __metadata: languageName: node linkType: hard -"chalk@npm:^2.0.1, chalk@npm:^2.4.2": +"chalk@npm:^2.4.2": version: 2.4.2 resolution: "chalk@npm:2.4.2" dependencies: @@ -2136,7 +2145,7 @@ __metadata: languageName: node linkType: hard -"cli-spinners@npm:^2.5.0, cli-spinners@npm:^2.9.2": +"cli-spinners@npm:^2.5.0": version: 2.9.2 resolution: "cli-spinners@npm:2.9.2" checksum: 10/a0a863f442df35ed7294424f5491fa1756bd8d2e4ff0c8736531d886cec0ece4d85e8663b77a5afaf1d296e3cbbebff92e2e99f52bbea89b667cbe789b994794 @@ -2534,13 +2543,6 @@ __metadata: languageName: node linkType: hard -"core-js@npm:^2.4.0": - version: 2.6.12 - resolution: "core-js@npm:2.6.12" - checksum: 10/7c624eb00a59c74c769d5d80f751f3bf1fc6201205b6562f27286ad5e00bbca1483f2f7eb0c2854b86f526ef5c7dc958b45f2ff536f8a31b8e9cb1a13a96efca - languageName: node - linkType: hard - "core-util-is@npm:~1.0.0": version: 1.0.3 resolution: "core-util-is@npm:1.0.3" @@ -2617,7 +2619,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:4, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:^4.3.5, debug@npm:~4.3.6": +"debug@npm:4, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:^4.3.5, debug@npm:^4.3.6, debug@npm:~4.3.6": version: 4.3.7 resolution: "debug@npm:4.3.7" dependencies: @@ -3158,15 +3160,15 @@ __metadata: languageName: node linkType: hard -"eslint@npm:^8.57.0": - version: 8.57.0 - resolution: "eslint@npm:8.57.0" +"eslint@npm:^8.57.1": + version: 8.57.1 + resolution: "eslint@npm:8.57.1" dependencies: "@eslint-community/eslint-utils": "npm:^4.2.0" "@eslint-community/regexpp": "npm:^4.6.1" "@eslint/eslintrc": "npm:^2.1.4" - "@eslint/js": "npm:8.57.0" - "@humanwhocodes/config-array": "npm:^0.11.14" + "@eslint/js": "npm:8.57.1" + "@humanwhocodes/config-array": "npm:^0.13.0" "@humanwhocodes/module-importer": "npm:^1.0.1" "@nodelib/fs.walk": "npm:^1.2.8" "@ungap/structured-clone": "npm:^1.2.0" @@ -3202,7 +3204,7 @@ __metadata: text-table: "npm:^0.2.0" bin: eslint: bin/eslint.js - checksum: 10/00496e218b23747a7a9817bf58b522276d0dc1f2e546dceb4eea49f9871574088f72f1f069a6b560ef537efa3a75261b8ef70e51ef19033da1cc4c86a755ef15 + checksum: 10/5504fa24879afdd9f9929b2fbfc2ee9b9441a3d464efd9790fbda5f05738858530182029f13323add68d19fec749d3ab4a70320ded091ca4432b1e9cc4ed104c languageName: node linkType: hard @@ -3300,7 +3302,7 @@ __metadata: languageName: node linkType: hard -"execa@npm:^8.0.1, execa@npm:~8.0.1": +"execa@npm:~8.0.1": version: 8.0.1 resolution: "execa@npm:8.0.1" dependencies: @@ -4725,7 +4727,7 @@ __metadata: languageName: node linkType: hard -"magic-string@npm:^0.30.10, magic-string@npm:^0.30.11": +"magic-string@npm:^0.30.11": version: 0.30.11 resolution: "magic-string@npm:0.30.11" dependencies: @@ -5042,15 +5044,15 @@ __metadata: languageName: node linkType: hard -"msw@npm:^2.4.5": - version: 2.4.5 - resolution: "msw@npm:2.4.5" +"msw@npm:^2.4.8": + version: 2.4.8 + resolution: "msw@npm:2.4.8" dependencies: "@bundled-es-modules/cookie": "npm:^2.0.0" "@bundled-es-modules/statuses": "npm:^1.0.1" "@bundled-es-modules/tough-cookie": "npm:^0.1.6" "@inquirer/confirm": "npm:^3.0.0" - "@mswjs/interceptors": "npm:^0.35.0" + "@mswjs/interceptors": "npm:^0.35.6" "@open-draft/until": "npm:^2.1.0" "@types/cookie": "npm:^0.6.0" "@types/statuses": "npm:^2.0.4" @@ -5059,7 +5061,7 @@ __metadata: headers-polyfill: "npm:^4.0.2" is-node-process: "npm:^1.2.0" outvariant: "npm:^1.4.2" - path-to-regexp: "npm:^6.2.0" + path-to-regexp: "npm:^6.3.0" strict-event-emitter: "npm:^0.5.1" type-fest: "npm:^4.9.0" yargs: "npm:^17.7.2" @@ -5070,7 +5072,7 @@ __metadata: optional: true bin: msw: cli/index.js - checksum: 10/72633a1d405ba2908e0309c19cbf8c39ce6ab8d78da415650bacb95de89f1ec340f0debc1483b0e51dfa0c3e7e271a5913e0338e701fd1e7d185aa0a805765ee + checksum: 10/bbb290ed9aeaa2ea72d60dfc669256fc3998fb96f81f280d8a9e5455543015f361b9da0ff99cd31e47f71461a11fdb59dec4a01418a777da41b75e2db80c57c5 languageName: node linkType: hard @@ -5501,7 +5503,7 @@ __metadata: languageName: node linkType: hard -"path-to-regexp@npm:^6.2.0": +"path-to-regexp@npm:^6.3.0": version: 6.3.0 resolution: "path-to-regexp@npm:6.3.0" checksum: 10/6822f686f01556d99538b350722ef761541ec0ce95ca40ce4c29e20a5b492fe8361961f57993c71b2418de12e604478dcf7c430de34b2c31a688363a7a944d9c @@ -5538,7 +5540,7 @@ __metadata: languageName: node linkType: hard -"picocolors@npm:^1.0.0, picocolors@npm:^1.0.1": +"picocolors@npm:^1.0.0, picocolors@npm:^1.1.0": version: 1.1.0 resolution: "picocolors@npm:1.1.0" checksum: 10/a2ad60d94d185c30f2a140b19c512547713fb89b920d32cc6cf658fa786d63a37ba7b8451872c3d9fc34883971fb6e5878e07a20b60506e0bb2554dce9169ccb @@ -5604,14 +5606,14 @@ __metadata: languageName: node linkType: hard -"postcss@npm:^8.4.40, postcss@npm:^8.4.43, postcss@npm:^8.4.44": - version: 8.4.45 - resolution: "postcss@npm:8.4.45" +"postcss@npm:^8.4.40, postcss@npm:^8.4.43, postcss@npm:^8.4.47": + version: 8.4.47 + resolution: "postcss@npm:8.4.47" dependencies: nanoid: "npm:^3.3.7" - picocolors: "npm:^1.0.1" - source-map-js: "npm:^1.2.0" - checksum: 10/7eaf7346d04929ee979548ece5e34d253eae6f175346e298b2c4621ad6f4ee00adfe7abe72688640e910c0361ae50537c5dda3e35fd1066491282c342b3ee5c8 + picocolors: "npm:^1.1.0" + source-map-js: "npm:^1.2.1" + checksum: 10/f2b50ba9b6fcb795232b6bb20de7cdc538c0025989a8ed9c4438d1960196ba3b7eaff41fdb1a5c701b3504651ea87aeb685577707f0ae4d6ce6f3eae5df79a81 languageName: node linkType: hard @@ -5841,13 +5843,6 @@ __metadata: languageName: node linkType: hard -"regenerator-runtime@npm:^0.11.0": - version: 0.11.1 - resolution: "regenerator-runtime@npm:0.11.1" - checksum: 10/64e62d78594c227e7d5269811bca9e4aa6451332adaae8c79a30cab0fa98733b1ad90bdb9d038095c340c6fad3b414a49a8d9e0b6b424ab7ff8f94f35704f8a2 - languageName: node - linkType: hard - "regenerator-runtime@npm:^0.14.0": version: 0.14.1 resolution: "regenerator-runtime@npm:0.14.1" @@ -6247,7 +6242,7 @@ __metadata: languageName: node linkType: hard -"source-map-js@npm:^1.2.0": +"source-map-js@npm:^1.2.0, source-map-js@npm:^1.2.1": version: 1.2.1 resolution: "source-map-js@npm:1.2.1" checksum: 10/ff9d8c8bf096d534a5b7707e0382ef827b4dd360a577d3f34d2b9f48e12c9d230b5747974ee7c607f0df65113732711bb701fe9ece3c7edbd43cb2294d707df3 @@ -6677,7 +6672,7 @@ __metadata: languageName: node linkType: hard -"tinybench@npm:^2.8.0": +"tinybench@npm:^2.9.0": version: 2.9.0 resolution: "tinybench@npm:2.9.0" checksum: 10/cfa1e1418e91289219501703c4693c70708c91ffb7f040fd318d24aef419fb5a43e0c0160df9471499191968b2451d8da7f8087b08c3133c251c40d24aced06c @@ -7026,9 +7021,9 @@ __metadata: languageName: node linkType: hard -"viem@npm:^2.21.6": - version: 2.21.6 - resolution: "viem@npm:2.21.6" +"viem@npm:^2.21.8": + version: 2.21.8 + resolution: "viem@npm:2.21.8" dependencies: "@adraffy/ens-normalize": "npm:1.10.0" "@noble/curves": "npm:1.4.0" @@ -7044,28 +7039,27 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 10/f515b27beacaf9642052c85c5f8ef17819359618ed1d43bf9b8d9da6d8a0d32f8621e4be704981fcaefcc94580ac8f39c52b0ed8ee929441998521a06dc77486 + checksum: 10/158976108ed04de22cd01e2897b9fe4961c0f07c04eb8f3ab87f2f73aabc59e56cf83b49979508c90c45634cb1806dd2144428c9e27c19b674461211b8fa2959 languageName: node linkType: hard -"vite-node@npm:2.0.5": - version: 2.0.5 - resolution: "vite-node@npm:2.0.5" +"vite-node@npm:2.1.1": + version: 2.1.1 + resolution: "vite-node@npm:2.1.1" dependencies: cac: "npm:^6.7.14" - debug: "npm:^4.3.5" + debug: "npm:^4.3.6" pathe: "npm:^1.1.2" - tinyrainbow: "npm:^1.2.0" vite: "npm:^5.0.0" bin: vite-node: vite-node.mjs - checksum: 10/de259cdf4b9ff82f39ba92ffca99db8a80783efd2764d3553b62cd8c8864488d590114a75bc93a93bf5ba2a2086bea1bee4b0029da9e62c4c0d3bf6c1f364eed + checksum: 10/c21892b560cad87414ef774d7e53b207e8d66b511b7ef085940fd2f2160d8f6c42dfa9af2ef5465e775b767fc3312ec5b3418b898041f592b8e0b093b4b7110a languageName: node linkType: hard "vite@npm:^5.0.0": - version: 5.4.4 - resolution: "vite@npm:5.4.4" + version: 5.4.6 + resolution: "vite@npm:5.4.6" dependencies: esbuild: "npm:^0.21.3" fsevents: "npm:~2.3.3" @@ -7102,38 +7096,38 @@ __metadata: optional: true bin: vite: bin/vite.js - checksum: 10/8c2ded5cc99464362d35af6b78bd6466b9c36533a26311d360c327d0a1580d0016f4f3c4828ded5945be4adc2990f257eae85ff95b4522a6d040cdfef6e5f7b2 + checksum: 10/8489fa55c48675fc12b64bf7af58b5e2f8a11b2aebc63cb177861bd53dc196d7c496d6918f5a8c48828f51b6fe498166a1a2350334bbfaae10d015a0c71f1c77 languageName: node linkType: hard -"vitest@npm:^2.0.5": - version: 2.0.5 - resolution: "vitest@npm:2.0.5" - dependencies: - "@ampproject/remapping": "npm:^2.3.0" - "@vitest/expect": "npm:2.0.5" - "@vitest/pretty-format": "npm:^2.0.5" - "@vitest/runner": "npm:2.0.5" - "@vitest/snapshot": "npm:2.0.5" - "@vitest/spy": "npm:2.0.5" - "@vitest/utils": "npm:2.0.5" +"vitest@npm:^2.1.1": + version: 2.1.1 + resolution: "vitest@npm:2.1.1" + dependencies: + "@vitest/expect": "npm:2.1.1" + "@vitest/mocker": "npm:2.1.1" + "@vitest/pretty-format": "npm:^2.1.1" + "@vitest/runner": "npm:2.1.1" + "@vitest/snapshot": "npm:2.1.1" + "@vitest/spy": "npm:2.1.1" + "@vitest/utils": "npm:2.1.1" chai: "npm:^5.1.1" - debug: "npm:^4.3.5" - execa: "npm:^8.0.1" - magic-string: "npm:^0.30.10" + debug: "npm:^4.3.6" + magic-string: "npm:^0.30.11" pathe: "npm:^1.1.2" std-env: "npm:^3.7.0" - tinybench: "npm:^2.8.0" + tinybench: "npm:^2.9.0" + tinyexec: "npm:^0.3.0" tinypool: "npm:^1.0.0" tinyrainbow: "npm:^1.2.0" vite: "npm:^5.0.0" - vite-node: "npm:2.0.5" + vite-node: "npm:2.1.1" why-is-node-running: "npm:^2.3.0" peerDependencies: "@edge-runtime/vm": "*" "@types/node": ^18.0.0 || >=20.0.0 - "@vitest/browser": 2.0.5 - "@vitest/ui": 2.0.5 + "@vitest/browser": 2.1.1 + "@vitest/ui": 2.1.1 happy-dom: "*" jsdom: "*" peerDependenciesMeta: @@ -7151,7 +7145,7 @@ __metadata: optional: true bin: vitest: vitest.mjs - checksum: 10/abb916e3496a3fa9e9d05ecd806332dc4000aa0e433f0cb1e99f9dd1fa5c06d2c66656874b9860a683cec0f32abe1519599babef02e5c0ca80e9afbcdbddfdbd + checksum: 10/5bbbc7298a043c7ca0914817a2c30e18af5a1619f4a750d36056f64f4d907a1fad50b8bab93aaf39f8174eb475108c9287f6e226e24d3a3ccd6f0b71d3f56438 languageName: node linkType: hard