diff --git a/package.json b/package.json index 469c78c26..f80510d49 100644 --- a/package.json +++ b/package.json @@ -52,12 +52,13 @@ "lint:fix": "yarn lint:eslint --fix && yarn lint:constraints --fix && yarn lint:misc --write && yarn lint:dependencies && yarn lint:changelog", "lint:misc": "prettier '**/*.json' '**/*.md' '!CHANGELOG.md' '**/*.yml' '!.yarnrc.yml' --ignore-path .gitignore --no-error-on-unmatched-pattern", "prepack": "./scripts/prepack.sh", - "test": "yarn test:source && yarn test:types", - "test:source": "jest && jest-it-up", - "test:types": "tsd", - "test:watch": "jest --watch" + "test": "vitest", + "test:watch": "vitest --watch", + "test:jest": "jest && jest-it-up", + "test:types:tsd": "tsd" }, "resolutions": { + "istanbul-lib-coverage": "^3.2.2", "jest-worker@^28.1.3": "patch:jest-worker@npm%3A28.1.3#./.yarn/patches/jest-worker-npm-28.1.3-5d0ff9006c.patch" }, "dependencies": { @@ -84,11 +85,11 @@ "@ts-bridge/cli": "^0.1.2", "@ts-bridge/shims": "^0.1.1", "@types/jest": "^28.1.7", - "@types/jest-when": "^3.5.3", "@types/node": "~18.18.14", "@types/uuid": "^9.0.8", "@typescript-eslint/eslint-plugin": "^5.43.0", "@typescript-eslint/parser": "^5.43.0", + "@vitest/coverage-istanbul": "^2.1.0", "depcheck": "^1.4.7", "eslint": "^8.44.0", "eslint-config-prettier": "^8.8.0", @@ -100,7 +101,6 @@ "eslint-plugin-promise": "^6.1.1", "jest": "^29.2.2", "jest-it-up": "^2.0.2", - "jest-when": "^3.6.0", "prettier": "^2.7.1", "prettier-plugin-packagejson": "^2.3.0", "stdio-mock": "^1.2.0", @@ -109,6 +109,7 @@ "tsd": "^0.29.0", "typedoc": "^0.23.15", "typescript": "~5.0.4", + "vitest": "^2.1.0", "web3": "^4.16.0" }, "packageManager": "yarn@3.8.5", @@ -121,7 +122,8 @@ }, "lavamoat": { "allowScripts": { - "@lavamoat/preinstall-always-fail": false + "@lavamoat/preinstall-always-fail": false, + "vitest>vite>esbuild": false } }, "tsd": { diff --git a/src/__fixtures__/json.ts b/src/__fixtures__/json.ts index b5a565a28..f7df437d3 100644 --- a/src/__fixtures__/json.ts +++ b/src/__fixtures__/json.ts @@ -1170,6 +1170,7 @@ REVOKED_OBJECT_PROXY.revoke(); export const JSON_VALIDATION_FIXTURES = [ { + label: 'object with string value', value: { a: 'bc', }, @@ -1177,6 +1178,7 @@ export const JSON_VALIDATION_FIXTURES = [ size: 10, }, { + label: 'object with number value', value: { a: 1234, }, @@ -1184,6 +1186,7 @@ export const JSON_VALIDATION_FIXTURES = [ size: 10, }, { + label: 'object with UTF-8 string value', value: { a: 'bcลกeฤf', }, @@ -1191,6 +1194,7 @@ export const JSON_VALIDATION_FIXTURES = [ size: 16, }, { + label: 'array of floats', value: [ -5e-11, 5e-9, 0.000000000001, -0.00000000009, 100000.00000008, -100.88888, 0.333, 1000000000000, @@ -1199,6 +1203,7 @@ export const JSON_VALIDATION_FIXTURES = [ size: 73, }, { + label: 'deeply nested object with mixed types and encodings', value: { data: { account: { @@ -1285,6 +1290,7 @@ export const JSON_VALIDATION_FIXTURES = [ size: 1288, }, { + label: 'object with Date values', value: { dates: { someDate: new Date(), @@ -1296,37 +1302,44 @@ export const JSON_VALIDATION_FIXTURES = [ size: 107, }, { + label: 'nested array with null', value: ['foo', 'bar', null, ['foo', 'bar', null]], valid: true, size: 37, }, { + label: 'null', value: null, valid: true, size: 4, }, { + label: 'true', value: true, valid: true, size: 4, }, { + label: 'false', value: false, valid: true, size: 5, }, { + label: 'string', value: 'str', valid: true, size: 5, }, { + label: 'number', value: 123, valid: true, size: 3, }, { + label: 'object with undefined value', value: { a: undefined, }, @@ -1334,6 +1347,7 @@ export const JSON_VALIDATION_FIXTURES = [ size: 0, }, { + label: 'deeply nested object with function value', value: { levelOne: { levelTwo: { @@ -1351,6 +1365,7 @@ export const JSON_VALIDATION_FIXTURES = [ size: 0, }, { + label: 'object with Symbol value', value: { mySymbol: Symbol('MySymbol'), }, @@ -1358,6 +1373,7 @@ export const JSON_VALIDATION_FIXTURES = [ size: 0, }, { + label: 'array with function element', value: [ function () { return 'whatever'; @@ -1372,82 +1388,98 @@ export const JSON_VALIDATION_FIXTURES = [ // https://github.com/tc39/test262/tree/main/test/built-ins/JSON/stringify /* eslint-disable no-new-wrappers */ { + label: 'Boolean object (true)', value: new Boolean(true), valid: true, size: 4, }, { + label: 'object with Boolean object value (false)', value: { key: new Boolean(false) }, valid: true, size: 13, }, { + label: 'Boolean object (false)', value: new Boolean(false), valid: true, size: 5, }, { + label: 'Number object', value: new Number(3.14), valid: true, size: 4, }, { + label: 'String object', value: new String('str'), valid: true, size: 5, }, /* eslint-enable no-new-wrappers */ { + label: 'negative zero', value: -0, valid: true, size: 1, }, { + label: 'array with negative zero', value: ['-0', 0, -0], valid: true, size: 10, }, { + label: 'object with negative zero value', value: { key: -0 }, valid: true, size: 9, }, { + label: 'Infinity', value: Infinity, valid: false, size: 0, }, { + label: 'object with -Infinity value', value: { key: -Infinity }, valid: false, size: 0, }, { + label: 'character map object', value: CHARACTER_MAP, valid: true, size: 593, }, { + label: 'character map keys joined', value: Object.keys(CHARACTER_MAP).join(''), valid: true, size: 178, }, { + label: 'character map keys reversed and joined', value: Object.keys(CHARACTER_MAP).reverse().join(''), valid: true, size: 178, }, { + label: 'character map values joined', value: Object.values(CHARACTER_MAP).join(''), valid: true, size: 214, }, { + label: 'character map values reversed and joined', value: Object.values(CHARACTER_MAP).reverse().join(''), valid: true, size: 214, }, { + label: 'object with toJSON: null', value: { toJSON: null, }, @@ -1455,26 +1487,31 @@ export const JSON_VALIDATION_FIXTURES = [ size: 15, }, { + label: 'object with toJSON: false', value: { toJSON: false }, valid: true, size: 16, }, { + label: 'object with toJSON: []', value: { toJSON: [] }, valid: true, size: 13, }, { + label: 'object with duplicate references', value: DUPLICATE_REFERENCE, valid: true, size: 552, }, { + label: 'object containing a revoked Proxy', value: { a: { b: REVOKED_OBJECT_PROXY.proxy } }, valid: false, size: 0, }, { + label: 'object with throwing getter', value: { get key() { throw new Error(); @@ -1484,26 +1521,31 @@ export const JSON_VALIDATION_FIXTURES = [ size: 0, }, { + label: 'undefined', value: undefined, valid: false, size: 0, }, { + label: 'direct circular reference (array)', value: DIRECT_CIRCULAR_REFERENCE_ARRAY, valid: false, size: 0, }, { + label: 'indirect circular reference (array)', value: INDIRECT_CIRCULAR_REFERENCE_ARRAY, valid: false, size: 0, }, { + label: 'direct circular reference (object)', value: DIRECT_CIRCULAR_REFERENCE_OBJECT, valid: false, size: 0, }, { + label: 'indirect circular reference (object)', value: INDIRECT_CIRCULAR_REFERENCE_OBJECT, valid: false, size: 0, diff --git a/src/assert.test.ts b/src/assert.test.ts index 787288e9c..80e8ea401 100644 --- a/src/assert.test.ts +++ b/src/assert.test.ts @@ -1,4 +1,5 @@ import { string, assert as superstructAssert } from '@metamask/superstruct'; +import { vi, type MockedFunction } from 'vitest'; import { assert, @@ -7,9 +8,9 @@ import { assertStruct, } from './assert'; -jest.mock('@metamask/superstruct', () => ({ - ...jest.requireActual('@metamask/superstruct'), - assert: jest.fn(), +vi.mock('@metamask/superstruct', async (importOriginal) => ({ + ...(await importOriginal()), + assert: vi.fn(), })); describe('assert', () => { @@ -49,11 +50,14 @@ describe('assertExhaustive', () => { }); describe('assertStruct', () => { - beforeEach(() => { - const actual = jest.requireActual('@metamask/superstruct'); - ( - superstructAssert as jest.MockedFunction - ).mockImplementation(actual.assert); + beforeEach(async () => { + const actual = + await vi.importActual( + '@metamask/superstruct', + ); + (superstructAssert as MockedFunction).mockImplementation( + actual.assert, + ); }); it('does not throw for a valid value', () => { @@ -110,7 +114,7 @@ describe('assertStruct', () => { it('includes the value thrown in the message if it is not an error', () => { ( - superstructAssert as jest.MockedFunction + superstructAssert as MockedFunction ).mockImplementation(() => { // eslint-disable-next-line @typescript-eslint/no-throw-literal throw 'foo.'; diff --git a/src/caip-types.test-d.ts b/src/caip-types.test-d.ts index 0afcfc029..21d726cf9 100644 --- a/src/caip-types.test-d.ts +++ b/src/caip-types.test-d.ts @@ -1,4 +1,4 @@ -import { expectAssignable, expectNotAssignable } from 'tsd'; +import { expectTypeOf } from 'vitest'; import type { CaipAccountAddress, @@ -12,79 +12,69 @@ import type { CaipReference, } from '.'; -const embeddedString = 'test'; +const embeddedString = 'test' as const; // Valid caip strings: -expectAssignable('namespace:reference'); -expectAssignable('namespace:'); -expectAssignable(':reference'); -expectAssignable(`${embeddedString}:${embeddedString}`); - -expectAssignable('string'); -expectAssignable(`${embeddedString}`); - -expectAssignable('string'); -expectAssignable(`${embeddedString}`); - -expectAssignable('namespace:reference:accountAddress'); -expectAssignable('namespace:reference:'); -expectAssignable(':reference:accountAddress'); -expectAssignable( - `${embeddedString}:${embeddedString}:${embeddedString}`, -); - -expectAssignable('string'); -expectAssignable(`${embeddedString}`); - -expectAssignable('string'); -expectAssignable(`${embeddedString}`); - -expectAssignable('string'); -expectAssignable(`${embeddedString}`); - -expectAssignable( - 'namespace:reference/assetNamespace:assetReference', -); -expectAssignable('namespace:reference/:'); -expectAssignable(':reference/assetNamespace:'); -expectAssignable( - `${embeddedString}:${embeddedString}/${embeddedString}:${embeddedString}`, -); - -expectAssignable( - 'namespace:reference/assetNamespace:assetReference/tokenId', -); -expectAssignable('namespace:reference/:assetReference/'); -expectAssignable(':reference/assetNamespace:/'); -expectAssignable( - `${embeddedString}:${embeddedString}/${embeddedString}:${embeddedString}/${embeddedString}`, -); +expectTypeOf<'namespace:reference'>().toMatchTypeOf(); +expectTypeOf<'namespace:'>().toMatchTypeOf(); +expectTypeOf<':reference'>().toMatchTypeOf(); +expectTypeOf<`${typeof embeddedString}:${typeof embeddedString}`>().toMatchTypeOf(); + +expectTypeOf<'string'>().toMatchTypeOf(); +expectTypeOf<`${typeof embeddedString}`>().toMatchTypeOf(); + +expectTypeOf<'string'>().toMatchTypeOf(); +expectTypeOf<`${typeof embeddedString}`>().toMatchTypeOf(); + +expectTypeOf<'namespace:reference:accountAddress'>().toMatchTypeOf(); +expectTypeOf<'namespace:reference:'>().toMatchTypeOf(); +expectTypeOf<':reference:accountAddress'>().toMatchTypeOf(); +expectTypeOf<`${typeof embeddedString}:${typeof embeddedString}:${typeof embeddedString}`>().toMatchTypeOf(); + +expectTypeOf<'string'>().toMatchTypeOf(); +expectTypeOf<`${typeof embeddedString}`>().toMatchTypeOf(); + +expectTypeOf<'string'>().toMatchTypeOf(); +expectTypeOf<`${typeof embeddedString}`>().toMatchTypeOf(); + +expectTypeOf<'string'>().toMatchTypeOf(); +expectTypeOf<`${typeof embeddedString}`>().toMatchTypeOf(); + +expectTypeOf<'namespace:reference/assetNamespace:assetReference'>().toMatchTypeOf(); +expectTypeOf<'namespace:reference/:'>().toMatchTypeOf(); +expectTypeOf<':reference/assetNamespace:'>().toMatchTypeOf(); +expectTypeOf<`${typeof embeddedString}:${typeof embeddedString}/${typeof embeddedString}:${typeof embeddedString}`>().toMatchTypeOf(); + +expectTypeOf<'namespace:reference/assetNamespace:assetReference/tokenId'>().toMatchTypeOf(); +expectTypeOf<'namespace:reference/:assetReference/'>().toMatchTypeOf(); +expectTypeOf<':reference/assetNamespace:/'>().toMatchTypeOf(); +expectTypeOf<`${typeof embeddedString}:${typeof embeddedString}/${typeof embeddedString}:${typeof embeddedString}/${typeof embeddedString}`>().toMatchTypeOf(); // Not valid caip strings: -expectAssignable('namespace:๐Ÿ˜€'); -expectAssignable('๐Ÿ˜€:reference'); -expectNotAssignable(0); -expectNotAssignable('๐Ÿ™ƒ'); +expectTypeOf<'namespace:๐Ÿ˜€'>().toMatchTypeOf(); +expectTypeOf<'๐Ÿ˜€:reference'>().toMatchTypeOf(); +expectTypeOf().not.toMatchTypeOf(); +expectTypeOf<'๐Ÿ™ƒ'>().not.toMatchTypeOf(); -expectNotAssignable(0); +expectTypeOf().not.toMatchTypeOf(); -expectNotAssignable(0); +expectTypeOf().not.toMatchTypeOf(); -expectAssignable('namespace:reference:๐Ÿ˜€'); -expectAssignable('๐Ÿ˜€:reference:accountAddress'); -expectNotAssignable(0); -expectNotAssignable('๐Ÿ™ƒ'); +expectTypeOf<'namespace:reference:๐Ÿ˜€'>().toMatchTypeOf(); +expectTypeOf<'๐Ÿ˜€:reference:accountAddress'>().toMatchTypeOf(); +expectTypeOf().not.toMatchTypeOf(); +expectTypeOf<'๐Ÿ™ƒ'>().not.toMatchTypeOf(); -expectNotAssignable(0); +expectTypeOf().not.toMatchTypeOf(); -expectNotAssignable(0); +expectTypeOf().not.toMatchTypeOf(); -expectNotAssignable(0); +expectTypeOf().not.toMatchTypeOf(); -expectNotAssignable(0); -expectNotAssignable('๐Ÿ™ƒ'); +expectTypeOf().not.toMatchTypeOf(); +expectTypeOf<'๐Ÿ™ƒ'>().not.toMatchTypeOf(); -expectNotAssignable(0); -expectNotAssignable('๐Ÿ™ƒ'); +expectTypeOf().not.toMatchTypeOf(); +expectTypeOf<'๐Ÿ™ƒ'>().not.toMatchTypeOf(); diff --git a/src/collections.test.ts b/src/collections.test.ts index b2ca80e0c..fdbe717eb 100644 --- a/src/collections.test.ts +++ b/src/collections.test.ts @@ -1,3 +1,5 @@ +import { vi } from 'vitest'; + import { FrozenMap, FrozenSet } from './collections'; describe('FrozenMap', () => { @@ -82,7 +84,7 @@ describe('FrozenMap', () => { ['b', 2], ['c', 3], ]); - const deleteSpy = jest.spyOn(expected, 'delete'); + const deleteSpy = vi.spyOn(expected, 'delete'); const frozenMap = new FrozenMap([ ['a', 1], @@ -300,7 +302,7 @@ describe('FrozenSet', () => { describe('forEach', () => { it('iterates over the set', () => { const expected = new Set(['a', 'b', 'c']); - const deleteSpy = jest.spyOn(expected, 'delete'); + const deleteSpy = vi.spyOn(expected, 'delete'); const frozenSet = new FrozenSet(['a', 'b', 'c']); diff --git a/src/fs.test.ts b/src/fs.test.ts index cffb5a885..343dbffb2 100644 --- a/src/fs.test.ts +++ b/src/fs.test.ts @@ -1,9 +1,9 @@ import fs from 'fs'; -import { when } from 'jest-when'; import os from 'os'; import path from 'path'; import util from 'util'; import * as uuid from 'uuid'; +import { vi } from 'vitest'; import { createSandbox, @@ -20,14 +20,9 @@ import { const { withinSandbox } = createSandbox('utils'); // Clone the `uuid` module so that we can spy on its exports -jest.mock('uuid', () => { - return { - // This is how to mock an ES-compatible module in Jest. - // eslint-disable-next-line @typescript-eslint/naming-convention - __esModule: true, - ...jest.requireActual('uuid'), - }; -}); +vi.mock('uuid', async (importOriginal) => ({ + ...(await importOriginal()), +})); describe('fs', () => { describe('readFile', () => { @@ -436,9 +431,7 @@ describe('fs', () => { const error: any = new Error('oops'); error.code = 'ESOMETHING'; error.stack = 'some stack'; - when(jest.spyOn(fs.promises, 'stat')) - .calledWith(entryPath) - .mockRejectedValue(error); + vi.spyOn(fs.promises, 'stat').mockRejectedValue(error); await expect(fileExists(entryPath)).rejects.toThrow( expect.objectContaining({ @@ -495,9 +488,7 @@ describe('fs', () => { const error: any = new Error('oops'); error.code = 'ESOMETHING'; error.stack = 'some stack'; - when(jest.spyOn(fs.promises, 'stat')) - .calledWith(entryPath) - .mockRejectedValue(error); + vi.spyOn(fs.promises, 'stat').mockRejectedValue(error); await expect(directoryExists(entryPath)).rejects.toThrow( expect.objectContaining({ @@ -605,12 +596,7 @@ describe('fs', () => { const error: any = new Error('oops'); error.code = 'ESOMETHING'; error.stack = 'some stack'; - when(jest.spyOn(fs.promises, 'rm')) - .calledWith(filePath, { - recursive: true, - force: true, - }) - .mockRejectedValue(error); + vi.spyOn(fs.promises, 'rm').mockRejectedValue(error); await expect(forceRemove(filePath)).rejects.toThrow( expect.objectContaining({ @@ -656,12 +642,7 @@ describe('fs', () => { const error: any = new Error('oops'); error.code = 'ESOMETHING'; error.stack = 'some stack'; - when(jest.spyOn(fs.promises, 'rm')) - .calledWith(directoryPath, { - recursive: true, - force: true, - }) - .mockRejectedValue(error); + vi.spyOn(fs.promises, 'rm').mockRejectedValue(error); await expect(forceRemove(directoryPath)).rejects.toThrow( expect.objectContaining({ @@ -677,15 +658,15 @@ describe('fs', () => { describe('createSandbox', () => { beforeEach(() => { - jest.useFakeTimers(); + vi.useFakeTimers(); }); afterEach(() => { - jest.useRealTimers(); + vi.useRealTimers(); }); it('does not create the sandbox directory immediately', async () => { - jest.spyOn(uuid, 'v4').mockReturnValue('AAAA-AAAA-AAAA-AAAA'); + vi.spyOn(uuid, 'v4').mockReturnValue('AAAA-AAAA-AAAA-AAAA'); createSandbox('utils-fs'); const sandboxDirectoryPath = path.join( @@ -702,7 +683,7 @@ describe('fs', () => { describe('withinSandbox', () => { it('creates the sandbox directory and keeps it around before its given function ends', async () => { expect.assertions(1); - jest.spyOn(uuid, 'v4').mockReturnValue('AAAA-AAAA-AAAA-AAAA'); + vi.spyOn(uuid, 'v4').mockReturnValue('AAAA-AAAA-AAAA-AAAA'); const { withinSandbox: withinTestSandbox } = createSandbox('utils-fs'); await withinTestSandbox(async () => { @@ -718,7 +699,7 @@ describe('fs', () => { }); it('removes the sandbox directory after its given function ends', async () => { - jest.spyOn(uuid, 'v4').mockReturnValue('AAAA-AAAA-AAAA-AAAA'); + vi.spyOn(uuid, 'v4').mockReturnValue('AAAA-AAAA-AAAA-AAAA'); const { withinSandbox: withinTestSandbox } = createSandbox('utils-fs'); await withinTestSandbox(async () => { @@ -736,7 +717,7 @@ describe('fs', () => { }); it('throws if the sandbox directory already exists', async () => { - jest.spyOn(uuid, 'v4').mockReturnValue('AAAA-AAAA-AAAA-AAAA'); + vi.spyOn(uuid, 'v4').mockReturnValue('AAAA-AAAA-AAAA-AAAA'); const { withinSandbox: withinTestSandbox } = createSandbox('utils-fs'); const sandboxDirectoryPath = path.join( diff --git a/src/hashing.test.ts b/src/hashing.test.ts index 4e2f9b86f..6c5d4f7e2 100644 --- a/src/hashing.test.ts +++ b/src/hashing.test.ts @@ -1,15 +1,24 @@ import * as nobleHashes from '@noble/hashes/sha256'; import { webcrypto } from 'crypto'; import { parse } from 'semver'; +import { vi } from 'vitest'; import { bytesToHex, stringToBytes } from './bytes'; import { sha256 } from './hashing'; +vi.mock('@noble/hashes/sha256', async (importOriginal) => { + const actual = + await importOriginal(); + return { + ...actual, + sha256: vi.fn(actual.sha256), + }; +}); + describe('sha256', () => { const isNode18 = parse(process.version)?.major === 18; // The global does not exist in Node 18, so we must add it. - // eslint-disable-next-line jest/no-if if (isNode18) { Object.defineProperty(globalThis, 'crypto', { value: webcrypto, @@ -32,7 +41,7 @@ describe('sha256', () => { }); it('falls back to noble when digest function is unavailable', async () => { - const nobleSpy = jest.spyOn(nobleHashes, 'sha256'); + const nobleSpy = vi.spyOn(nobleHashes, 'sha256'); Object.defineProperty(globalThis.crypto.subtle, 'digest', { value: undefined, @@ -48,7 +57,7 @@ describe('sha256', () => { }); it('falls back to noble when subtle APIs are unavailable', async () => { - const nobleSpy = jest.spyOn(nobleHashes, 'sha256'); + const nobleSpy = vi.spyOn(nobleHashes, 'sha256'); Object.defineProperty(globalThis.crypto, 'subtle', { value: undefined, diff --git a/src/hex.test-d.ts b/src/hex.test-d.ts index 0321839b8..9d4b8da1d 100644 --- a/src/hex.test-d.ts +++ b/src/hex.test-d.ts @@ -1,26 +1,26 @@ -import { expectAssignable, expectNotAssignable } from 'tsd'; +import { expectTypeOf } from 'vitest'; import type { Hex } from '.'; // Valid hex strings: -expectAssignable('0x'); +expectTypeOf<'0x'>().toMatchTypeOf(); -expectAssignable('0x0'); +expectTypeOf<'0x0'>().toMatchTypeOf(); -expectAssignable('0x๐Ÿ˜€'); +expectTypeOf<'0x๐Ÿ˜€'>().toMatchTypeOf(); -const embeddedString = 'test'; -expectAssignable(`0x${embeddedString}`); +const embeddedString = 'test' as const; +expectTypeOf<`0x${typeof embeddedString}`>().toMatchTypeOf(); // Not valid hex strings: -expectNotAssignable(`0X${embeddedString}`); +expectTypeOf<`0X${typeof embeddedString}`>().not.toMatchTypeOf(); -expectNotAssignable(`1x${embeddedString}`); +expectTypeOf<`1x${typeof embeddedString}`>().not.toMatchTypeOf(); -expectNotAssignable(0); +expectTypeOf().not.toMatchTypeOf(); -expectNotAssignable('0'); +expectTypeOf<'0'>().not.toMatchTypeOf(); -expectNotAssignable('๐Ÿ™ƒ'); +expectTypeOf<'๐Ÿ™ƒ'>().not.toMatchTypeOf(); diff --git a/src/json.test-d.ts b/src/json.test-d.ts index e2066807b..23366688a 100644 --- a/src/json.test-d.ts +++ b/src/json.test-d.ts @@ -2,74 +2,78 @@ import type { Infer } from '@metamask/superstruct'; import { boolean, number, optional, string } from '@metamask/superstruct'; -import { expectAssignable, expectNotAssignable } from 'tsd'; +import { expectTypeOf } from 'vitest'; import type { Json } from '.'; import { exactOptional, object } from '.'; // Valid Json: -expectAssignable(null); +expectTypeOf(null).toMatchTypeOf(); -expectAssignable(false); +expectTypeOf(false).toMatchTypeOf(); -expectAssignable(''); +expectTypeOf('').toMatchTypeOf(); -expectAssignable(0); +expectTypeOf(0).toMatchTypeOf(); -expectAssignable([]); +expectTypeOf([]).toMatchTypeOf(); -expectAssignable({}); +expectTypeOf({}).toMatchTypeOf(); -expectAssignable([0]); +expectTypeOf([0]).toMatchTypeOf(); -expectAssignable({ a: 0 }); +expectTypeOf({ a: 0 }).toMatchTypeOf(); -expectAssignable({ deeply: [{ nested: 1 }, 'mixed', 'types', 0] }); +expectTypeOf({ deeply: [{ nested: 1 }, 'mixed', 'types', 0] }).toMatchTypeOf(); -expectAssignable(['array', { nested: { mixed: true, types: null } }, 0]); +expectTypeOf([ + 'array', + { nested: { mixed: true, types: null } }, + 0, +]).toMatchTypeOf(); type JsonCompatibleType = { c: number; }; const jsonCompatibleType: JsonCompatibleType = { c: 0 }; -expectAssignable(jsonCompatibleType); +expectTypeOf(jsonCompatibleType).toMatchTypeOf(); // Invalid Json: -expectNotAssignable(undefined); +expectTypeOf(undefined).not.toMatchTypeOf(); -expectNotAssignable(new Date()); +expectTypeOf(new Date()).not.toMatchTypeOf(); -expectNotAssignable(() => 0); +expectTypeOf(() => 0).not.toMatchTypeOf(); -expectNotAssignable(new Set()); +expectTypeOf(new Set()).not.toMatchTypeOf(); -expectNotAssignable(new Map()); +expectTypeOf(new Map()).not.toMatchTypeOf(); -expectNotAssignable(Symbol('test')); +expectTypeOf(Symbol('test')).not.toMatchTypeOf(); -expectNotAssignable({ a: new Date() }); +expectTypeOf({ a: new Date() }).not.toMatchTypeOf(); -expectNotAssignable(5 as number | undefined); +expectTypeOf(5 as number | undefined).not.toMatchTypeOf(); interface InterfaceWithOptionalProperty { a?: number; } const interfaceWithOptionalProperty: InterfaceWithOptionalProperty = { a: 0 }; -expectNotAssignable(interfaceWithOptionalProperty); +expectTypeOf(interfaceWithOptionalProperty).not.toMatchTypeOf(); interface InterfaceWithDate { a: Date; } const interfaceWithDate: InterfaceWithDate = { a: new Date() }; -expectNotAssignable(interfaceWithDate); +expectTypeOf(interfaceWithDate).not.toMatchTypeOf(); interface InterfaceWithOptionalDate { a?: Date; } const interfaceWithOptionalDate: InterfaceWithOptionalDate = { a: new Date() }; -expectNotAssignable(interfaceWithOptionalDate); +expectTypeOf(interfaceWithOptionalDate).not.toMatchTypeOf(); interface InterfaceWithUndefinedTypeUnion { a: number | undefined; @@ -77,25 +81,25 @@ interface InterfaceWithUndefinedTypeUnion { const interfaceWithUndefinedTypeUnion: InterfaceWithUndefinedTypeUnion = { a: 0, }; -expectNotAssignable(interfaceWithUndefinedTypeUnion); +expectTypeOf(interfaceWithUndefinedTypeUnion).not.toMatchTypeOf(); interface InterfaceWithFunction { a: () => number; } const interfaceWithFunction: InterfaceWithFunction = { a: () => 0 }; -expectNotAssignable(interfaceWithFunction); +expectTypeOf(interfaceWithFunction).not.toMatchTypeOf(); type TypeWithDate = { a: Date; }; const typeWithDate: TypeWithDate = { a: new Date() }; -expectNotAssignable(typeWithDate); +expectTypeOf(typeWithDate).not.toMatchTypeOf(); type TypeWithOptionalDate = { a?: Date; }; const typeWithOptionalDate: TypeWithOptionalDate = { a: new Date() }; -expectNotAssignable(typeWithOptionalDate); +expectTypeOf(typeWithOptionalDate).not.toMatchTypeOf(); type TypeWithUndefinedTypeUnion = { a: number | undefined; @@ -103,24 +107,24 @@ type TypeWithUndefinedTypeUnion = { const typeWithUndefinedTypeUnion: TypeWithUndefinedTypeUnion = { a: 0, }; -expectNotAssignable(typeWithUndefinedTypeUnion); +expectTypeOf(typeWithUndefinedTypeUnion).not.toMatchTypeOf(); type TypeWithFunction = { a: () => number; }; const typeWithFunction: TypeWithFunction = { a: () => 0 }; -expectNotAssignable(typeWithFunction); +expectTypeOf(typeWithFunction).not.toMatchTypeOf(); type TypeWithOptionalProperty = { a?: number | undefined; }; const typeWithOptionalProperty: TypeWithOptionalProperty = { a: undefined }; -expectNotAssignable(typeWithOptionalProperty); +expectTypeOf(typeWithOptionalProperty).not.toMatchTypeOf(); // Edge cases: // The Json type doesn't protect against the `any` type. -expectAssignable(null as any); +expectTypeOf(null as any).toMatchTypeOf(); // The Json type gets confused by interfaces. This interface is valid Json, // but it's incompatible with the Json type. @@ -128,7 +132,7 @@ interface A { a: number; } const a: A = { a: 0 }; -expectNotAssignable(a); +expectTypeOf(a).not.toMatchTypeOf(); // The Json type gets confused by classes. This class instance is valid Json, // but it's incompatible with the Json type. @@ -136,7 +140,7 @@ class Foo { a!: number; } const foo = new Foo(); -expectNotAssignable(foo); +expectTypeOf(foo).not.toMatchTypeOf(); // Object using `exactOptional`: @@ -148,12 +152,12 @@ const exactOptionalObject = object({ type ExactOptionalObject = Infer; -expectAssignable({ a: 0 }); -expectAssignable({ a: 0, b: 'test' }); -expectAssignable({ a: 0, b: 'test', c: true }); -expectNotAssignable({ a: 0, b: 'test', c: 0 }); -expectNotAssignable({ +expectTypeOf({ a: 0 }).toMatchTypeOf(); +expectTypeOf({ a: 0, b: 'test' }).toMatchTypeOf(); +expectTypeOf({ a: 0, b: 'test', c: true }).toMatchTypeOf(); +expectTypeOf({ a: 0, b: 'test', c: 0 }).not.toMatchTypeOf(); +expectTypeOf({ a: 0, b: 'test', c: undefined, -}); +}).not.toMatchTypeOf(); diff --git a/src/json.test.ts b/src/json.test.ts index 96c16bec8..c91b3e286 100644 --- a/src/json.test.ts +++ b/src/json.test.ts @@ -9,6 +9,7 @@ import { number, optional, } from '@metamask/superstruct'; +import { vi, type MockedFunction } from 'vitest'; import { assert, @@ -46,9 +47,9 @@ import { JSON_VALIDATION_FIXTURES, } from './__fixtures__'; -jest.mock('@metamask/superstruct', () => ({ - ...jest.requireActual('@metamask/superstruct'), - assert: jest.fn(), +vi.mock('@metamask/superstruct', async (importOriginal) => ({ + ...(await importOriginal()), + assert: vi.fn(), })); describe('object', () => { @@ -224,10 +225,13 @@ describe('exactOptional', () => { }); describe('json', () => { - beforeEach(() => { - const actual = jest.requireActual('@metamask/superstruct'); + beforeEach(async () => { + const actual = + await vi.importActual( + '@metamask/superstruct', + ); ( - superstructAssert as jest.MockedFunction + superstructAssert as MockedFunction ).mockImplementation(actual.assert); }); @@ -299,7 +303,7 @@ describe('json', () => { }); it.each(JSON_VALIDATION_FIXTURES)( - 'works on complex object %o', + 'works on complex object: $label', ({ value, valid }) => { expect(isValidJson(value)).toBe(valid); }, @@ -315,7 +319,7 @@ describe('json', () => { describe('getJsonSize', () => { it.each(JSON_VALIDATION_FIXTURES.filter((fixture) => fixture.valid))( - 'returns the size of %o', + 'returns the size of $label', ({ value, size }) => { expect(getJsonSize(value)).toBe(size); }, @@ -365,7 +369,7 @@ describe('json', () => { it('includes the value thrown in the message if it is not an error', () => { ( - superstructAssert as jest.MockedFunction + superstructAssert as MockedFunction ).mockImplementation(() => { // eslint-disable-next-line @typescript-eslint/no-throw-literal throw 'oops'; @@ -420,7 +424,7 @@ describe('json', () => { it('includes the value thrown in the message if it is not an error', () => { ( - superstructAssert as jest.MockedFunction + superstructAssert as MockedFunction ).mockImplementation(() => { // eslint-disable-next-line @typescript-eslint/no-throw-literal throw 'oops'; @@ -491,7 +495,7 @@ describe('json', () => { it('includes the value thrown in the message if it is not an error', () => { ( - superstructAssert as jest.MockedFunction + superstructAssert as MockedFunction ).mockImplementation(() => { // eslint-disable-next-line @typescript-eslint/no-throw-literal throw 'oops.'; @@ -546,7 +550,7 @@ describe('json', () => { it('includes the value thrown in the message if it is not an error', () => { ( - superstructAssert as jest.MockedFunction + superstructAssert as MockedFunction ).mockImplementation(() => { // eslint-disable-next-line @typescript-eslint/no-throw-literal throw 'oops.'; @@ -601,7 +605,7 @@ describe('json', () => { it('includes the value thrown in the message if it is not an error', () => { ( - superstructAssert as jest.MockedFunction + superstructAssert as MockedFunction ).mockImplementation(() => { // eslint-disable-next-line @typescript-eslint/no-throw-literal throw 'oops'; @@ -648,7 +652,7 @@ describe('json', () => { it('includes the value thrown in the message if it is not an error', () => { ( - superstructAssert as jest.MockedFunction + superstructAssert as MockedFunction ).mockImplementation(() => { // eslint-disable-next-line @typescript-eslint/no-throw-literal throw 'oops'; @@ -703,7 +707,7 @@ describe('json', () => { it('includes the value thrown in the message if it is not an error', () => { ( - superstructAssert as jest.MockedFunction + superstructAssert as MockedFunction ).mockImplementation(() => { // eslint-disable-next-line @typescript-eslint/no-throw-literal throw 'oops.'; diff --git a/src/logging.test.ts b/src/logging.test.ts index cd2245bca..9a49dc0c2 100644 --- a/src/logging.test.ts +++ b/src/logging.test.ts @@ -1,14 +1,15 @@ import { MockWritable } from 'stdio-mock'; +import { vi } from 'vitest'; import { createProjectLogger, createModuleLogger } from './logging'; describe('logging', () => { beforeAll(() => { - jest.useFakeTimers().setSystemTime(new Date('2022-01-01')); + vi.useFakeTimers().setSystemTime(new Date('2022-01-01')); }); afterAll(() => { - jest.useRealTimers(); + vi.useRealTimers(); }); describe('createProjectLogger', () => { diff --git a/src/misc.test-d.ts b/src/misc.test-d.ts index 45623e834..baabd489f 100644 --- a/src/misc.test-d.ts +++ b/src/misc.test-d.ts @@ -1,4 +1,4 @@ -import { expectAssignable, expectNotAssignable, expectType } from 'tsd'; +import { expectTypeOf } from 'vitest'; import type { PublicInterface, RuntimeObject } from './misc'; import { isObject, hasProperty, getKnownPropertyNames } from './misc'; @@ -19,9 +19,13 @@ class ClassWithPrivateProperties { } // Private properties not required -expectAssignable>({ bar: 'bar' }); +expectTypeOf({ bar: 'bar' }).toMatchTypeOf< + PublicInterface +>(); // Public properties still required -expectNotAssignable>({}); +expectTypeOf({}).not.toMatchTypeOf< + PublicInterface +>(); //============================================================================= // isObject @@ -30,16 +34,16 @@ expectNotAssignable>({}); // eslint-disable-next-line @typescript-eslint/ban-types const unknownValue = {} as unknown; -expectNotAssignable(unknownValue); +expectTypeOf(unknownValue).not.toMatchTypeOf(); if (isObject(unknownValue)) { - expectAssignable(unknownValue); + expectTypeOf(unknownValue).toMatchTypeOf(); } // Does not interfere with satisfaction of static type const constObjectType = { foo: 'foo' } as const; if (hasProperty(constObjectType, 'foo')) { - expectAssignable<{ foo: 'foo' }>(constObjectType); + expectTypeOf(constObjectType).toMatchTypeOf<{ foo: 'foo' }>(); } //============================================================================= @@ -50,16 +54,16 @@ if (hasProperty(constObjectType, 'foo')) { const unknownObject = {} as Object; // Establish that `Object` is not accepted when a specific property is needed. -expectNotAssignable>(unknownObject); +expectTypeOf(unknownObject).not.toMatchTypeOf>(); // Establish that `RuntimeObject` is not accepted when a specific property is needed. if (isObject(unknownObject)) { - expectNotAssignable>(unknownObject); + expectTypeOf(unknownObject).not.toMatchTypeOf>(); } // An object is accepted after `hasProperty` is used to prove that it has the required property. if (isObject(unknownObject) && hasProperty(unknownObject, 'foo')) { - expectAssignable>(unknownObject); + expectTypeOf(unknownObject).toMatchTypeOf>(); } // An object is accepted after `hasProperty` is used to prove that it has all required properties. @@ -68,18 +72,22 @@ if ( hasProperty(unknownObject, 'foo') && hasProperty(unknownObject, 'bar') ) { - expectAssignable>(unknownObject); + expectTypeOf(unknownObject).toMatchTypeOf>(); } // An object is not accepted after `hasProperty` has only been used to establish that some required properties exist. if (isObject(unknownObject) && hasProperty(unknownObject, 'foo')) { - expectNotAssignable>(unknownObject); + expectTypeOf(unknownObject).not.toMatchTypeOf< + Record<'foo' | 'bar', unknown> + >(); } // Does not interfere with satisfaction of non-overlapping types const overlappingTypesExample = { foo: 'foo', baz: 'baz' }; if (hasProperty(overlappingTypesExample, 'foo')) { - expectAssignable>(overlappingTypesExample); + expectTypeOf(overlappingTypesExample).toMatchTypeOf< + Record<'baz', unknown> + >(); } const exampleErrorWithCode = new Error('test'); @@ -88,11 +96,11 @@ const exampleErrorWithCode = new Error('test'); exampleErrorWithCode.code = 999; // Establish that trying to check for a custom property on an error results in failure -expectNotAssignable<{ code: any }>(exampleErrorWithCode); +expectTypeOf(exampleErrorWithCode).not.toMatchTypeOf<{ code: any }>(); // Using custom Error property is allowed after checking with `hasProperty` if (hasProperty(exampleErrorWithCode, 'code')) { - expectType(exampleErrorWithCode.code); + expectTypeOf(exampleErrorWithCode.code).toEqualTypeOf(); } // `hasProperty` is compatible with interfaces @@ -117,7 +125,7 @@ type HasPropertyTypeExample = { // It keeps the original type when defined. const hasPropertyTypeExample: HasPropertyTypeExample = {}; if (hasProperty(hasPropertyTypeExample, 'a')) { - expectType(hasPropertyTypeExample.a); + expectTypeOf(hasPropertyTypeExample.a).toEqualTypeOf(); } //============================================================================= @@ -129,9 +137,9 @@ enum GetKnownPropertyNamesEnumExample { Baz = 'qux', } -expectType<('Foo' | 'Baz')[]>( +expectTypeOf( getKnownPropertyNames(GetKnownPropertyNamesEnumExample), -); +).toEqualTypeOf<('Foo' | 'Baz')[]>(); //============================================================================= // RuntimeObject @@ -139,36 +147,36 @@ expectType<('Foo' | 'Baz')[]>( // Valid runtime objects: -expectAssignable({}); +expectTypeOf({}).toMatchTypeOf(); -expectAssignable({ foo: 'foo' }); +expectTypeOf({ foo: 'foo' }).toMatchTypeOf(); // eslint-disable-next-line @typescript-eslint/naming-convention -expectAssignable({ 0: 'foo' }); +expectTypeOf({ 0: 'foo' }).toMatchTypeOf(); -expectAssignable({ [Symbol('foo')]: 'foo' }); +expectTypeOf({ [Symbol('foo')]: 'foo' }).toMatchTypeOf(); // Invalid runtime objects: -expectNotAssignable(null); +expectTypeOf(null).not.toMatchTypeOf(); -expectNotAssignable(undefined); +expectTypeOf(undefined).not.toMatchTypeOf(); -expectNotAssignable('foo'); +expectTypeOf('foo').not.toMatchTypeOf(); -expectNotAssignable(0); +expectTypeOf(0).not.toMatchTypeOf(); -expectNotAssignable([]); +expectTypeOf([]).not.toMatchTypeOf(); -expectNotAssignable(new Date()); +expectTypeOf(new Date()).not.toMatchTypeOf(); -expectNotAssignable(() => 0); +expectTypeOf(() => 0).not.toMatchTypeOf(); -expectNotAssignable(new Set()); +expectTypeOf(new Set()).not.toMatchTypeOf(); -expectNotAssignable(new Map()); +expectTypeOf(new Map()).not.toMatchTypeOf(); -expectNotAssignable(Symbol('test')); +expectTypeOf(Symbol('test')).not.toMatchTypeOf(); // The RuntimeObject type gets confused by interfaces. This interface is a valid object, // but it's incompatible with the RuntimeObject type. @@ -177,10 +185,10 @@ interface RuntimeObjectInterfaceExample { a: number; } const runtimeObjectInterfaceExample: RuntimeObjectInterfaceExample = { a: 0 }; -expectNotAssignable(runtimeObjectInterfaceExample); +expectTypeOf(runtimeObjectInterfaceExample).not.toMatchTypeOf(); class RuntimeObjectClassExample { a!: number; } const runtimeObjectClassExample = new RuntimeObjectClassExample(); -expectNotAssignable(runtimeObjectClassExample); +expectTypeOf(runtimeObjectClassExample).not.toMatchTypeOf(); diff --git a/src/misc.test.ts b/src/misc.test.ts index 6c6375546..62640d4cf 100644 --- a/src/misc.test.ts +++ b/src/misc.test.ts @@ -1,3 +1,5 @@ +import { vi } from 'vitest'; + import type { RuntimeObject } from '.'; import { isNonEmptyArray, @@ -158,7 +160,7 @@ describe('miscellaneous', () => { it('should return false if an exception is thrown', () => { const someObject = { something: 'anything' }; - jest.spyOn(Object, 'getPrototypeOf').mockImplementationOnce(() => { + vi.spyOn(Object, 'getPrototypeOf').mockImplementationOnce(() => { throw new Error(); }); diff --git a/src/time.test.ts b/src/time.test.ts index c84f60662..06f43f6b2 100644 --- a/src/time.test.ts +++ b/src/time.test.ts @@ -1,3 +1,5 @@ +import { vi } from 'vitest'; + import { Duration, inMilliseconds, timeSince } from '.'; describe('time utilities', () => { @@ -50,7 +52,7 @@ describe('time utilities', () => { it('computes the elapsed time', () => { // Set the "current time" to "10". - jest.spyOn(Date, 'now').mockImplementation(() => 10); + vi.spyOn(Date, 'now').mockImplementation(() => 10); [ [10, 0], diff --git a/tsconfig.test.json b/tsconfig.test.json new file mode 100644 index 000000000..1d8242fab --- /dev/null +++ b/tsconfig.test.json @@ -0,0 +1,12 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "lib": ["ES2022", "dom"], + "module": "ES2022", + "moduleResolution": "Bundler", + "skipLibCheck": true, + "skipDefaultLibCheck": true + }, + "include": ["./src/**/*.test.ts", "./src/**/*.test-d.ts"], + "exclude": ["./dist", "**/node_modules"] +} diff --git a/vitest.config.mts b/vitest.config.mts new file mode 100644 index 000000000..60767d5cf --- /dev/null +++ b/vitest.config.mts @@ -0,0 +1,68 @@ +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + test: { + // Vitest enables watch mode by default. We disable it here, so it can be + // explicitly enabled with `yarn test:watch`. + watch: false, + + // Make `describe`, `it`, `expect`, etc. available globally without importing. + globals: true, + + // Restore mocks between tests, matching Jest's default behavior. + restoreMocks: true, + + // Some node_modules use relative ESM imports without file extensions, + // which Vite cannot resolve at runtime. Inlining these modules causes + // Vite to process them through esbuild so the imports resolve correctly. + server: { + deps: { + inline: ['ethereum-cryptography', 'web3'], + }, + }, + + // The files to include in the test run. + include: ['src/**/*.test.ts'], + + coverage: { + enabled: true, + + // Configure the coverage provider. We use `istanbul` here, because it + // is more stable than `v8`. + provider: 'istanbul', + + // The files to include in the coverage report. + include: ['src/**/*.ts'], + + // The files to exclude from the coverage report. + exclude: [ + 'src/__fixtures__/**/*', + 'src/**/*.test.ts', + 'src/**/*.test-d.ts', + 'src/index.ts', + 'src/node.ts', + ], + + // Coverage thresholds. If the coverage is below these thresholds, the + // test will fail. + thresholds: { + // Auto-update the coverage thresholds. When this is enabled, the + // thresholds will be updated automatically when the coverage is + // above the current thresholds. + autoUpdate: true, + + branches: 98.8, + functions: 100, + lines: 99.53, + statements: 99.54, + }, + }, + + typecheck: { + enabled: true, + + // The path to the tsconfig file to use for type checking. + tsconfig: './tsconfig.test.json', + }, + }, +}); \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index ea7f84753..957553f15 100644 --- a/yarn.lock +++ b/yarn.lock @@ -39,6 +39,17 @@ __metadata: languageName: node linkType: hard +"@babel/code-frame@npm:^7.28.6, @babel/code-frame@npm:^7.29.0": + version: 7.29.0 + resolution: "@babel/code-frame@npm:7.29.0" + dependencies: + "@babel/helper-validator-identifier": ^7.28.5 + js-tokens: ^4.0.0 + picocolors: ^1.1.1 + checksum: 39f5b303757e4d63bbff8133e251094cd4f952b46e3fa9febc7368d907583911d6a1eded6090876dc1feeff5cf6e134fb19b706f8d58d26c5402cd50e5e1aeb2 + languageName: node + linkType: hard + "@babel/compat-data@npm:^7.19.3": version: 7.19.3 resolution: "@babel/compat-data@npm:7.19.3" @@ -46,6 +57,13 @@ __metadata: languageName: node linkType: hard +"@babel/compat-data@npm:^7.28.6": + version: 7.29.3 + resolution: "@babel/compat-data@npm:7.29.3" + checksum: 977192bab334f66bc8150026340a33ed318c1a7ce18a9323f4c1b86f8ed1d8645bfe5600242bf682717c05c46a4ff06225242207c1d599f4296914b9b4e3efb5 + languageName: node + linkType: hard + "@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3": version: 7.19.3 resolution: "@babel/core@npm:7.19.3" @@ -69,6 +87,29 @@ __metadata: languageName: node linkType: hard +"@babel/core@npm:^7.23.9": + version: 7.29.0 + resolution: "@babel/core@npm:7.29.0" + dependencies: + "@babel/code-frame": ^7.29.0 + "@babel/generator": ^7.29.0 + "@babel/helper-compilation-targets": ^7.28.6 + "@babel/helper-module-transforms": ^7.28.6 + "@babel/helpers": ^7.28.6 + "@babel/parser": ^7.29.0 + "@babel/template": ^7.28.6 + "@babel/traverse": ^7.29.0 + "@babel/types": ^7.29.0 + "@jridgewell/remapping": ^2.3.5 + convert-source-map: ^2.0.0 + debug: ^4.1.0 + gensync: ^1.0.0-beta.2 + json5: ^2.2.3 + semver: ^6.3.1 + checksum: 85e1df6e213382c46dee27bcd07ed9202fa108a85bb74eb37be656308fd949349171ad2aa17cc84cf0720c908dc9ea6309d25e64d2a7fcdaa63721ce0c67c10b + languageName: node + linkType: hard + "@babel/generator@npm:^7.19.3, @babel/generator@npm:^7.23.0, @babel/generator@npm:^7.7.2": version: 7.23.0 resolution: "@babel/generator@npm:7.23.0" @@ -81,6 +122,19 @@ __metadata: languageName: node linkType: hard +"@babel/generator@npm:^7.29.0": + version: 7.29.1 + resolution: "@babel/generator@npm:7.29.1" + dependencies: + "@babel/parser": ^7.29.0 + "@babel/types": ^7.29.0 + "@jridgewell/gen-mapping": ^0.3.12 + "@jridgewell/trace-mapping": ^0.3.28 + jsesc: ^3.0.2 + checksum: d8e6863b2d04f684e65ad72731049ac7d754d3a3d1a67cdfc20807b109ba3180ed90d7ccef58ce5d38ded2eaeb71983a76c711eecb9b6266118262378f6c7226 + languageName: node + linkType: hard + "@babel/helper-compilation-targets@npm:^7.19.3": version: 7.19.3 resolution: "@babel/helper-compilation-targets@npm:7.19.3" @@ -95,6 +149,19 @@ __metadata: languageName: node linkType: hard +"@babel/helper-compilation-targets@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/helper-compilation-targets@npm:7.28.6" + dependencies: + "@babel/compat-data": ^7.28.6 + "@babel/helper-validator-option": ^7.27.1 + browserslist: ^4.24.0 + lru-cache: ^5.1.1 + semver: ^6.3.1 + checksum: 8151e36b74eb1c5e414fe945c189436421f7bfa011884de5be3dd7fd77f12f1f733ff7c982581dfa0a49d8af724450243c2409427114b4a6cfeb8333259d001c + languageName: node + linkType: hard + "@babel/helper-environment-visitor@npm:^7.18.9, @babel/helper-environment-visitor@npm:^7.22.20": version: 7.22.20 resolution: "@babel/helper-environment-visitor@npm:7.22.20" @@ -112,6 +179,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-globals@npm:^7.28.0": + version: 7.28.0 + resolution: "@babel/helper-globals@npm:7.28.0" + checksum: d8d7b91c12dad1ee747968af0cb73baf91053b2bcf78634da2c2c4991fb45ede9bd0c8f9b5f3254881242bc0921218fcb7c28ae885477c25177147e978ce4397 + languageName: node + linkType: hard + "@babel/helper-hoist-variables@npm:^7.22.5": version: 7.22.5 resolution: "@babel/helper-hoist-variables@npm:7.22.5" @@ -130,6 +204,16 @@ __metadata: languageName: node linkType: hard +"@babel/helper-module-imports@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/helper-module-imports@npm:7.28.6" + dependencies: + "@babel/traverse": ^7.28.6 + "@babel/types": ^7.28.6 + checksum: 437513aa029898b588a38f7991d7656c539b22f595207d85d0c407240c9e3f2aff8b9d0d7115fdedc91e7fdce4465100549a052024e2fba6a810bcbb7584296b + languageName: node + linkType: hard + "@babel/helper-module-transforms@npm:^7.19.0": version: 7.19.0 resolution: "@babel/helper-module-transforms@npm:7.19.0" @@ -146,6 +230,19 @@ __metadata: languageName: node linkType: hard +"@babel/helper-module-transforms@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/helper-module-transforms@npm:7.28.6" + dependencies: + "@babel/helper-module-imports": ^7.28.6 + "@babel/helper-validator-identifier": ^7.28.5 + "@babel/traverse": ^7.28.6 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 522f7d1d08b5e2ccd4ec912aca879bd1506af78d1fb30f46e3e6b4bb69c6ae6ab4e379a879723844230d27dc6d04a55b03f5215cd3141b7a2b40bb4a02f71a9f + languageName: node + linkType: hard + "@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.8.0": version: 7.19.0 resolution: "@babel/helper-plugin-utils@npm:7.19.0" @@ -178,6 +275,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-string-parser@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-string-parser@npm:7.27.1" + checksum: 0a8464adc4b39b138aedcb443b09f4005d86207d7126e5e079177e05c3116107d856ec08282b365e9a79a9872f40f4092a6127f8d74c8a01c1ef789dacfc25d6 + languageName: node + linkType: hard + "@babel/helper-validator-identifier@npm:^7.18.6, @babel/helper-validator-identifier@npm:^7.22.20": version: 7.22.20 resolution: "@babel/helper-validator-identifier@npm:7.22.20" @@ -185,6 +289,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-validator-identifier@npm:^7.28.5": + version: 7.28.5 + resolution: "@babel/helper-validator-identifier@npm:7.28.5" + checksum: 5a251a6848e9712aea0338f659a1a3bd334d26219d5511164544ca8ec20774f098c3a6661e9da65a0d085c745c00bb62c8fada38a62f08fa1f8053bc0aeb57e4 + languageName: node + linkType: hard + "@babel/helper-validator-option@npm:^7.18.6": version: 7.18.6 resolution: "@babel/helper-validator-option@npm:7.18.6" @@ -192,6 +303,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-validator-option@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-validator-option@npm:7.27.1" + checksum: db73e6a308092531c629ee5de7f0d04390835b21a263be2644276cb27da2384b64676cab9f22cd8d8dbd854c92b1d7d56fc8517cf0070c35d1c14a8c828b0903 + languageName: node + linkType: hard + "@babel/helpers@npm:^7.19.0": version: 7.19.0 resolution: "@babel/helpers@npm:7.19.0" @@ -203,6 +321,16 @@ __metadata: languageName: node linkType: hard +"@babel/helpers@npm:^7.28.6": + version: 7.29.2 + resolution: "@babel/helpers@npm:7.29.2" + dependencies: + "@babel/template": ^7.28.6 + "@babel/types": ^7.29.0 + checksum: 2c8ce711a639ef334539d3bd48977f57493f71af99e13d3f685fe47b3bc32aa83dbc1380688e19d5df924d958f8f29072f3dcff8110257ba6399524907287189 + languageName: node + linkType: hard + "@babel/highlight@npm:^7.22.13": version: 7.22.20 resolution: "@babel/highlight@npm:7.22.20" @@ -223,6 +351,17 @@ __metadata: languageName: node linkType: hard +"@babel/parser@npm:^7.23.9, @babel/parser@npm:^7.25.4, @babel/parser@npm:^7.28.6, @babel/parser@npm:^7.29.0": + version: 7.29.3 + resolution: "@babel/parser@npm:7.29.3" + dependencies: + "@babel/types": ^7.29.0 + bin: + parser: ./bin/babel-parser.js + checksum: 046f46996bf4053b6e29f8a7f420f9e0a2878593c1c9a9914a36faca23fc544a307c78a0101ba3ae98936ade68bdde686a83e1ab2b74c2ebb80dc4a9df48476d + languageName: node + linkType: hard + "@babel/plugin-syntax-async-generators@npm:^7.8.4": version: 7.8.4 resolution: "@babel/plugin-syntax-async-generators@npm:7.8.4" @@ -388,6 +527,17 @@ __metadata: languageName: node linkType: hard +"@babel/template@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/template@npm:7.28.6" + dependencies: + "@babel/code-frame": ^7.28.6 + "@babel/parser": ^7.28.6 + "@babel/types": ^7.28.6 + checksum: 8ab6383053e226025d9491a6e795293f2140482d14f60c1244bece6bf53610ed1e251d5e164de66adab765629881c7d9416e1e540c716541d2fd0f8f36a013d7 + languageName: node + linkType: hard + "@babel/traverse@npm:^7.19.0, @babel/traverse@npm:^7.19.3, @babel/traverse@npm:^7.23.2, @babel/traverse@npm:^7.7.2": version: 7.23.2 resolution: "@babel/traverse@npm:7.23.2" @@ -406,6 +556,21 @@ __metadata: languageName: node linkType: hard +"@babel/traverse@npm:^7.28.6, @babel/traverse@npm:^7.29.0": + version: 7.29.0 + resolution: "@babel/traverse@npm:7.29.0" + dependencies: + "@babel/code-frame": ^7.29.0 + "@babel/generator": ^7.29.0 + "@babel/helper-globals": ^7.28.0 + "@babel/parser": ^7.29.0 + "@babel/template": ^7.28.6 + "@babel/types": ^7.29.0 + debug: ^4.3.1 + checksum: fbb5085aa525b5d4ecd9fe2f5885d88413fff6ad9c0fac244c37f96069b6d3af9ce825750cd16af1d97d26fa3d354b38dbbdb5f31430e0d99ed89660ab65430e + languageName: node + linkType: hard + "@babel/types@npm:^7.0.0, @babel/types@npm:^7.18.6, @babel/types@npm:^7.19.0, @babel/types@npm:^7.19.3, @babel/types@npm:^7.22.15, @babel/types@npm:^7.22.5, @babel/types@npm:^7.23.0, @babel/types@npm:^7.3.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.8.3": version: 7.23.0 resolution: "@babel/types@npm:7.23.0" @@ -417,6 +582,16 @@ __metadata: languageName: node linkType: hard +"@babel/types@npm:^7.25.4, @babel/types@npm:^7.28.6, @babel/types@npm:^7.29.0": + version: 7.29.0 + resolution: "@babel/types@npm:7.29.0" + dependencies: + "@babel/helper-string-parser": ^7.27.1 + "@babel/helper-validator-identifier": ^7.28.5 + checksum: 83f190438e94c22b2574aaeef7501830311ef266eaabfb06523409f64e2fe855e522951607085d71cad286719adef14e1ba37b671f334a7cd25b0f8506a01e0b + languageName: node + linkType: hard + "@bcoe/v8-coverage@npm:^0.2.3": version: 0.2.3 resolution: "@bcoe/v8-coverage@npm:0.2.3" @@ -444,6 +619,167 @@ __metadata: languageName: node linkType: hard +"@esbuild/aix-ppc64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/aix-ppc64@npm:0.21.5" + conditions: os=aix & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/android-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/android-arm64@npm:0.21.5" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/android-arm@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/android-arm@npm:0.21.5" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@esbuild/android-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/android-x64@npm:0.21.5" + conditions: os=android & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/darwin-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/darwin-arm64@npm:0.21.5" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/darwin-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/darwin-x64@npm:0.21.5" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/freebsd-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/freebsd-arm64@npm:0.21.5" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/freebsd-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/freebsd-x64@npm:0.21.5" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/linux-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-arm64@npm:0.21.5" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/linux-arm@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-arm@npm:0.21.5" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@esbuild/linux-ia32@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-ia32@npm:0.21.5" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/linux-loong64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-loong64@npm:0.21.5" + conditions: os=linux & cpu=loong64 + languageName: node + linkType: hard + +"@esbuild/linux-mips64el@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-mips64el@npm:0.21.5" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + +"@esbuild/linux-ppc64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-ppc64@npm:0.21.5" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/linux-riscv64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-riscv64@npm:0.21.5" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + +"@esbuild/linux-s390x@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-s390x@npm:0.21.5" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + +"@esbuild/linux-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-x64@npm:0.21.5" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/netbsd-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/netbsd-x64@npm:0.21.5" + conditions: os=netbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/openbsd-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/openbsd-x64@npm:0.21.5" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/sunos-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/sunos-x64@npm:0.21.5" + conditions: os=sunos & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/win32-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/win32-arm64@npm:0.21.5" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/win32-ia32@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/win32-ia32@npm:0.21.5" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/win32-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/win32-x64@npm:0.21.5" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@eslint-community/eslint-utils@npm:^4.2.0": version: 4.4.0 resolution: "@eslint-community/eslint-utils@npm:4.4.0" @@ -641,6 +977,13 @@ __metadata: languageName: node linkType: hard +"@istanbuljs/schema@npm:^0.1.3": + version: 0.1.6 + resolution: "@istanbuljs/schema@npm:0.1.6" + checksum: e0700df94e5eee184a64e9712d28a4aa8a0918f01e01e6fe50b93e12c2415c6930065c1622306a3bb28f8774e5aa3291671597826a71fa38f4b5667566e87bba + languageName: node + linkType: hard + "@jest/console@npm:^29.2.1": version: 29.2.1 resolution: "@jest/console@npm:29.2.1" @@ -913,6 +1256,16 @@ __metadata: languageName: node linkType: hard +"@jridgewell/gen-mapping@npm:^0.3.12, @jridgewell/gen-mapping@npm:^0.3.5": + version: 0.3.13 + resolution: "@jridgewell/gen-mapping@npm:0.3.13" + dependencies: + "@jridgewell/sourcemap-codec": ^1.5.0 + "@jridgewell/trace-mapping": ^0.3.24 + checksum: f2105acefc433337145caa3c84bba286de954f61c0bc46279bbd85a9e6a02871089717fa060413cfb6a9d44189fe8313b2d1cabf3a2eb3284d208fd5f75c54ff + languageName: node + linkType: hard + "@jridgewell/gen-mapping@npm:^0.3.2": version: 0.3.2 resolution: "@jridgewell/gen-mapping@npm:0.3.2" @@ -924,6 +1277,16 @@ __metadata: languageName: node linkType: hard +"@jridgewell/remapping@npm:^2.3.5": + version: 2.3.5 + resolution: "@jridgewell/remapping@npm:2.3.5" + dependencies: + "@jridgewell/gen-mapping": ^0.3.5 + "@jridgewell/trace-mapping": ^0.3.24 + checksum: 4a66a7397c3dc9c6b5c14a0024b1f98c5e1d90a0dbc1e5955b5038f2db339904df2a0ee8a66559fafb4fc23ff33700a2639fd40bbdd2e9e82b58b3bdf83738e3 + languageName: node + linkType: hard + "@jridgewell/resolve-uri@npm:3.1.0, @jridgewell/resolve-uri@npm:^3.0.3": version: 3.1.0 resolution: "@jridgewell/resolve-uri@npm:3.1.0" @@ -931,6 +1294,13 @@ __metadata: languageName: node linkType: hard +"@jridgewell/resolve-uri@npm:^3.1.0": + version: 3.1.2 + resolution: "@jridgewell/resolve-uri@npm:3.1.2" + checksum: 83b85f72c59d1c080b4cbec0fef84528963a1b5db34e4370fa4bd1e3ff64a0d80e0cee7369d11d73c704e0286fb2865b530acac7a871088fbe92b5edf1000870 + languageName: node + linkType: hard + "@jridgewell/set-array@npm:^1.0.0, @jridgewell/set-array@npm:^1.0.1": version: 1.1.2 resolution: "@jridgewell/set-array@npm:1.1.2" @@ -952,6 +1322,13 @@ __metadata: languageName: node linkType: hard +"@jridgewell/sourcemap-codec@npm:^1.4.14, @jridgewell/sourcemap-codec@npm:^1.5.0, @jridgewell/sourcemap-codec@npm:^1.5.5": + version: 1.5.5 + resolution: "@jridgewell/sourcemap-codec@npm:1.5.5" + checksum: c2e36e67971f719a8a3a85ef5a5f580622437cc723c35d03ebd0c9c0b06418700ef006f58af742791f71f6a4fc68fcfaf1f6a74ec2f9a3332860e9373459dae7 + languageName: node + linkType: hard + "@jridgewell/trace-mapping@npm:0.3.9": version: 0.3.9 resolution: "@jridgewell/trace-mapping@npm:0.3.9" @@ -972,6 +1349,16 @@ __metadata: languageName: node linkType: hard +"@jridgewell/trace-mapping@npm:^0.3.23, @jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.28": + version: 0.3.31 + resolution: "@jridgewell/trace-mapping@npm:0.3.31" + dependencies: + "@jridgewell/resolve-uri": ^3.1.0 + "@jridgewell/sourcemap-codec": ^1.4.14 + checksum: af8fda2431348ad507fbddf8e25f5d08c79ecc94594061ce402cf41bc5aba1a7b3e59bf0fd70a619b35f33983a3f488ceeba8faf56bff784f98bb5394a8b7d47 + languageName: node + linkType: hard + "@lavamoat/aa@npm:^4.2.0": version: 4.2.0 resolution: "@lavamoat/aa@npm:4.2.0" @@ -1096,12 +1483,12 @@ __metadata: "@ts-bridge/shims": ^0.1.1 "@types/debug": ^4.1.7 "@types/jest": ^28.1.7 - "@types/jest-when": ^3.5.3 "@types/lodash": ^4.17.20 "@types/node": ~18.18.14 "@types/uuid": ^9.0.8 "@typescript-eslint/eslint-plugin": ^5.43.0 "@typescript-eslint/parser": ^5.43.0 + "@vitest/coverage-istanbul": ^2.1.0 debug: ^4.3.4 depcheck: ^1.4.7 eslint: ^8.44.0 @@ -1114,7 +1501,6 @@ __metadata: eslint-plugin-promise: ^6.1.1 jest: ^29.2.2 jest-it-up: ^2.0.2 - jest-when: ^3.6.0 lodash: ^4.17.21 pony-cause: ^2.1.10 prettier: ^2.7.1 @@ -1127,6 +1513,7 @@ __metadata: typedoc: ^0.23.15 typescript: ~5.0.4 uuid: ^9.0.1 + vitest: ^2.1.0 web3: ^4.16.0 languageName: unknown linkType: soft @@ -1297,6 +1684,181 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-android-arm-eabi@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-android-arm-eabi@npm:4.60.3" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@rollup/rollup-android-arm64@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-android-arm64@npm:4.60.3" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-darwin-arm64@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-darwin-arm64@npm:4.60.3" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-darwin-x64@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-darwin-x64@npm:4.60.3" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@rollup/rollup-freebsd-arm64@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-freebsd-arm64@npm:4.60.3" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-freebsd-x64@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-freebsd-x64@npm:4.60.3" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm-gnueabihf@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.60.3" + conditions: os=linux & cpu=arm & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm-musleabihf@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.60.3" + conditions: os=linux & cpu=arm & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm64-gnu@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.60.3" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm64-musl@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-linux-arm64-musl@npm:4.60.3" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-loong64-gnu@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-linux-loong64-gnu@npm:4.60.3" + conditions: os=linux & cpu=loong64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-loong64-musl@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-linux-loong64-musl@npm:4.60.3" + conditions: os=linux & cpu=loong64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-ppc64-gnu@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-linux-ppc64-gnu@npm:4.60.3" + conditions: os=linux & cpu=ppc64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-ppc64-musl@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-linux-ppc64-musl@npm:4.60.3" + conditions: os=linux & cpu=ppc64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-riscv64-gnu@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.60.3" + conditions: os=linux & cpu=riscv64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-riscv64-musl@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-linux-riscv64-musl@npm:4.60.3" + conditions: os=linux & cpu=riscv64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-s390x-gnu@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.60.3" + conditions: os=linux & cpu=s390x & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-x64-gnu@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-linux-x64-gnu@npm:4.60.3" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-x64-musl@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-linux-x64-musl@npm:4.60.3" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-openbsd-x64@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-openbsd-x64@npm:4.60.3" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + +"@rollup/rollup-openharmony-arm64@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-openharmony-arm64@npm:4.60.3" + conditions: os=openharmony & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-win32-arm64-msvc@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.60.3" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-win32-ia32-msvc@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.60.3" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@rollup/rollup-win32-x64-gnu@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-win32-x64-gnu@npm:4.60.3" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@rollup/rollup-win32-x64-msvc@npm:4.60.3": + version: 4.60.3 + resolution: "@rollup/rollup-win32-x64-msvc@npm:4.60.3" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@scure/base@npm:^1.1.3, @scure/base@npm:~1.1.0": version: 1.1.3 resolution: "@scure/base@npm:1.1.3" @@ -1493,6 +2055,13 @@ __metadata: languageName: node linkType: hard +"@types/estree@npm:1.0.8, @types/estree@npm:^1.0.0": + version: 1.0.8 + resolution: "@types/estree@npm:1.0.8" + checksum: bd93e2e415b6f182ec4da1074e1f36c480f1d26add3e696d54fb30c09bc470897e41361c8fd957bf0985024f8fbf1e6e2aff977d79352ef7eb93a5c6dcff6c11 + languageName: node + linkType: hard + "@types/graceful-fs@npm:^4.1.3": version: 4.1.5 resolution: "@types/graceful-fs@npm:4.1.5" @@ -1527,25 +2096,6 @@ __metadata: languageName: node linkType: hard -"@types/jest-when@npm:^3.5.3": - version: 3.5.3 - resolution: "@types/jest-when@npm:3.5.3" - dependencies: - "@types/jest": "*" - checksum: 5dc2661ad570b80b8f97d7dabc50a0229f21818eefc73024b88a70216c2666f56bd97769fef565263d7242878f8187531bb14427dcb06709e9b98a1671668e9d - languageName: node - linkType: hard - -"@types/jest@npm:*": - version: 29.5.5 - resolution: "@types/jest@npm:29.5.5" - dependencies: - expect: ^29.0.0 - pretty-format: ^29.0.0 - checksum: 56e55cde9949bcc0ee2fa34ce5b7c32c2bfb20e53424aa4ff3a210859eeaaa3fdf6f42f81a3f655238039cdaaaf108b054b7a8602f394e6c52b903659338d8c6 - languageName: node - linkType: hard - "@types/jest@npm:^28.1.7": version: 28.1.8 resolution: "@types/jest@npm:28.1.8" @@ -1795,6 +2345,107 @@ __metadata: languageName: node linkType: hard +"@vitest/coverage-istanbul@npm:^2.1.0": + version: 2.1.9 + resolution: "@vitest/coverage-istanbul@npm:2.1.9" + dependencies: + "@istanbuljs/schema": ^0.1.3 + debug: ^4.3.7 + istanbul-lib-coverage: ^3.2.2 + istanbul-lib-instrument: ^6.0.3 + istanbul-lib-report: ^3.0.1 + istanbul-lib-source-maps: ^5.0.6 + istanbul-reports: ^3.1.7 + magicast: ^0.3.5 + test-exclude: ^7.0.1 + tinyrainbow: ^1.2.0 + peerDependencies: + vitest: 2.1.9 + checksum: b41a0b7f9eb9a6cd285e09b53df0aaf46d7a13e7268fac99157ff2f45dab4a5560313893361e502a01b8d983b56e5b79255583688b53a28afe46f5952c54255d + languageName: node + linkType: hard + +"@vitest/expect@npm:2.1.9": + version: 2.1.9 + resolution: "@vitest/expect@npm:2.1.9" + dependencies: + "@vitest/spy": 2.1.9 + "@vitest/utils": 2.1.9 + chai: ^5.1.2 + tinyrainbow: ^1.2.0 + checksum: a234f96dd42c76e20af68b2ad2f00b80a3873501d5daa524bf1405b344e86123716b925f976d8104fd242bfbd0d9cf7084d0eb4a690097e6e5db456d220ed67a + languageName: node + linkType: hard + +"@vitest/mocker@npm:2.1.9": + version: 2.1.9 + resolution: "@vitest/mocker@npm:2.1.9" + dependencies: + "@vitest/spy": 2.1.9 + estree-walker: ^3.0.3 + magic-string: ^0.30.12 + peerDependencies: + msw: ^2.4.9 + vite: ^5.0.0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + checksum: 17de391acc4d899f15356b45cde8202e5d5ca4517c32c0c9dcf32ce0660501773fdc29675b4f7d48c1579a560ac41f8f5181ebe41a7daf675f561d611e8e30dc + languageName: node + linkType: hard + +"@vitest/pretty-format@npm:2.1.9, @vitest/pretty-format@npm:^2.1.9": + version: 2.1.9 + resolution: "@vitest/pretty-format@npm:2.1.9" + dependencies: + tinyrainbow: ^1.2.0 + checksum: 33f7ff0a9d356ddd6534390a0aea260dc04a3022a94901c87d141bacf71d2b3fff2e3bf08a55dd424c5355fd3b41656cb7871c76372fef45ffac1ea89d0dc508 + languageName: node + linkType: hard + +"@vitest/runner@npm:2.1.9": + version: 2.1.9 + resolution: "@vitest/runner@npm:2.1.9" + dependencies: + "@vitest/utils": 2.1.9 + pathe: ^1.1.2 + checksum: d8aaadc98bcbe1ee7c832a7d619d3c77d3c67536f10b80a3106d9d6e03ecc0f5467ef7bd4a65a07fe924cc166fe7415d637b2b08ef71e1a208a250543f9f3545 + languageName: node + linkType: hard + +"@vitest/snapshot@npm:2.1.9": + version: 2.1.9 + resolution: "@vitest/snapshot@npm:2.1.9" + dependencies: + "@vitest/pretty-format": 2.1.9 + magic-string: ^0.30.12 + pathe: ^1.1.2 + checksum: fb693dea59709c9df8660e5948c7971d2c3ce74212eafa7d542a578bbb8aed203dc03129dd5e476251e1946b50432e79a4fd59069fd4f950283e188167b9496d + languageName: node + linkType: hard + +"@vitest/spy@npm:2.1.9": + version: 2.1.9 + resolution: "@vitest/spy@npm:2.1.9" + dependencies: + tinyspy: ^3.0.2 + checksum: f9279488b5d2a27800e33e8fe51cc685b2a0db49d30b80b2b0cc924f8b1736eb520459c6e8bd09fa4457f5bb86ff073e7bdcf60d36452c11a8a8f9cbc8030237 + languageName: node + linkType: hard + +"@vitest/utils@npm:2.1.9": + version: 2.1.9 + resolution: "@vitest/utils@npm:2.1.9" + dependencies: + "@vitest/pretty-format": 2.1.9 + loupe: ^3.1.2 + tinyrainbow: ^1.2.0 + checksum: b24fb9c6765801f2e0578ad5c32fadf9541a833301eaed2877a427096cf05214244b361f94eda80be2b9c841f58ae3c67d37dedc5a902b2cb44041979bae4d8f + languageName: node + linkType: hard + "@vue/compiler-core@npm:3.3.4": version: 3.3.4 resolution: "@vue/compiler-core@npm:3.3.4" @@ -2176,6 +2827,13 @@ __metadata: languageName: node linkType: hard +"assertion-error@npm:^2.0.1": + version: 2.0.1 + resolution: "assertion-error@npm:2.0.1" + checksum: a0789dd882211b87116e81e2648ccb7f60340b34f19877dd020b39ebb4714e475eb943e14ba3e22201c221ef6645b7bfe10297e76b6ac95b48a9898c1211ce66 + languageName: node + linkType: hard + "available-typed-arrays@npm:^1.0.5, available-typed-arrays@npm:^1.0.7": version: 1.0.7 resolution: "available-typed-arrays@npm:1.0.7" @@ -2268,6 +2926,22 @@ __metadata: languageName: node linkType: hard +"balanced-match@npm:^4.0.2": + version: 4.0.4 + resolution: "balanced-match@npm:4.0.4" + checksum: fb07bb66a0959c2843fc055838047e2a95ccebb837c519614afb067ebfdf2fa967ca8d712c35ced07f2cd26fc6f07964230b094891315ad74f11eba3d53178a0 + languageName: node + linkType: hard + +"baseline-browser-mapping@npm:^2.10.12": + version: 2.10.27 + resolution: "baseline-browser-mapping@npm:2.10.27" + bin: + baseline-browser-mapping: dist/cli.cjs + checksum: 7b89ecfcf34132b11a8f07249e21ede07363f02136f61b9750d953da22e376002a0a8f01163dfeb57ec7cee9eb32569f24113659f692b194125d89c64ea8156d + languageName: node + linkType: hard + "bin-links@npm:4.0.3": version: 4.0.3 resolution: "bin-links@npm:4.0.3" @@ -2299,6 +2973,24 @@ __metadata: languageName: node linkType: hard +"brace-expansion@npm:^2.0.2": + version: 2.1.0 + resolution: "brace-expansion@npm:2.1.0" + dependencies: + balanced-match: ^1.0.0 + checksum: c77a7a64aabf94b8d5913955adb4f36957917565374461355bb4276830c027a313d981f32410cea9e38f52573e7eb776d02fe05091c3a79a061958d97e4d2b43 + languageName: node + linkType: hard + +"brace-expansion@npm:^5.0.5": + version: 5.0.5 + resolution: "brace-expansion@npm:5.0.5" + dependencies: + balanced-match: ^4.0.2 + checksum: 4481b7ffa467b34c14e258167dbd8d9485a2d31d03060e8e8b38142dcde32cdc89c8f55b04d3ae7aae9304fa7eac1dfafd602787cf09c019cc45de3bb6950ffc + languageName: node + linkType: hard + "braces@npm:^3.0.3": version: 3.0.3 resolution: "braces@npm:3.0.3" @@ -2322,6 +3014,21 @@ __metadata: languageName: node linkType: hard +"browserslist@npm:^4.24.0": + version: 4.28.2 + resolution: "browserslist@npm:4.28.2" + dependencies: + baseline-browser-mapping: ^2.10.12 + caniuse-lite: ^1.0.30001782 + electron-to-chromium: ^1.5.328 + node-releases: ^2.0.36 + update-browserslist-db: ^1.2.3 + bin: + browserslist: cli.js + checksum: 702cdd3462b5eb6f8a9bb3bf7bdc6d6a4141ced6935bb44edb7f3d40edd66198775f2b4a9178682535391293e04e625ba2b5943546d692f42ea080323cecb25e + languageName: node + linkType: hard + "bs-logger@npm:0.x": version: 0.2.6 resolution: "bs-logger@npm:0.2.6" @@ -2356,6 +3063,13 @@ __metadata: languageName: node linkType: hard +"cac@npm:^6.7.14": + version: 6.7.14 + resolution: "cac@npm:6.7.14" + checksum: 45a2496a9443abbe7f52a49b22fbe51b1905eff46e03fd5e6c98e3f85077be3f8949685a1849b1a9cd2bc3e5567dfebcf64f01ce01847baf918f1b37c839791a + languageName: node + linkType: hard + "cacache@npm:^16.1.0": version: 16.1.3 resolution: "cacache@npm:16.1.3" @@ -2480,6 +3194,26 @@ __metadata: languageName: node linkType: hard +"caniuse-lite@npm:^1.0.30001782": + version: 1.0.30001791 + resolution: "caniuse-lite@npm:1.0.30001791" + checksum: 9b2f55d51b85abbb270a0d58c28b8e799ccb8fd5ef017179db3d328c8fead4f1738d95a354e75169af31c0424ffb1b691533722522ff280d4aab05d0fe4eddbd + languageName: node + linkType: hard + +"chai@npm:^5.1.2": + version: 5.3.3 + resolution: "chai@npm:5.3.3" + dependencies: + assertion-error: ^2.0.1 + check-error: ^2.1.1 + deep-eql: ^5.0.1 + loupe: ^3.1.0 + pathval: ^2.0.0 + checksum: bc4091f1cccfee63f6a3d02ce477fe847f5c57e747916a11bd72675c9459125084e2e55dc2363ee2b82b088a878039ee7ee27c75d6d90f7de9202bf1b12ce573 + languageName: node + linkType: hard + "chalk@npm:^2.4.2": version: 2.4.2 resolution: "chalk@npm:2.4.2" @@ -2515,6 +3249,13 @@ __metadata: languageName: node linkType: hard +"check-error@npm:^2.1.1": + version: 2.1.3 + resolution: "check-error@npm:2.1.3" + checksum: f1868d3db60f5a7da92e140ccf33e9152bf6124161fa9b7a4ae8eafdb05e66e1f13570401e56f314f037b0f1b71eaf38ad0c7256310d82c6105e9d85ded0f202 + languageName: node + linkType: hard + "chownr@npm:^2.0.0": version: 2.0.0 resolution: "chownr@npm:2.0.0" @@ -2678,6 +3419,13 @@ __metadata: languageName: node linkType: hard +"convert-source-map@npm:^2.0.0": + version: 2.0.0 + resolution: "convert-source-map@npm:2.0.0" + checksum: 63ae9933be5a2b8d4509daca5124e20c14d023c820258e484e32dc324d34c2754e71297c94a05784064ad27615037ef677e3f0c00469fb55f409d2bb21261035 + languageName: node + linkType: hard + "cosmiconfig@npm:^7.1.0": version: 7.1.0 resolution: "cosmiconfig@npm:7.1.0" @@ -2748,6 +3496,18 @@ __metadata: languageName: node linkType: hard +"debug@npm:^4.3.1, debug@npm:^4.3.7": + version: 4.4.3 + resolution: "debug@npm:4.4.3" + dependencies: + ms: ^2.1.3 + peerDependenciesMeta: + supports-color: + optional: true + checksum: 4805abd570e601acdca85b6aa3757186084a45cff9b2fa6eee1f3b173caa776b45f478b2a71a572d616d2010cea9211d0ac4a02a610e4c18ac4324bde3760834 + languageName: node + linkType: hard + "decamelize-keys@npm:^1.1.0": version: 1.1.0 resolution: "decamelize-keys@npm:1.1.0" @@ -2772,6 +3532,13 @@ __metadata: languageName: node linkType: hard +"deep-eql@npm:^5.0.1": + version: 5.0.2 + resolution: "deep-eql@npm:5.0.2" + checksum: 6aaaadb4c19cbce42e26b2bbe5bd92875f599d2602635dc97f0294bae48da79e89470aedee05f449e0ca8c65e9fd7e7872624d1933a1db02713d99c2ca8d1f24 + languageName: node + linkType: hard + "deep-is@npm:^0.1.3": version: 0.1.4 resolution: "deep-is@npm:0.1.4" @@ -2977,6 +3744,13 @@ __metadata: languageName: node linkType: hard +"electron-to-chromium@npm:^1.5.328": + version: 1.5.349 + resolution: "electron-to-chromium@npm:1.5.349" + checksum: b2e5f52c63789514ab29d27f830bf7f8a4c44cd58e652e201d48531eb49528a3acaa2809e6dfda913eb0b8c314afaa53ac382b970f599d254ba62802cdcc4080 + languageName: node + linkType: hard + "emittery@npm:^0.13.1": version: 0.13.1 resolution: "emittery@npm:0.13.1" @@ -3091,6 +3865,13 @@ __metadata: languageName: node linkType: hard +"es-module-lexer@npm:^1.5.4": + version: 1.7.0 + resolution: "es-module-lexer@npm:1.7.0" + checksum: 7858bb76ae387fdbf8a6fccc951bf18919768309850587553eca34698b9193fbc65fab03d3d9f69163d860321fbf66adf89d5821e7f4148c7cb7d7b997259211 + languageName: node + linkType: hard + "es-object-atoms@npm:^1.0.0, es-object-atoms@npm:^1.1.1": version: 1.1.1 resolution: "es-object-atoms@npm:1.1.1" @@ -3131,6 +3912,86 @@ __metadata: languageName: node linkType: hard +"esbuild@npm:^0.21.3": + version: 0.21.5 + resolution: "esbuild@npm:0.21.5" + dependencies: + "@esbuild/aix-ppc64": 0.21.5 + "@esbuild/android-arm": 0.21.5 + "@esbuild/android-arm64": 0.21.5 + "@esbuild/android-x64": 0.21.5 + "@esbuild/darwin-arm64": 0.21.5 + "@esbuild/darwin-x64": 0.21.5 + "@esbuild/freebsd-arm64": 0.21.5 + "@esbuild/freebsd-x64": 0.21.5 + "@esbuild/linux-arm": 0.21.5 + "@esbuild/linux-arm64": 0.21.5 + "@esbuild/linux-ia32": 0.21.5 + "@esbuild/linux-loong64": 0.21.5 + "@esbuild/linux-mips64el": 0.21.5 + "@esbuild/linux-ppc64": 0.21.5 + "@esbuild/linux-riscv64": 0.21.5 + "@esbuild/linux-s390x": 0.21.5 + "@esbuild/linux-x64": 0.21.5 + "@esbuild/netbsd-x64": 0.21.5 + "@esbuild/openbsd-x64": 0.21.5 + "@esbuild/sunos-x64": 0.21.5 + "@esbuild/win32-arm64": 0.21.5 + "@esbuild/win32-ia32": 0.21.5 + "@esbuild/win32-x64": 0.21.5 + dependenciesMeta: + "@esbuild/aix-ppc64": + optional: true + "@esbuild/android-arm": + optional: true + "@esbuild/android-arm64": + optional: true + "@esbuild/android-x64": + optional: true + "@esbuild/darwin-arm64": + optional: true + "@esbuild/darwin-x64": + optional: true + "@esbuild/freebsd-arm64": + optional: true + "@esbuild/freebsd-x64": + optional: true + "@esbuild/linux-arm": + optional: true + "@esbuild/linux-arm64": + optional: true + "@esbuild/linux-ia32": + optional: true + "@esbuild/linux-loong64": + optional: true + "@esbuild/linux-mips64el": + optional: true + "@esbuild/linux-ppc64": + optional: true + "@esbuild/linux-riscv64": + optional: true + "@esbuild/linux-s390x": + optional: true + "@esbuild/linux-x64": + optional: true + "@esbuild/netbsd-x64": + optional: true + "@esbuild/openbsd-x64": + optional: true + "@esbuild/sunos-x64": + optional: true + "@esbuild/win32-arm64": + optional: true + "@esbuild/win32-ia32": + optional: true + "@esbuild/win32-x64": + optional: true + bin: + esbuild: bin/esbuild + checksum: 2911c7b50b23a9df59a7d6d4cdd3a4f85855787f374dce751148dbb13305e0ce7e880dde1608c2ab7a927fc6cec3587b80995f7fc87a64b455f8b70b55fd8ec1 + languageName: node + linkType: hard + "escalade@npm:^3.1.1": version: 3.1.1 resolution: "escalade@npm:3.1.1" @@ -3138,6 +3999,13 @@ __metadata: languageName: node linkType: hard +"escalade@npm:^3.2.0": + version: 3.2.0 + resolution: "escalade@npm:3.2.0" + checksum: 47b029c83de01b0d17ad99ed766347b974b0d628e848de404018f3abee728e987da0d2d370ad4574aa3d5b5bfc368754fd085d69a30f8e75903486ec4b5b709e + languageName: node + linkType: hard + "escape-string-regexp@npm:^1.0.5": version: 1.0.5 resolution: "escape-string-regexp@npm:1.0.5" @@ -3498,6 +4366,15 @@ __metadata: languageName: node linkType: hard +"estree-walker@npm:^3.0.3": + version: 3.0.3 + resolution: "estree-walker@npm:3.0.3" + dependencies: + "@types/estree": ^1.0.0 + checksum: a65728d5727b71de172c5df323385755a16c0fdab8234dc756c3854cfee343261ddfbb72a809a5660fac8c75d960bb3e21aa898c2d7e9b19bb298482ca58a3af + languageName: node + linkType: hard + "esutils@npm:^2.0.2": version: 2.0.3 resolution: "esutils@npm:2.0.3" @@ -3557,6 +4434,13 @@ __metadata: languageName: node linkType: hard +"expect-type@npm:^1.1.0": + version: 1.3.0 + resolution: "expect-type@npm:1.3.0" + checksum: 60476b4f4c0c88bf24db0735faa7d1d0c9120c21e5b78781c0fea0d4a95838f2db0c919a055aa4bb185ccbf38e37fa3000d3bb05500ceafcc7c469955c5a4f84 + languageName: node + linkType: hard + "expect@npm:^28.0.0": version: 28.1.3 resolution: "expect@npm:28.1.3" @@ -3570,7 +4454,7 @@ __metadata: languageName: node linkType: hard -"expect@npm:^29.0.0, expect@npm:^29.2.2": +"expect@npm:^29.2.2": version: 29.7.0 resolution: "expect@npm:29.7.0" dependencies: @@ -3770,6 +4654,16 @@ __metadata: languageName: node linkType: hard +"fsevents@npm:~2.3.2, fsevents@npm:~2.3.3": + version: 2.3.3 + resolution: "fsevents@npm:2.3.3" + dependencies: + node-gyp: latest + checksum: 11e6ea6fea15e42461fc55b4b0e4a0a3c654faa567f1877dbd353f39156f69def97a69936d1746619d656c4b93de2238bf731f6085a03a50cabf287c9d024317 + conditions: os=darwin + languageName: node + linkType: hard + "fsevents@patch:fsevents@^2.3.2#~builtin": version: 2.3.2 resolution: "fsevents@patch:fsevents@npm%3A2.3.2#~builtin::version=2.3.2&hash=18f3a7" @@ -3779,6 +4673,15 @@ __metadata: languageName: node linkType: hard +"fsevents@patch:fsevents@~2.3.2#~builtin, fsevents@patch:fsevents@~2.3.3#~builtin": + version: 2.3.3 + resolution: "fsevents@patch:fsevents@npm%3A2.3.3#~builtin::version=2.3.3&hash=18f3a7" + dependencies: + node-gyp: latest + conditions: os=darwin + languageName: node + linkType: hard + "function-bind@npm:^1.1.1, function-bind@npm:^1.1.2": version: 1.1.2 resolution: "function-bind@npm:1.1.2" @@ -3927,6 +4830,22 @@ __metadata: languageName: node linkType: hard +"glob@npm:^10.4.1": + version: 10.5.0 + resolution: "glob@npm:10.5.0" + dependencies: + foreground-child: ^3.1.0 + jackspeak: ^3.1.2 + minimatch: ^9.0.4 + minipass: ^7.1.2 + package-json-from-dist: ^1.0.0 + path-scurry: ^1.11.1 + bin: + glob: dist/esm/bin.mjs + checksum: cda96c074878abca9657bd984d2396945cf0d64283f6feeb40d738fe2da642be0010ad5210a1646244a5fc3511b0cab5a374569b3de5a12b8a63d392f18c6043 + languageName: node + linkType: hard + "glob@npm:^7.1.3, glob@npm:^7.1.4": version: 7.2.3 resolution: "glob@npm:7.2.3" @@ -4664,10 +5583,10 @@ __metadata: languageName: node linkType: hard -"istanbul-lib-coverage@npm:^3.0.0, istanbul-lib-coverage@npm:^3.2.0": - version: 3.2.0 - resolution: "istanbul-lib-coverage@npm:3.2.0" - checksum: a2a545033b9d56da04a8571ed05c8120bf10e9bce01cf8633a3a2b0d1d83dff4ac4fe78d6d5673c27fc29b7f21a41d75f83a36be09f82a61c367b56aa73c1ff9 +"istanbul-lib-coverage@npm:^3.2.2": + version: 3.2.2 + resolution: "istanbul-lib-coverage@npm:3.2.2" + checksum: 2367407a8d13982d8f7a859a35e7f8dd5d8f75aae4bb5484ede3a9ea1b426dc245aff28b976a2af48ee759fdd9be374ce2bd2669b644f31e76c5f46a2e29a831 languageName: node linkType: hard @@ -4684,6 +5603,19 @@ __metadata: languageName: node linkType: hard +"istanbul-lib-instrument@npm:^6.0.3": + version: 6.0.3 + resolution: "istanbul-lib-instrument@npm:6.0.3" + dependencies: + "@babel/core": ^7.23.9 + "@babel/parser": ^7.23.9 + "@istanbuljs/schema": ^0.1.3 + istanbul-lib-coverage: ^3.2.0 + semver: ^7.5.4 + checksum: 74104c60c65c4fa0e97cc76f039226c356123893929f067bfad5f86fe839e08f5d680354a68fead3bc9c1e2f3fa6f3f53cded70778e821d911e851d349f3545a + languageName: node + linkType: hard + "istanbul-lib-report@npm:^3.0.0": version: 3.0.0 resolution: "istanbul-lib-report@npm:3.0.0" @@ -4695,6 +5627,17 @@ __metadata: languageName: node linkType: hard +"istanbul-lib-report@npm:^3.0.1": + version: 3.0.1 + resolution: "istanbul-lib-report@npm:3.0.1" + dependencies: + istanbul-lib-coverage: ^3.0.0 + make-dir: ^4.0.0 + supports-color: ^7.1.0 + checksum: fd17a1b879e7faf9bb1dc8f80b2a16e9f5b7b8498fe6ed580a618c34df0bfe53d2abd35bf8a0a00e628fb7405462576427c7df20bbe4148d19c14b431c974b21 + languageName: node + linkType: hard + "istanbul-lib-source-maps@npm:^4.0.0": version: 4.0.1 resolution: "istanbul-lib-source-maps@npm:4.0.1" @@ -4706,6 +5649,17 @@ __metadata: languageName: node linkType: hard +"istanbul-lib-source-maps@npm:^5.0.6": + version: 5.0.6 + resolution: "istanbul-lib-source-maps@npm:5.0.6" + dependencies: + "@jridgewell/trace-mapping": ^0.3.23 + debug: ^4.1.1 + istanbul-lib-coverage: ^3.0.0 + checksum: 8dd6f2c1e2ecaacabeef8dc9ab52c4ed0a6036310002cf7f46ea6f3a5fb041da8076f5350e6a6be4c60cd4f231c51c73e042044afaf44820d857d92ecfb8ab6c + languageName: node + linkType: hard + "istanbul-reports@npm:^3.1.3": version: 3.1.5 resolution: "istanbul-reports@npm:3.1.5" @@ -4716,6 +5670,16 @@ __metadata: languageName: node linkType: hard +"istanbul-reports@npm:^3.1.7": + version: 3.2.0 + resolution: "istanbul-reports@npm:3.2.0" + dependencies: + html-escaper: ^2.0.0 + istanbul-lib-report: ^3.0.0 + checksum: 72b4c8525276147908d28b0917bc675b1019836b638e50875521ca3b8ec63672681aa98dbab88a6f49ef798c08fe041d428abdcf84f4f3fcff5844eee54af65a + languageName: node + linkType: hard + "jackspeak@npm:^2.3.6": version: 2.3.6 resolution: "jackspeak@npm:2.3.6" @@ -4729,6 +5693,19 @@ __metadata: languageName: node linkType: hard +"jackspeak@npm:^3.1.2": + version: 3.4.3 + resolution: "jackspeak@npm:3.4.3" + dependencies: + "@isaacs/cliui": ^8.0.2 + "@pkgjs/parseargs": ^0.11.0 + dependenciesMeta: + "@pkgjs/parseargs": + optional: true + checksum: be31027fc72e7cc726206b9f560395604b82e0fddb46c4cbf9f97d049bcef607491a5afc0699612eaa4213ca5be8fd3e1e7cd187b3040988b65c9489838a7c00 + languageName: node + linkType: hard + "jest-changed-files@npm:^29.2.0": version: 29.2.0 resolution: "jest-changed-files@npm:29.2.0" @@ -5215,15 +6192,6 @@ __metadata: languageName: node linkType: hard -"jest-when@npm:^3.6.0": - version: 3.6.0 - resolution: "jest-when@npm:3.6.0" - peerDependencies: - jest: ">= 25" - checksum: ed32ed84e5802bb6fec98966cdf862ce59677551be33d3795e6ac7a6207acf467ed559573d671c8d94c59f7fc0780cf358d2d165d81cdc7d9611250d975ee024 - languageName: node - linkType: hard - "jest-worker@npm:^29.2.1": version: 29.2.1 resolution: "jest-worker@npm:29.2.1" @@ -5308,6 +6276,15 @@ __metadata: languageName: node linkType: hard +"jsesc@npm:^3.0.2": + version: 3.1.0 + resolution: "jsesc@npm:3.1.0" + bin: + jsesc: bin/jsesc + checksum: 19c94095ea026725540c0d29da33ab03144f6bcf2d4159e4833d534976e99e0c09c38cefa9a575279a51fc36b31166f8d6d05c9fe2645d5f15851d690b41f17f + languageName: node + linkType: hard + "json-parse-even-better-errors@npm:^2.3.0": version: 2.3.1 resolution: "json-parse-even-better-errors@npm:2.3.1" @@ -5450,6 +6427,13 @@ __metadata: languageName: node linkType: hard +"loupe@npm:^3.1.0, loupe@npm:^3.1.2": + version: 3.2.1 + resolution: "loupe@npm:3.2.1" + checksum: 3ce9ecc5b2c56ffc073bf065ad3a4644cccce3eac81e61a8732e9c8ebfe05513ed478592d25f9dba24cfe82766913be045ab384c04711c7c6447deaf800ad94c + languageName: node + linkType: hard + "lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0": version: 10.2.2 resolution: "lru-cache@npm:10.2.2" @@ -5457,6 +6441,15 @@ __metadata: languageName: node linkType: hard +"lru-cache@npm:^5.1.1": + version: 5.1.1 + resolution: "lru-cache@npm:5.1.1" + dependencies: + yallist: ^3.0.2 + checksum: c154ae1cbb0c2206d1501a0e94df349653c92c8cbb25236d7e85190bcaf4567a03ac6eb43166fabfa36fd35623694da7233e88d9601fbf411a9a481d85dbd2cb + languageName: node + linkType: hard + "lru-cache@npm:^6.0.0": version: 6.0.0 resolution: "lru-cache@npm:6.0.0" @@ -5489,6 +6482,26 @@ __metadata: languageName: node linkType: hard +"magic-string@npm:^0.30.12": + version: 0.30.21 + resolution: "magic-string@npm:0.30.21" + dependencies: + "@jridgewell/sourcemap-codec": ^1.5.5 + checksum: 4ff76a4e8d439431cf49f039658751ed351962d044e5955adc257489569bd676019c906b631f86319217689d04815d7d064ee3ff08ab82ae65b7655a7e82a414 + languageName: node + linkType: hard + +"magicast@npm:^0.3.5": + version: 0.3.5 + resolution: "magicast@npm:0.3.5" + dependencies: + "@babel/parser": ^7.25.4 + "@babel/types": ^7.25.4 + source-map-js: ^1.2.0 + checksum: 668f07ade907a44bccfc9a9321588473f6d5fa25329aa26b9ad9a3bf87cc2e6f9c482cbdd3e33c0b9ab9b79c065630c599cc055a12f881c8c924ee0d7282cdce + languageName: node + linkType: hard + "make-dir@npm:^3.0.0": version: 3.1.0 resolution: "make-dir@npm:3.1.0" @@ -5498,6 +6511,15 @@ __metadata: languageName: node linkType: hard +"make-dir@npm:^4.0.0": + version: 4.0.0 + resolution: "make-dir@npm:4.0.0" + dependencies: + semver: ^7.5.3 + checksum: bf0731a2dd3aab4db6f3de1585cea0b746bb73eb5a02e3d8d72757e376e64e6ada190b1eddcde5b2f24a81b688a9897efd5018737d05e02e2a671dda9cff8a8a + languageName: node + linkType: hard + "make-error@npm:1.x, make-error@npm:^1.1.1": version: 1.3.6 resolution: "make-error@npm:1.3.6" @@ -5653,6 +6675,15 @@ __metadata: languageName: node linkType: hard +"minimatch@npm:^10.2.2": + version: 10.2.5 + resolution: "minimatch@npm:10.2.5" + dependencies: + brace-expansion: ^5.0.5 + checksum: 000423875fecbc7da1d74bf63c9081363a71291ef2588c376c45647ac004582cb5bc8cc09ef84420b26bfb490f4d0818d328e78569c6228e20d90271283f73ba + languageName: node + linkType: hard + "minimatch@npm:^3.0.4, minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": version: 3.1.2 resolution: "minimatch@npm:3.1.2" @@ -5689,6 +6720,15 @@ __metadata: languageName: node linkType: hard +"minimatch@npm:^9.0.4": + version: 9.0.9 + resolution: "minimatch@npm:9.0.9" + dependencies: + brace-expansion: ^2.0.2 + checksum: 5292681ba1e14544ca9214ba5e412bb346214fb783354b22752f2d1e5c176e4a2c0bfcafeb1046389b816009ab73ba5410b176ce605632e8aa695db25f87f6b9 + languageName: node + linkType: hard + "minimist-options@npm:4.1.0": version: 4.1.0 resolution: "minimist-options@npm:4.1.0" @@ -5805,6 +6845,13 @@ __metadata: languageName: node linkType: hard +"minipass@npm:^7.1.2": + version: 7.1.3 + resolution: "minipass@npm:7.1.3" + checksum: 2ede17c0bf8fec499be3360fd07f0ec7666189e3907320a9b653f1530cf84af98928c5b12d80bfb75f321833bf2e97785b940540213ebdafe97a5f10327e664d + languageName: node + linkType: hard + "minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": version: 2.1.2 resolution: "minizlib@npm:2.1.2" @@ -5831,7 +6878,7 @@ __metadata: languageName: node linkType: hard -"ms@npm:^2.0.0, ms@npm:^2.1.1": +"ms@npm:^2.0.0, ms@npm:^2.1.1, ms@npm:^2.1.3": version: 2.1.3 resolution: "ms@npm:2.1.3" checksum: aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d @@ -5858,6 +6905,15 @@ __metadata: languageName: node linkType: hard +"nanoid@npm:^3.3.11": + version: 3.3.12 + resolution: "nanoid@npm:3.3.12" + bin: + nanoid: bin/nanoid.cjs + checksum: 38699257447dc59e21e73e0510d0dfb16b7a610d9ca80633d5c3a68f9b4298c990513d30404ca8f163c2d03225ee01695ff8898bea6179183f38f0477b7635ac + languageName: node + linkType: hard + "nanoid@npm:^3.3.6": version: 3.3.8 resolution: "nanoid@npm:3.3.8" @@ -5949,6 +7005,13 @@ __metadata: languageName: node linkType: hard +"node-releases@npm:^2.0.36": + version: 2.0.38 + resolution: "node-releases@npm:2.0.38" + checksum: fe5af7b5928d06783534b38d0c55e3467b719a8a53acc2fd15f7f2d2ef4cedb38ae411cce59e2c10027827650c81897c41045e742131b9b5e4d118ce1b307025 + languageName: node + linkType: hard + "node-releases@npm:^2.0.6": version: 2.0.6 resolution: "node-releases@npm:2.0.6" @@ -6214,6 +7277,13 @@ __metadata: languageName: node linkType: hard +"package-json-from-dist@npm:^1.0.0": + version: 1.0.1 + resolution: "package-json-from-dist@npm:1.0.1" + checksum: 58ee9538f2f762988433da00e26acc788036914d57c71c246bf0be1b60cdbd77dd60b6a3e1a30465f0b248aeb80079e0b34cb6050b1dfa18c06953bb1cbc7602 + languageName: node + linkType: hard + "parent-module@npm:^1.0.0": version: 1.0.1 resolution: "parent-module@npm:1.0.1" @@ -6270,7 +7340,7 @@ __metadata: languageName: node linkType: hard -"path-scurry@npm:^1.11.0": +"path-scurry@npm:^1.11.0, path-scurry@npm:^1.11.1": version: 1.11.1 resolution: "path-scurry@npm:1.11.1" dependencies: @@ -6287,6 +7357,20 @@ __metadata: languageName: node linkType: hard +"pathe@npm:^1.1.2": + version: 1.1.2 + resolution: "pathe@npm:1.1.2" + checksum: ec5f778d9790e7b9ffc3e4c1df39a5bb1ce94657a4e3ad830c1276491ca9d79f189f47609884671db173400256b005f4955f7952f52a2aeb5834ad5fb4faf134 + languageName: node + linkType: hard + +"pathval@npm:^2.0.0": + version: 2.0.1 + resolution: "pathval@npm:2.0.1" + checksum: 280e71cfd86bb5d7ff371fe2752997e5fa82901fcb209abf19d4457b7814f1b4a17845dfb17bd28a596ccdb0ecea178720ce23dacfa9c841f37804b700647810 + languageName: node + linkType: hard + "picocolors@npm:^1.0.0": version: 1.0.0 resolution: "picocolors@npm:1.0.0" @@ -6294,6 +7378,13 @@ __metadata: languageName: node linkType: hard +"picocolors@npm:^1.1.1": + version: 1.1.1 + resolution: "picocolors@npm:1.1.1" + checksum: e1cf46bf84886c79055fdfa9dcb3e4711ad259949e3565154b004b260cd356c5d54b31a1437ce9782624bf766272fe6b0154f5f0c744fb7af5d454d2b60db045 + languageName: node + linkType: hard + "picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.2.3, picomatch@npm:^2.3.1": version: 2.3.1 resolution: "picomatch@npm:2.3.1" @@ -6360,6 +7451,17 @@ __metadata: languageName: node linkType: hard +"postcss@npm:^8.4.43": + version: 8.5.14 + resolution: "postcss@npm:8.5.14" + dependencies: + nanoid: ^3.3.11 + picocolors: ^1.1.1 + source-map-js: ^1.2.1 + checksum: ec17d1519cd997b43aceb82bfa959f380085591269e286c53d5ba76eb1989525e7cde106a44f1565516fcbb50f206eb1858cc2cd5e5aaea3a8ee793886c8232c + languageName: node + linkType: hard + "prelude-ls@npm:^1.2.1": version: 1.2.1 resolution: "prelude-ls@npm:1.2.1" @@ -6412,7 +7514,7 @@ __metadata: languageName: node linkType: hard -"pretty-format@npm:^29.0.0, pretty-format@npm:^29.2.1, pretty-format@npm:^29.7.0": +"pretty-format@npm:^29.2.1, pretty-format@npm:^29.7.0": version: 29.7.0 resolution: "pretty-format@npm:29.7.0" dependencies: @@ -6682,6 +7784,96 @@ __metadata: languageName: node linkType: hard +"rollup@npm:^4.20.0": + version: 4.60.3 + resolution: "rollup@npm:4.60.3" + dependencies: + "@rollup/rollup-android-arm-eabi": 4.60.3 + "@rollup/rollup-android-arm64": 4.60.3 + "@rollup/rollup-darwin-arm64": 4.60.3 + "@rollup/rollup-darwin-x64": 4.60.3 + "@rollup/rollup-freebsd-arm64": 4.60.3 + "@rollup/rollup-freebsd-x64": 4.60.3 + "@rollup/rollup-linux-arm-gnueabihf": 4.60.3 + "@rollup/rollup-linux-arm-musleabihf": 4.60.3 + "@rollup/rollup-linux-arm64-gnu": 4.60.3 + "@rollup/rollup-linux-arm64-musl": 4.60.3 + "@rollup/rollup-linux-loong64-gnu": 4.60.3 + "@rollup/rollup-linux-loong64-musl": 4.60.3 + "@rollup/rollup-linux-ppc64-gnu": 4.60.3 + "@rollup/rollup-linux-ppc64-musl": 4.60.3 + "@rollup/rollup-linux-riscv64-gnu": 4.60.3 + "@rollup/rollup-linux-riscv64-musl": 4.60.3 + "@rollup/rollup-linux-s390x-gnu": 4.60.3 + "@rollup/rollup-linux-x64-gnu": 4.60.3 + "@rollup/rollup-linux-x64-musl": 4.60.3 + "@rollup/rollup-openbsd-x64": 4.60.3 + "@rollup/rollup-openharmony-arm64": 4.60.3 + "@rollup/rollup-win32-arm64-msvc": 4.60.3 + "@rollup/rollup-win32-ia32-msvc": 4.60.3 + "@rollup/rollup-win32-x64-gnu": 4.60.3 + "@rollup/rollup-win32-x64-msvc": 4.60.3 + "@types/estree": 1.0.8 + fsevents: ~2.3.2 + dependenciesMeta: + "@rollup/rollup-android-arm-eabi": + optional: true + "@rollup/rollup-android-arm64": + optional: true + "@rollup/rollup-darwin-arm64": + optional: true + "@rollup/rollup-darwin-x64": + optional: true + "@rollup/rollup-freebsd-arm64": + optional: true + "@rollup/rollup-freebsd-x64": + optional: true + "@rollup/rollup-linux-arm-gnueabihf": + optional: true + "@rollup/rollup-linux-arm-musleabihf": + optional: true + "@rollup/rollup-linux-arm64-gnu": + optional: true + "@rollup/rollup-linux-arm64-musl": + optional: true + "@rollup/rollup-linux-loong64-gnu": + optional: true + "@rollup/rollup-linux-loong64-musl": + optional: true + "@rollup/rollup-linux-ppc64-gnu": + optional: true + "@rollup/rollup-linux-ppc64-musl": + optional: true + "@rollup/rollup-linux-riscv64-gnu": + optional: true + "@rollup/rollup-linux-riscv64-musl": + optional: true + "@rollup/rollup-linux-s390x-gnu": + optional: true + "@rollup/rollup-linux-x64-gnu": + optional: true + "@rollup/rollup-linux-x64-musl": + optional: true + "@rollup/rollup-openbsd-x64": + optional: true + "@rollup/rollup-openharmony-arm64": + optional: true + "@rollup/rollup-win32-arm64-msvc": + optional: true + "@rollup/rollup-win32-ia32-msvc": + optional: true + "@rollup/rollup-win32-x64-gnu": + optional: true + "@rollup/rollup-win32-x64-msvc": + optional: true + fsevents: + optional: true + bin: + rollup: dist/bin/rollup + checksum: 8f03fc7b1f0f5d989daea043087035ff711ec74d241562e150b42753a86e484e15719c8fad9e5621c22e64ffed79234f778c3f9528b5b223f65a6275339735ba + languageName: node + linkType: hard + "run-async@npm:^2.3.0": version: 2.4.1 resolution: "run-async@npm:2.4.1" @@ -6767,7 +7959,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:^6.0.0, semver@npm:^6.3.0": +"semver@npm:^6.0.0, semver@npm:^6.3.0, semver@npm:^6.3.1": version: 6.3.1 resolution: "semver@npm:6.3.1" bin: @@ -6843,6 +8035,13 @@ __metadata: languageName: node linkType: hard +"siginfo@npm:^2.0.0": + version: 2.0.0 + resolution: "siginfo@npm:2.0.0" + checksum: 8aa5a98640ca09fe00d74416eca97551b3e42991614a3d1b824b115fc1401543650914f651ab1311518177e4d297e80b953f4cd4cd7ea1eabe824e8f2091de01 + languageName: node + linkType: hard + "signal-exit@npm:^3.0.3, signal-exit@npm:^3.0.7": version: 3.0.7 resolution: "signal-exit@npm:3.0.7" @@ -6947,6 +8146,13 @@ __metadata: languageName: node linkType: hard +"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: 4eb0cd997cdf228bc253bcaff9340afeb706176e64868ecd20efbe6efea931465f43955612346d6b7318789e5265bdc419bc7669c1cebe3db0eb255f57efa76b + languageName: node + linkType: hard + "source-map-support@npm:0.5.13": version: 0.5.13 resolution: "source-map-support@npm:0.5.13" @@ -7039,6 +8245,20 @@ __metadata: languageName: node linkType: hard +"stackback@npm:0.0.2": + version: 0.0.2 + resolution: "stackback@npm:0.0.2" + checksum: 2d4dc4e64e2db796de4a3c856d5943daccdfa3dd092e452a1ce059c81e9a9c29e0b9badba91b43ef0d5ff5c04ee62feb3bcc559a804e16faf447bac2d883aa99 + languageName: node + linkType: hard + +"std-env@npm:^3.8.0": + version: 3.10.0 + resolution: "std-env@npm:3.10.0" + checksum: 51d641b36b0fae494a546fb8446d39a837957fbf902c765c62bd12af8e50682d141c4087ca032f1192fa90330c4f6ff23fd6c9795324efacd1684e814471e0e0 + languageName: node + linkType: hard + "stdio-mock@npm:^1.2.0": version: 1.2.0 resolution: "stdio-mock@npm:1.2.0" @@ -7254,6 +8474,17 @@ __metadata: languageName: node linkType: hard +"test-exclude@npm:^7.0.1": + version: 7.0.2 + resolution: "test-exclude@npm:7.0.2" + dependencies: + "@istanbuljs/schema": ^0.1.2 + glob: ^10.4.1 + minimatch: ^10.2.2 + checksum: 35fd6304435c31e6b3dd4f5ad16de521eef46d433c4d2f2ef81a981b002a99db70b12d372f042df48a38f9bd356eb2a3d5523d75ec2121671e400f5468e07bd1 + languageName: node + linkType: hard + "text-table@npm:^0.2.0": version: 0.2.0 resolution: "text-table@npm:0.2.0" @@ -7271,6 +8502,41 @@ __metadata: languageName: node linkType: hard +"tinybench@npm:^2.9.0": + version: 2.9.0 + resolution: "tinybench@npm:2.9.0" + checksum: 1ab00d7dfe0d1f127cbf00822bacd9024f7a50a3ecd1f354a8168e0b7d2b53a639a24414e707c27879d1adc0f5153141d51d76ebd7b4d37fe245e742e5d91fe8 + languageName: node + linkType: hard + +"tinyexec@npm:^0.3.1": + version: 0.3.2 + resolution: "tinyexec@npm:0.3.2" + checksum: bd491923020610bdeadb0d8cf5d70e7cbad5a3201620fd01048c9bf3b31ffaa75c33254e1540e13b993ce4e8187852b0b5a93057bb598e7a57afa2ca2048a35c + languageName: node + linkType: hard + +"tinypool@npm:^1.0.1": + version: 1.1.1 + resolution: "tinypool@npm:1.1.1" + checksum: 0258abe108df8be395a2cbdc8b4390c94908850250530f7bea83a129fa33d49a8c93246f76bf81cd458534abd81322f4d4cb3a40690254f8d9044ff449f328a8 + languageName: node + linkType: hard + +"tinyrainbow@npm:^1.2.0": + version: 1.2.0 + resolution: "tinyrainbow@npm:1.2.0" + checksum: d1e2cb5400032c0092be00e4a3da5450bea8b4fad58bfb5d3c58ca37ff5c5e252f7fcfb9af247914854af79c46014add9d1042fe044358c305a129ed55c8be35 + languageName: node + linkType: hard + +"tinyspy@npm:^3.0.2": + version: 3.0.2 + resolution: "tinyspy@npm:3.0.2" + checksum: 5db671b2ff5cd309de650c8c4761ca945459d7204afb1776db9a04fb4efa28a75f08517a8620c01ee32a577748802231ad92f7d5b194dc003ee7f987a2a06337 + languageName: node + linkType: hard + "tmpl@npm:1.0.5": version: 1.0.5 resolution: "tmpl@npm:1.0.5" @@ -7636,6 +8902,20 @@ __metadata: languageName: node linkType: hard +"update-browserslist-db@npm:^1.2.3": + version: 1.2.3 + resolution: "update-browserslist-db@npm:1.2.3" + dependencies: + escalade: ^3.2.0 + picocolors: ^1.1.1 + peerDependencies: + browserslist: ">= 4.21.0" + bin: + update-browserslist-db: cli.js + checksum: 6f209a97ae8eacdd3a1ef2eb365adf49d1e2a757e5b2dd4ac87dc8c99236cbe3e572d3e605a87dd7b538a11751b71d9f93edc47c7405262a293a493d155316cd + languageName: node + linkType: hard + "uri-js@npm:^4.2.2": version: 4.4.1 resolution: "uri-js@npm:4.4.1" @@ -7709,6 +8989,114 @@ __metadata: languageName: node linkType: hard +"vite-node@npm:2.1.9": + version: 2.1.9 + resolution: "vite-node@npm:2.1.9" + dependencies: + cac: ^6.7.14 + debug: ^4.3.7 + es-module-lexer: ^1.5.4 + pathe: ^1.1.2 + vite: ^5.0.0 + bin: + vite-node: vite-node.mjs + checksum: 716d37649834ecea547b43121ee89b2e4f9ca65ff6ce26214770ecfefe070b8c7245c9fdd0f92fb232d266e153629d04af9a4dc4fc350abfa521e5e46434b7b2 + languageName: node + linkType: hard + +"vite@npm:^5.0.0": + version: 5.4.21 + resolution: "vite@npm:5.4.21" + dependencies: + esbuild: ^0.21.3 + fsevents: ~2.3.3 + postcss: ^8.4.43 + rollup: ^4.20.0 + peerDependencies: + "@types/node": ^18.0.0 || >=20.0.0 + less: "*" + lightningcss: ^1.21.0 + sass: "*" + sass-embedded: "*" + stylus: "*" + sugarss: "*" + terser: ^5.4.0 + dependenciesMeta: + fsevents: + optional: true + peerDependenciesMeta: + "@types/node": + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + bin: + vite: bin/vite.js + checksum: 7177fa03cff6a382f225290c9889a0d0e944d17eab705bcba89b58558a6f7adfa1f47e469b88f42a044a0eb40c12a1bf68b3cb42abb5295d04f9d7d4dd320837 + languageName: node + linkType: hard + +"vitest@npm:^2.1.0": + version: 2.1.9 + resolution: "vitest@npm:2.1.9" + dependencies: + "@vitest/expect": 2.1.9 + "@vitest/mocker": 2.1.9 + "@vitest/pretty-format": ^2.1.9 + "@vitest/runner": 2.1.9 + "@vitest/snapshot": 2.1.9 + "@vitest/spy": 2.1.9 + "@vitest/utils": 2.1.9 + chai: ^5.1.2 + debug: ^4.3.7 + expect-type: ^1.1.0 + magic-string: ^0.30.12 + pathe: ^1.1.2 + std-env: ^3.8.0 + tinybench: ^2.9.0 + tinyexec: ^0.3.1 + tinypool: ^1.0.1 + tinyrainbow: ^1.2.0 + vite: ^5.0.0 + vite-node: 2.1.9 + why-is-node-running: ^2.3.0 + peerDependencies: + "@edge-runtime/vm": "*" + "@types/node": ^18.0.0 || >=20.0.0 + "@vitest/browser": 2.1.9 + "@vitest/ui": 2.1.9 + happy-dom: "*" + jsdom: "*" + peerDependenciesMeta: + "@edge-runtime/vm": + optional: true + "@types/node": + optional: true + "@vitest/browser": + optional: true + "@vitest/ui": + optional: true + happy-dom: + optional: true + jsdom: + optional: true + bin: + vitest: vitest.mjs + checksum: 20db77529f843930ef1626103c898b27528d6d68d6c44753ec823e318f26bbdeb3bc56e6fb80e3f1ecc34382107d32e1f4e709e23198f414fecc9298ab225fa8 + languageName: node + linkType: hard + "vscode-oniguruma@npm:^1.7.0": version: 1.7.0 resolution: "vscode-oniguruma@npm:1.7.0" @@ -8077,6 +9465,18 @@ __metadata: languageName: node linkType: hard +"why-is-node-running@npm:^2.3.0": + version: 2.3.0 + resolution: "why-is-node-running@npm:2.3.0" + dependencies: + siginfo: ^2.0.0 + stackback: 0.0.2 + bin: + why-is-node-running: cli.js + checksum: 58ebbf406e243ace97083027f0df7ff4c2108baf2595bb29317718ef207cc7a8104e41b711ff65d6fa354f25daa8756b67f2f04931a4fd6ba9d13ae8197496fb + languageName: node + linkType: hard + "wide-align@npm:^1.1.5": version: 1.1.5 resolution: "wide-align@npm:1.1.5" @@ -8157,6 +9557,13 @@ __metadata: languageName: node linkType: hard +"yallist@npm:^3.0.2": + version: 3.1.1 + resolution: "yallist@npm:3.1.1" + checksum: 48f7bb00dc19fc635a13a39fe547f527b10c9290e7b3e836b9a8f1ca04d4d342e85714416b3c2ab74949c9c66f9cebb0473e6bc353b79035356103b47641285d + languageName: node + linkType: hard + "yallist@npm:^4.0.0": version: 4.0.0 resolution: "yallist@npm:4.0.0"