diff --git a/.changeset/empty-dolls-tickle.md b/.changeset/empty-dolls-tickle.md new file mode 100644 index 0000000..39096cf --- /dev/null +++ b/.changeset/empty-dolls-tickle.md @@ -0,0 +1,7 @@ +--- +"@openwallet-foundation/askar-react-native": minor +"@openwallet-foundation/askar-nodejs": minor +"@openwallet-foundation/askar-shared": minor +--- + +chore: drop support for Node 18 diff --git a/.changeset/little-rice-obey.md b/.changeset/little-rice-obey.md new file mode 100644 index 0000000..5fdf009 --- /dev/null +++ b/.changeset/little-rice-obey.md @@ -0,0 +1,5 @@ +--- +"@openwallet-foundation/askar-nodejs": patch +--- + +feat: support Node.JS 24 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index fd1cdfd..110f99a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -23,7 +23,7 @@ jobs: - name: Setup NodeJS uses: actions/setup-node@v5 with: - node-version: 22 + node-version: 24 cache: "pnpm" - name: Install dependencies @@ -43,7 +43,7 @@ jobs: strategy: fail-fast: false matrix: - node-version: [18, 20, 22] + node-version: [20, 22, 24] steps: - name: Checkout Repo diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 7ad195f..0c0bbba 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -21,7 +21,7 @@ jobs: - name: Setup NodeJS uses: actions/setup-node@v5 with: - node-version: 22 + node-version: 24 cache: "pnpm" - name: Install Dependencies @@ -62,7 +62,7 @@ jobs: - name: Setup NodeJS uses: actions/setup-node@v5 with: - node-version: 20 + node-version: 24 cache: "pnpm" - name: Install Dependencies diff --git a/.gitignore b/.gitignore index 17e676c..98a1375 100644 --- a/.gitignore +++ b/.gitignore @@ -17,3 +17,5 @@ packages/askar-react-native/android/.cxx examples/askar-react-native-example/android examples/askar-react-native-example/ios examples/askar-react-native-example/.expo + +indy_wallet_sqlite_upgraded.db \ No newline at end of file diff --git a/README.md b/README.md index 68a8361..c2b5151 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ Wrapper for Node.js and React Native around [https://github.com/openwallet-found ## Requirements -This library requires and has been tested with Node.js version `18.x`, `20.x` and `22.x`, or React Native version `0.75.x` and `0.76.x`. Newer versions might also work, but they have not been tested. +This library requires and has been tested with Node.js version `20.x`, `22.x`, and `24.x` or React Native version `0.75.x` and `0.76.x`. Newer versions might also work, but they have not been tested. ## Setup diff --git a/biome.json b/biome.json index c489061..2947300 100644 --- a/biome.json +++ b/biome.json @@ -1,5 +1,5 @@ { - "$schema": "https://biomejs.dev/schemas/1.9.4/schema.json", + "$schema": "https://biomejs.dev/schemas/2.3.7/schema.json", "formatter": { "lineWidth": 120, "indentStyle": "space" @@ -21,8 +21,10 @@ "allowComments": true } }, - "organizeImports": { - "enabled": true + "assist": { + "actions": { + "source": { "organizeImports": "on" } + } }, "linter": { "enabled": true, diff --git a/lerna.json b/lerna.json deleted file mode 100644 index fb0746e..0000000 --- a/lerna.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "$schema": "node_modules/lerna/schemas/lerna-schema.json", - "version": "0.3.1", - "npmClient": "pnpm", - "command": { - "version": { - "allowBranch": "main" - } - } -} diff --git a/package.json b/package.json index 56fd95d..7fc188d 100644 --- a/package.json +++ b/package.json @@ -7,25 +7,26 @@ "url": "https://github.com/openwallet-foundation/askar-wrapper-javascript" }, "engines": { - "node": ">= 18" + "node": ">= 20" }, "scripts": { - "style:check": "biome check --unsafe .", + "style:check": "biome check --unsafe", "style:fix": "pnpm style:check --write", "types:check": "pnpm -r types:check", "build": "pnpm -r build", "clean": "pnpm -r clean", - "test": "node --import tsx --test packages/**/tests/*.test.ts", + "test": "vitest", "release": "pnpm build && pnpm changeset publish --no-git-tag", "changeset-version": "pnpm changeset version && pnpm style:fix" }, "devDependencies": { - "@biomejs/biome": "catalog:", + "@biomejs/biome": "^2.3.7", "@changesets/cli": "catalog:", "@types/node": "catalog:", "rimraf": "catalog:", - "tsx": "catalog:", - "typescript": "catalog:" + "typescript": "catalog:", + "vite-tsconfig-paths": "^5.1.4", + "vitest": "^4.0.12" }, "packageManager": "pnpm@9.15.3+sha256.c1da43727ccbc1ed42aff4fd6bdb4b1e91e65a818e6efff5b240fbf070ba4eaf" } diff --git a/packages/askar-nodejs/README.md b/packages/askar-nodejs/README.md index d96b415..0cb112d 100644 --- a/packages/askar-nodejs/README.md +++ b/packages/askar-nodejs/README.md @@ -2,11 +2,11 @@ Wrapper for Node.Js around Askar -See the [project README](https://github.com/openwallet-foundation/askar-wrapper-javascript) for version compatability between Askar and this JavaScript Wrapper. +See the [project README](https://github.com/openwallet-foundation/askar-wrapper-javascript) for version compatibility between Askar and this JavaScript Wrapper. ## Requirements -This library requires and has been tested with Node.js version `18.x`, `20.x` and `22.x`. Newer versions might also work, but they have not been tested. +This library requires and has been tested with Node.js version `20.x`, `22.x`, and `24.x`. Newer versions might also work, but they have not been tested. ## Installation diff --git a/packages/askar-nodejs/package.json b/packages/askar-nodejs/package.json index 440bbcd..2ce8190 100644 --- a/packages/askar-nodejs/package.json +++ b/packages/askar-nodejs/package.json @@ -15,7 +15,10 @@ "publishConfig": { "access": "public" }, - "files": ["build", "scripts"], + "files": [ + "build", + "scripts" + ], "scripts": { "types:check": "pnpm compile --noEmit", "build": "pnpm clean && pnpm compile", @@ -24,16 +27,18 @@ "install": "node scripts/install.js" }, "dependencies": { - "@2060.io/ffi-napi": "^4.0.9", - "@2060.io/ref-napi": "^3.0.6", + "@napi-ffi/ffi-napi": "^4.0.3", + "@napi-ffi/ref-napi": "^3.0.5", "@openwallet-foundation/askar-shared": "workspace:*", - "ref-array-di": "^1.2.2", - "ref-struct-di": "^1.1.1" + "@napi-ffi/ref-array-di": "^1.2.2", + "@napi-ffi/ref-struct-di": "^1.1.1" }, "devDependencies": { "@types/node": "catalog:", - "@types/ref-array-di": "^1.2.3", - "@types/ref-struct-di": "^1.1.6", + "@types/napi-ffi__ref-array-di": "npm:@types/ref-array-di@^1.2.3", + "@types/napi-ffi__ref-struct-di": "npm:@types/ref-struct-di@^1.1.6", + "@types/napi-ffi__ffi-napi": "npm:@types/ffi-napi@^4.0.10", + "@types/napi-ffi__ref-napi": "npm:@types/ref-napi@^3.0.12", "typescript": "catalog:" }, "binary": { @@ -42,6 +47,6 @@ "packageName": "library-{platform}-{arch}.tar.gz" }, "engines": { - "node": ">= 18" + "node": ">= 20" } } diff --git a/packages/askar-nodejs/src/NodeJSAskar.ts b/packages/askar-nodejs/src/NodeJSAskar.ts index 3d0cf07..02f3612 100644 --- a/packages/askar-nodejs/src/NodeJSAskar.ts +++ b/packages/askar-nodejs/src/NodeJSAskar.ts @@ -85,16 +85,26 @@ import { AeadParams, AskarError, EntryListHandle, + handleInvalidNullResponse, KeyEntryListHandle, LocalKeyHandle, ScanHandle, SessionHandle, StoreHandle, - handleInvalidNullResponse, } from '@openwallet-foundation/askar-shared' import { + allocateAeadParams, + allocateEncryptedBuffer, + allocateInt8Buffer, + allocateInt32Buffer, + allocatePointer, + allocateSecretBuffer, + allocateStringBuffer, + allocateStringListHandle, type ByteBufferType, + deallocateCallbackBuffer, type EncryptedBufferType, + encryptedBufferStructToClass, FFI_ENTRY_LIST_HANDLE, FFI_INT8, FFI_INT64, @@ -106,16 +116,6 @@ import { FFI_STRING_LIST_HANDLE, type NativeCallback, type NativeCallbackWithResponse, - allocateAeadParams, - allocateEncryptedBuffer, - allocateInt8Buffer, - allocateInt32Buffer, - allocatePointer, - allocateSecretBuffer, - allocateStringBuffer, - allocateStringListHandle, - deallocateCallbackBuffer, - encryptedBufferStructToClass, secretBufferToBuffer, serializeArguments, toNativeCallback, diff --git a/packages/askar-nodejs/src/ffi/alloc.ts b/packages/askar-nodejs/src/ffi/alloc.ts index 2a031a3..d7d54f5 100644 --- a/packages/askar-nodejs/src/ffi/alloc.ts +++ b/packages/askar-nodejs/src/ffi/alloc.ts @@ -1,4 +1,4 @@ -import { alloc } from '@2060.io/ref-napi' +import { alloc } from '@napi-ffi/ref-napi' import { FFI_INT8, FFI_INT32, FFI_POINTER, FFI_STRING } from './primitives' import { AeadParamsStruct, EncryptedBufferStruct, SecretBufferStruct } from './structures' diff --git a/packages/askar-nodejs/src/ffi/callback.ts b/packages/askar-nodejs/src/ffi/callback.ts index 2e391b2..b87e46b 100644 --- a/packages/askar-nodejs/src/ffi/callback.ts +++ b/packages/askar-nodejs/src/ffi/callback.ts @@ -1,5 +1,5 @@ -import { Callback } from '@2060.io/ffi-napi' -import { refType } from '@2060.io/ref-napi' +import { Callback } from '@napi-ffi/ffi-napi' +import { refType } from '@napi-ffi/ref-napi' import { allocateCallbackBuffer } from './alloc' import { FFI_CALLBACK_ID, FFI_ERROR_CODE, FFI_INT32, FFI_STRING, FFI_VOID } from './primitives' diff --git a/packages/askar-nodejs/src/ffi/conversion.ts b/packages/askar-nodejs/src/ffi/conversion.ts index 1626a2c..625da9a 100644 --- a/packages/askar-nodejs/src/ffi/conversion.ts +++ b/packages/askar-nodejs/src/ffi/conversion.ts @@ -1,7 +1,7 @@ -import type { Pointer } from '@2060.io/ref-napi' -import { reinterpret } from '@2060.io/ref-napi' +import type { TypedArray } from '@napi-ffi/ref-array-di' +import type { Pointer } from '@napi-ffi/ref-napi' +import { reinterpret } from '@napi-ffi/ref-napi' import { EncryptedBuffer } from '@openwallet-foundation/askar-shared' -import type { TypedArray } from 'ref-array-di' import type { ByteBufferType, EncryptedBufferType } from './structures' import { ByteBufferStruct } from './structures' diff --git a/packages/askar-nodejs/src/ffi/index.ts b/packages/askar-nodejs/src/ffi/index.ts index e3a8ef9..4673268 100644 --- a/packages/askar-nodejs/src/ffi/index.ts +++ b/packages/askar-nodejs/src/ffi/index.ts @@ -1,6 +1,6 @@ export * from './alloc' export * from './callback' export * from './conversion' -export * from './structures' export * from './primitives' export * from './serialize' +export * from './structures' diff --git a/packages/askar-nodejs/src/ffi/primitives.ts b/packages/askar-nodejs/src/ffi/primitives.ts index 58a0c48..6e3de9e 100644 --- a/packages/askar-nodejs/src/ffi/primitives.ts +++ b/packages/askar-nodejs/src/ffi/primitives.ts @@ -1,4 +1,4 @@ -import { refType } from '@2060.io/ref-napi' +import { refType } from '@napi-ffi/ref-napi' // Primitives diff --git a/packages/askar-nodejs/src/ffi/serialize.ts b/packages/askar-nodejs/src/ffi/serialize.ts index 6b9ef0d..1007241 100644 --- a/packages/askar-nodejs/src/ffi/serialize.ts +++ b/packages/askar-nodejs/src/ffi/serialize.ts @@ -1,4 +1,4 @@ -import { NULL } from '@2060.io/ref-napi' +import { NULL } from '@napi-ffi/ref-napi' import { ArcHandle, Jwk, Key, ScanHandle, SessionHandle, StoreHandle } from '@openwallet-foundation/askar-shared' import { uint8arrayToByteBufferStruct } from './conversion' import type { ByteBufferStruct, SecretBufferStruct } from './structures' @@ -25,7 +25,7 @@ type SerializedArgument = | number | Callback | CallbackWithResponse - | ArrayBuffer + | Uint8Array | typeof ByteBufferStruct | typeof SecretBufferStruct | Buffer diff --git a/packages/askar-nodejs/src/ffi/structures.ts b/packages/askar-nodejs/src/ffi/structures.ts index 9fd2109..f1c2f7e 100644 --- a/packages/askar-nodejs/src/ffi/structures.ts +++ b/packages/askar-nodejs/src/ffi/structures.ts @@ -1,6 +1,6 @@ -import { default as ref, refType } from '@2060.io/ref-napi' -import refArray from 'ref-array-di' -import refStruct from 'ref-struct-di' +import refArray from '@napi-ffi/ref-array-di' +import { default as ref, refType } from '@napi-ffi/ref-napi' +import refStruct from '@napi-ffi/ref-struct-di' import { FFI_INT32, FFI_INT64, FFI_UINT8 } from './primitives' const CStruct = refStruct(ref) diff --git a/packages/askar-nodejs/src/library/NativeBindingInterface.ts b/packages/askar-nodejs/src/library/NativeBindingInterface.ts index 794e3b2..502a54d 100644 --- a/packages/askar-nodejs/src/library/NativeBindingInterface.ts +++ b/packages/askar-nodejs/src/library/NativeBindingInterface.ts @@ -1,6 +1,6 @@ +import type { ByteBufferType, SecretBufferStruct } from '../ffi' import type { nativeBindings } from './bindings' -import type { ByteBufferType, SecretBufferStruct } from '../ffi' // We need a mapping from string type value => type (property 'string' maps to type string) interface StringTypeMapping { pointer: Buffer @@ -25,10 +25,10 @@ type StringTypeArrayToTypes = { : Buffer } -// biome-ignore lint/suspicious/noExplicitAny: +// biome-ignore lint/suspicious/noExplicitAny: no-explanation type TypedMethods> = { [Property in keyof Base]: ( - // biome-ignore lint/suspicious/noExplicitAny: + // biome-ignore lint/suspicious/noExplicitAny: no-explanation ...args: StringTypeArrayToTypes extends any[] ? StringTypeArrayToTypes : [] ) => StringTypeMapping[Base[Property][0]] } diff --git a/packages/askar-nodejs/src/library/bindings.ts b/packages/askar-nodejs/src/library/bindings.ts index 0634ad3..6fe84eb 100644 --- a/packages/askar-nodejs/src/library/bindings.ts +++ b/packages/askar-nodejs/src/library/bindings.ts @@ -1,4 +1,4 @@ -import { refType } from '@2060.io/ref-napi' +import { refType } from '@napi-ffi/ref-napi' import { AeadParamsStructPtr, ByteBufferStruct, diff --git a/packages/askar-nodejs/src/library/index.ts b/packages/askar-nodejs/src/library/index.ts index df4ece6..56e186a 100644 --- a/packages/askar-nodejs/src/library/index.ts +++ b/packages/askar-nodejs/src/library/index.ts @@ -1,3 +1,3 @@ -export * from './NativeBindingInterface' export * from './bindings' +export * from './NativeBindingInterface' export * from './register' diff --git a/packages/askar-nodejs/src/library/register.ts b/packages/askar-nodejs/src/library/register.ts index d2c24a5..330954e 100644 --- a/packages/askar-nodejs/src/library/register.ts +++ b/packages/askar-nodejs/src/library/register.ts @@ -1,9 +1,9 @@ import fs from 'node:fs' import os from 'node:os' import path from 'node:path' -import { Library } from '@2060.io/ffi-napi' -import type { NativeMethods } from './NativeBindingInterface' +import { Library } from '@napi-ffi/ffi-napi' import { nativeBindings } from './bindings' +import type { NativeMethods } from './NativeBindingInterface' // TODO(rename): when lib is changed const LIBNAME = 'aries_askar' @@ -50,17 +50,17 @@ const getLibrary = () => { if (pathFromEnvironment) platformPaths.unshift(pathFromEnvironment) // Create the path + file - const libaries = platformPaths.map((p) => + const libraries = platformPaths.map((p) => path.join(p, `${extensions[platform].prefix ?? ''}${LIBNAME}${extensions[platform].extension}`) ) // Gaurd so we quit if there is no valid path for the library - if (!libaries.some(doesPathExist)) - throw new Error(`Could not find ${LIBNAME} with these paths: ${libaries.join(' ')}`) + if (!libraries.some((libraryPath) => doesPathExist(libraryPath))) + throw new Error(`Could not find ${LIBNAME} with these paths: ${libraries.join(' ')}`) // Get the first valid library // Casting here as a string because there is a guard of none of the paths - const validLibraryPath = libaries.find((l) => doesPathExist(l)) as string + const validLibraryPath = libraries.find((l) => doesPathExist(l)) as string // TODO fix the typing conversion // eslint-disable-next-line @typescript-eslint/ban-ts-comment @@ -68,7 +68,7 @@ const getLibrary = () => { return Library(validLibraryPath, nativeBindings) } -let nativeAskar: NativeMethods | undefined = undefined +let nativeAskar: NativeMethods | undefined export const getNativeAskar = () => { if (!nativeAskar) nativeAskar = getLibrary() as unknown as NativeMethods return nativeAskar diff --git a/packages/askar-nodejs/tests/cryptoBox.test.ts b/packages/askar-nodejs/tests/cryptoBox.test.ts index a22e041..5bc9b9e 100644 --- a/packages/askar-nodejs/tests/cryptoBox.test.ts +++ b/packages/askar-nodejs/tests/cryptoBox.test.ts @@ -1,11 +1,7 @@ -import { deepStrictEqual } from 'node:assert' -import { before, describe, test } from 'node:test' import { CryptoBox, Key, KeyAlgorithm } from '@openwallet-foundation/askar-shared' -import { setup } from './utils/initialize' +import { describe, expect, test } from 'vitest' describe('CryptoBox', () => { - before(setup) - test('seal', () => { const x25519Key = Key.generate(KeyAlgorithm.X25519) @@ -17,7 +13,7 @@ describe('CryptoBox', () => { ciphertext: sealed, }) - deepStrictEqual(opened, message) + expect(opened).toEqual(message) x25519Key.handle.free() }) diff --git a/packages/askar-nodejs/tests/error.test.ts b/packages/askar-nodejs/tests/error.test.ts index 6110a17..5a1031e 100644 --- a/packages/askar-nodejs/tests/error.test.ts +++ b/packages/askar-nodejs/tests/error.test.ts @@ -1,23 +1,19 @@ -import { doesNotReject, doesNotThrow, rejects, throws } from 'node:assert' -import { before, describe, test } from 'node:test' -import { AskarError, KeyAlgorithm, askar } from '@openwallet-foundation/askar-shared' -import { setup, setupWallet } from './utils' +import { AskarError, askar, KeyAlgorithm } from '@openwallet-foundation/askar-shared' +import { describe, expect, test } from 'vitest' +import { setupWallet } from './utils' describe('Error', () => { - before(setup) - test('set error code to 0 after correct call', () => { - doesNotThrow(() => + expect(() => askar.keyGenerate({ algorithm: KeyAlgorithm.AesA128CbcHs256, ephemeral: true, }) - ) + ).not.toThrow() }) test('set error code to non 0 after incorrect call', () => { - throws( - () => askar.keyGenerate({ algorithm: 'incorrect-alg', ephemeral: true }), + expect(() => askar.keyGenerate({ algorithm: 'incorrect-alg' as KeyAlgorithm, ephemeral: true })).toThrow( new AskarError({ code: 8, message: 'Unknown key algorithm' }) ) }) @@ -25,20 +21,20 @@ describe('Error', () => { test('set error code to 0 correct async call', async () => { const store = await setupWallet() - await doesNotReject(() => store.openSession()) + await expect(store.openSession()).resolves.toBeDefined() }) test('set error code to non 0 incorrect async call where the error is outside the callback', async () => { const store = await setupWallet() // @ts-expect-error: testing invalid call - await rejects(() => store.removeProfile(), { code: 5, message: 'Profile name not provided' }) + await expect(store.removeProfile()).rejects.toMatchObject({ code: 5, message: 'Profile name not provided' }) }) test('set error code to non 0 incorrect async call where the error is inside the callback', async () => { const store = await setupWallet() await store.close() - await rejects(() => store.close(), { code: 5, message: 'Invalid store handle' }) + await expect(store.close()).rejects.toMatchObject({ code: 5, message: 'Invalid store handle' }) }) }) diff --git a/packages/askar-nodejs/tests/indy_wallet_sqlite_upgraded.db b/packages/askar-nodejs/tests/indy_wallet_sqlite_upgraded.db deleted file mode 100644 index 070a544..0000000 Binary files a/packages/askar-nodejs/tests/indy_wallet_sqlite_upgraded.db and /dev/null differ diff --git a/packages/askar-nodejs/tests/joseEcdh.test.ts b/packages/askar-nodejs/tests/joseEcdh.test.ts index 342b8fa..dc004ff 100644 --- a/packages/askar-nodejs/tests/joseEcdh.test.ts +++ b/packages/askar-nodejs/tests/joseEcdh.test.ts @@ -1,11 +1,8 @@ -import { deepStrictEqual, strictEqual } from 'node:assert' -import { before, describe, test } from 'node:test' import { Ecdh1PU, EcdhEs, Jwk, Key, KeyAlgorithm } from '@openwallet-foundation/askar-shared' -import { base64url, setup } from './utils' +import { describe, expect, test } from 'vitest' +import { base64url } from './utils' describe('jose ecdh', () => { - before(setup) - test('ecdh es direct', () => { const bobKey = Key.generate(KeyAlgorithm.EcSecp256r1) const bobJwk = bobKey.jwkPublic @@ -55,7 +52,7 @@ describe('jose ecdh', () => { aad: Uint8Array.from(Buffer.from(protectedB64)), }) - strictEqual(Buffer.from(messageReceived).toString(), messageString) + expect(Buffer.from(messageReceived).toString()).toBe(messageString) ephemeralKey.handle.free() bobKey.handle.free() @@ -112,7 +109,7 @@ describe('jose ecdh', () => { const messageReceived = cekReceiver.aeadDecrypt({ ciphertext, tag, nonce, aad: protectedB64Bytes }) - deepStrictEqual(messageReceived, message) + expect(messageReceived).toEqual(message) ephemeralKey.handle.free() bobKey.handle.free() @@ -173,7 +170,7 @@ describe('jose ecdh', () => { aad: protectedB64Bytes, }) - deepStrictEqual(messageReceived, message) + expect(messageReceived).toEqual(message) aliceKey.handle.free() bobKey.handle.free() @@ -220,8 +217,8 @@ describe('jose ecdh', () => { const base64urlApu = base64url(apu) const base64urlApv = base64url(apv) - strictEqual(base64urlApu, 'QWxpY2U') - strictEqual(base64urlApv, 'Qm9iIGFuZCBDaGFybGll') + expect(base64urlApu).toBe('QWxpY2U') + expect(base64urlApv).toBe('Qm9iIGFuZCBDaGFybGll') const protectedJson = { alg: 'ECDH-1PU+A128KW', @@ -251,8 +248,8 @@ describe('jose ecdh', () => { const { ciphertext, tag: ccTag } = enc.parts - strictEqual(Buffer.from(ciphertext).toString('base64url'), 'Az2IWsISEMDJvyc5XRL-3-d-RgNBOGolCsxFFoUXFYw') - strictEqual(Buffer.from(ccTag).toString('base64url'), 'HLb4fTlm8spGmij3RyOs2gJ4DpHM4hhVRwdF_hGb3WQ') + expect(Buffer.from(ciphertext).toString('base64url')).toBe('Az2IWsISEMDJvyc5XRL-3-d-RgNBOGolCsxFFoUXFYw') + expect(Buffer.from(ccTag).toString('base64url')).toBe('HLb4fTlm8spGmij3RyOs2gJ4DpHM4hhVRwdF_hGb3WQ') const derived = new Ecdh1PU({ apv: Uint8Array.from(Buffer.from(apv)), @@ -267,11 +264,10 @@ describe('jose ecdh', () => { receive: false, }) - deepStrictEqual(derived.secretBytes, Uint8Array.from(Buffer.from('df4c37a0668306a11e3d6b0074b5d8df', 'hex'))) + expect(derived.secretBytes).toEqual(Uint8Array.from(Buffer.from('df4c37a0668306a11e3d6b0074b5d8df', 'hex'))) const encryptedKey = derived.wrapKey({ other: cek }).ciphertextWithTag - deepStrictEqual( - encryptedKey, + expect(encryptedKey).toEqual( Uint8Array.from( Buffer.from( 'pOMVA9_PtoRe7xXW1139NzzN1UhiFoio8lGto9cf0t8PyU-sjNXH8-LIRLycq8CHJQbDwvQeU1cSl55cQ0hGezJu2N9IY0QN', @@ -293,7 +289,7 @@ describe('jose ecdh', () => { recipientKey: bob, }) - deepStrictEqual(encryptedKey2.ciphertextWithTag, encryptedKey) + expect(encryptedKey2.ciphertextWithTag).toEqual(encryptedKey) const derivedReceiver = new Ecdh1PU({ apv: Uint8Array.from(Buffer.from(apv)), @@ -317,7 +313,7 @@ describe('jose ecdh', () => { tag: ccTag, }) - deepStrictEqual(messageReceived, message) + expect(messageReceived).toEqual(message) const cekReceiver2 = new Ecdh1PU({ apv: Uint8Array.from(Buffer.from(apv)), @@ -333,7 +329,7 @@ describe('jose ecdh', () => { ccTag, }) - deepStrictEqual(cekReceiver2.jwkSecret, cek.jwkSecret) + expect(cekReceiver2.jwkSecret).toEqual(cek.jwkSecret) cek.handle.free() cekReceiver.handle.free() diff --git a/packages/askar-nodejs/tests/kdf.test.ts b/packages/askar-nodejs/tests/kdf.test.ts index 2e79367..a1616a2 100644 --- a/packages/askar-nodejs/tests/kdf.test.ts +++ b/packages/askar-nodejs/tests/kdf.test.ts @@ -1,11 +1,7 @@ -import { ok } from 'node:assert' -import { before, describe, test } from 'node:test' import { Argon2, Argon2Parameters } from '@openwallet-foundation/askar-shared' -import { setup } from './utils' +import { describe, expect, test } from 'vitest' describe('Argon2', () => { - before(setup) - test('derive password', () => { const password = 'my password' const salt = 'long enough salt' @@ -15,9 +11,8 @@ describe('Argon2', () => { const derivedPassword = Argon2.derivePassword(Argon2Parameters.Interactive, passwordBytes, saltBytes) - ok( - Buffer.from(derivedPassword).toString('hex') === - '9ef87bcf828c46c0136a0d1d9e391d713f75b327c6dc190455bd36c1bae33259' + expect(Buffer.from(derivedPassword).toString('hex')).toBe( + '9ef87bcf828c46c0136a0d1d9e391d713f75b327c6dc190455bd36c1bae33259' ) }) }) diff --git a/packages/askar-nodejs/tests/keys.test.ts b/packages/askar-nodejs/tests/keys.test.ts index 27a420c..61cf021 100644 --- a/packages/askar-nodejs/tests/keys.test.ts +++ b/packages/askar-nodejs/tests/keys.test.ts @@ -1,44 +1,39 @@ -import { deepStrictEqual, ok, strictEqual } from 'node:assert' -import { before, describe, test } from 'node:test' -import { Jwk, Key, KeyAlgorithm, KeyMethod } from '@openwallet-foundation/askar-shared' +import { Jwk, Key, KeyAlgorithm } from '@openwallet-foundation/askar-shared' +import { describe, expect, test } from 'vitest' import { askarNodeJS } from '../src' -import { setup } from './utils' describe('keys', () => { - before(setup) - test('supported backends', () => { const backends = askarNodeJS.keyGetSupportedBackends() - strictEqual(backends.length, 1) - ok(backends.includes('software')) + expect(backends.length).toBe(1) + expect(backends.includes('software')).toBe(true) }) test('aes cbc hmac', () => { const key = Key.generate(KeyAlgorithm.AesA128CbcHs256) - strictEqual(key.algorithm, KeyAlgorithm.AesA128CbcHs256) + expect(key.algorithm).toBe(KeyAlgorithm.AesA128CbcHs256) const messageString = 'test message' const message = Uint8Array.from(Buffer.from(messageString)) const aeadNonce = key.aeadRandomNonce const params = key.aeadParams - strictEqual(params.nonceLength, 16) - strictEqual(params.tagLength, 16) + expect(params.nonceLength).toBe(16) + expect(params.tagLength).toBe(16) const enc = key.aeadEncrypt({ message, nonce: aeadNonce }) const dec = key.aeadDecrypt(enc.parts) - deepStrictEqual(dec, message) + expect(dec).toEqual(message) }) test('Bls G2 Keygen', () => { const seed = Uint8Array.from(Buffer.from('testseed000000000000000000000001')) const key = Key.fromSeed({ algorithm: KeyAlgorithm.Bls12381G2, seed }) - deepStrictEqual( - key.jwkPublic, + expect(key.jwkPublic).toEqual( new Jwk({ crv: 'BLS12381G2', kty: 'EC', @@ -52,8 +47,7 @@ describe('keys', () => { const seed = Uint8Array.from(Buffer.from('testseed000000000000000000000001')) const key = Key.fromSeed({ algorithm: KeyAlgorithm.Bls12381G1, seed }) - deepStrictEqual( - key.jwkPublic, + expect(key.jwkPublic).toEqual( new Jwk({ crv: 'BLS12381G1', kty: 'EC', @@ -66,36 +60,33 @@ describe('keys', () => { test('ed25519', () => { const key = Key.generate(KeyAlgorithm.Ed25519) - strictEqual(key.algorithm, KeyAlgorithm.Ed25519) + expect(key.algorithm).toBe(KeyAlgorithm.Ed25519) const message = Uint8Array.from(Buffer.from('test message')) const messageBuffer = Buffer.from('test message') const signature = key.signMessage({ message }) - strictEqual(key.verifySignature({ message, signature }), true) - strictEqual(key.verifySignature({ message: messageBuffer, signature }), true) - strictEqual(key.verifySignature({ message: Buffer.from('other message'), signature }), false) - strictEqual( + expect(key.verifySignature({ message, signature })).toBe(true) + expect(key.verifySignature({ message: messageBuffer, signature })).toBe(true) + expect(key.verifySignature({ message: Buffer.from('other message'), signature })).toBe(false) + expect( key.verifySignature({ message: Uint8Array.from(Buffer.from('other message')), signature, - }), - false - ) - strictEqual( + }) + ).toBe(false) + expect( key.verifySignature({ message, signature: Uint8Array.from([8, 1, 1, 1]), - }), - false - ) - strictEqual( + }) + ).toBe(false) + expect( key.verifySignature({ message, signature: Buffer.from('random signature'), - }), - false - ) + }) + ).toBe(false) const x25519Key = key.convertkey({ algorithm: KeyAlgorithm.X25519 }) const x25519Key2 = Key.generate(KeyAlgorithm.X25519) @@ -105,29 +96,29 @@ describe('keys', () => { publicKey: x25519Key2, }) - ok(kex instanceof Key) + expect(kex instanceof Key).toBe(true) - strictEqual(key.jwkPublic.kty, 'OKP') - strictEqual(key.jwkPublic.crv, 'Ed25519') + expect(key.jwkPublic.kty).toBe('OKP') + expect(key.jwkPublic.crv).toBe('Ed25519') - strictEqual(key.jwkSecret.kty, 'OKP') - strictEqual(key.jwkSecret.crv, 'Ed25519') + expect(key.jwkSecret.kty).toBe('OKP') + expect(key.jwkSecret.crv).toBe('Ed25519') }) test('p384', () => { const key = Key.generate(KeyAlgorithm.EcSecp384r1) - strictEqual(key.algorithm, KeyAlgorithm.EcSecp384r1) + expect(key.algorithm).toBe(KeyAlgorithm.EcSecp384r1) const message = Uint8Array.from(Buffer.from('test message')) const signature = key.signMessage({ message }) - strictEqual(key.verifySignature({ message, signature }), true) + expect(key.verifySignature({ message, signature })).toBe(true) - strictEqual(key.jwkPublic.kty, 'EC') - strictEqual(key.jwkPublic.crv, 'P-384') + expect(key.jwkPublic.kty).toBe('EC') + expect(key.jwkPublic.crv).toBe('P-384') - strictEqual(key.jwkSecret.kty, 'EC') - strictEqual(key.jwkSecret.crv, 'P-384') + expect(key.jwkSecret.kty).toBe('EC') + expect(key.jwkSecret.crv).toBe('P-384') }) }) diff --git a/packages/askar-nodejs/tests/migration.test.ts b/packages/askar-nodejs/tests/migration.test.ts index 388c365..bf60c8a 100644 --- a/packages/askar-nodejs/tests/migration.test.ts +++ b/packages/askar-nodejs/tests/migration.test.ts @@ -1,22 +1,18 @@ -import { doesNotReject, rejects } from 'node:assert' import fs from 'node:fs' import path from 'node:path' -import { before, beforeEach, describe, test } from 'node:test' -import { AskarError, Migration } from '@openwallet-foundation/askar-shared' -import { setup } from './utils' +import { Migration } from '@openwallet-foundation/askar-shared' +import { beforeEach, describe, expect, test } from 'vitest' const DB_TEMPLATE_PATH = path.join(__dirname, 'indy_wallet_sqlite.db') const DB_UPGRADE_PATH = path.join(__dirname, 'indy_wallet_sqlite_upgraded.db') describe('migration', () => { - before(setup) - beforeEach(() => { const tplPaths = [DB_TEMPLATE_PATH, `${DB_TEMPLATE_PATH}-shm`, `${DB_TEMPLATE_PATH}-wal`] const updPaths = [DB_UPGRADE_PATH, `${DB_UPGRADE_PATH}-shm`, `${DB_UPGRADE_PATH}-wal`] - for (let i = 0; i <= 3; i++) { + for (let i = 0; i < 3; i++) { const tplPath = tplPaths[i] const updPath = updPaths[i] @@ -29,25 +25,23 @@ describe('migration', () => { }) test('migrate', async () => { - await doesNotReject(() => + await expect( Migration.migrate({ specUri: DB_UPGRADE_PATH, kdfLevel: 'RAW', walletName: 'walletwallet.0', walletKey: 'GfwU1DC7gEZNs3w41tjBiZYj7BNToDoFEqKY6wZXqs1A', }) - ) + ).resolves.toBeUndefined() // Double migrate should not work - await rejects( - () => - Migration.migrate({ - specUri: DB_UPGRADE_PATH, - kdfLevel: 'RAW', - walletName: 'walletwallet.0', - walletKey: 'GfwU1DC7gEZNs3w41tjBiZYj7BNToDoFEqKY6wZXqs1A', - }), - { code: 1, message: 'Database is already migrated' } - ) + await expect( + Migration.migrate({ + specUri: DB_UPGRADE_PATH, + kdfLevel: 'RAW', + walletName: 'walletwallet.0', + walletKey: 'GfwU1DC7gEZNs3w41tjBiZYj7BNToDoFEqKY6wZXqs1A', + }) + ).rejects.toMatchObject({ code: 1, message: 'Database is already migrated' }) }) }) diff --git a/packages/askar-nodejs/tests/setup.ts b/packages/askar-nodejs/tests/setup.ts new file mode 100644 index 0000000..02b1cab --- /dev/null +++ b/packages/askar-nodejs/tests/setup.ts @@ -0,0 +1,4 @@ +// this registers askar +import { askar } from '@openwallet-foundation/askar-nodejs' + +askar.setDefaultLogger() diff --git a/packages/askar-nodejs/tests/store.test.ts b/packages/askar-nodejs/tests/store.test.ts index 86b5849..1fba211 100644 --- a/packages/askar-nodejs/tests/store.test.ts +++ b/packages/askar-nodejs/tests/store.test.ts @@ -1,14 +1,11 @@ -import { deepStrictEqual, doesNotReject, ok, rejects, strictEqual } from 'node:assert' import { promises } from 'node:fs' -import { afterEach, before, beforeEach, describe, test } from 'node:test' import { AskarError, KdfMethod, Key, KeyAlgorithm, Store, StoreKeyMethod } from '@openwallet-foundation/askar-shared' -import { firstEntry, getRawKey, secondEntry, setup, setupWallet, testStoreUri } from './utils' +import { afterEach, beforeEach, describe, expect, test } from 'vitest' +import { firstEntry, getRawKey, secondEntry, setupWallet, testStoreUri } from './utils' describe('Store and Session', () => { let store: Store - before(setup) - beforeEach(async () => { store = await setupWallet() }) @@ -27,7 +24,7 @@ describe('Store and Session', () => { const session = await argon2iModStore.openSession() - strictEqual(await session.fetch({ name: 'unknownKey', category: 'unknownCategory' }), null) + expect(await session.fetch({ name: 'unknownKey', category: 'unknownCategory' })).toBe(null) await argon2iModStore.close() }) @@ -42,7 +39,7 @@ describe('Store and Session', () => { const session = await argon2iIntStore.openSession() - strictEqual(await session.fetch({ name: 'unknownKey', category: 'unknownCategory' }), null) + expect(await session.fetch({ name: 'unknownKey', category: 'unknownCategory' })).toBe(null) await argon2iIntStore.close() }) @@ -70,14 +67,14 @@ describe('Store and Session', () => { await newStore.close() - await rejects( - () => - Store.open({ - profile: 'rekey', - uri: `sqlite://${storagePath}/rekey.db`, - keyMethod: new StoreKeyMethod(KdfMethod.Raw), - passKey: initialKey, - }), + await expect( + Store.open({ + profile: 'rekey', + uri: `sqlite://${storagePath}/rekey.db`, + keyMethod: new StoreKeyMethod(KdfMethod.Raw), + passKey: initialKey, + }) + ).rejects.toThrow( new AskarError({ code: 4, message: 'Error decrypting profile key\nCaused by: AEAD decryption error' }) ) @@ -98,7 +95,7 @@ describe('Store and Session', () => { await session.insert(firstEntry) - strictEqual(await session.count(firstEntry), 1) + expect(await session.count(firstEntry)).toBeDefined() await session.close() }) @@ -108,13 +105,13 @@ describe('Store and Session', () => { await session.insert(firstEntry) - strictEqual(await session.count(firstEntry), 1) + expect(await session.count(firstEntry)).toBe(1) const updatedEntry = { ...firstEntry, value: 'bar', tags: { update: 'baz' } } await session.replace(updatedEntry) - strictEqual(await session.count(updatedEntry), 1) + expect(await session.count(updatedEntry)).toBe(1) await session.close() }) @@ -124,11 +121,11 @@ describe('Store and Session', () => { await session.insert(firstEntry) - strictEqual(await session.count(firstEntry), 1) + expect(await session.count(firstEntry)).toBe(1) await session.remove(firstEntry) - strictEqual(await session.count(firstEntry), 0) + expect(await session.count(firstEntry)).toBe(0) await session.close() }) @@ -139,11 +136,11 @@ describe('Store and Session', () => { await session.insert(firstEntry) await session.insert(secondEntry) - strictEqual(await session.count(firstEntry), 2) + expect(await session.count(firstEntry)).toBe(2) await session.removeAll({ category: firstEntry.category }) - strictEqual(await session.count(firstEntry), 0) + expect(await session.count(firstEntry)).toBe(0) await session.close() }) @@ -154,13 +151,13 @@ describe('Store and Session', () => { await session.insert(firstEntry) await session.insert(secondEntry) - strictEqual(await session.count(firstEntry), 2) - strictEqual(await session.count({}), 2) + expect(await session.count(firstEntry)).toBe(2) + expect(await session.count({})).toBe(2) - strictEqual((await session.fetchAll({})).length, 2) + expect((await session.fetchAll({})).length).toBe(2) await session.removeAll({ category: firstEntry.category }) - strictEqual(await session.count(firstEntry), 0) + expect(await session.count(firstEntry)).toBe(0) await session.close() }) @@ -175,9 +172,9 @@ describe('Store and Session', () => { a.name === 'testEntry' ? -1 : 1 ) - strictEqual(found.length, 2) - deepStrictEqual(found[0], firstEntry) - deepStrictEqual(found[1], { ...secondEntry, value: JSON.stringify(secondEntry.value) }) + expect(found.length).toBe(2) + expect(found[0]).toEqual(firstEntry) + expect(found[1]).toEqual({ ...secondEntry, value: JSON.stringify(secondEntry.value) }) await session.close() await scanStore.close() @@ -188,19 +185,19 @@ describe('Store and Session', () => { await txn.insert(firstEntry) - strictEqual(await txn.count(firstEntry), 1) + expect(await txn.count(firstEntry)).toBe(1) - deepStrictEqual(await txn.fetch(firstEntry), firstEntry) + expect(await txn.fetch(firstEntry)).toEqual(firstEntry) const found = await txn.fetchAll(firstEntry) - deepStrictEqual(found[0], firstEntry) + expect(found[0]).toEqual(firstEntry) await txn.commit() const session = await store.openSession() - deepStrictEqual(await session.fetch(firstEntry), firstEntry) + expect(await session.fetch(firstEntry)).toEqual(firstEntry) await session.close() }) @@ -216,18 +213,18 @@ describe('Store and Session', () => { const fetchedKey1 = await session.fetchKey({ name: keyName }) - strictEqual(fetchedKey1?.name, keyName) - deepStrictEqual(fetchedKey1?.tags, { a: 'b' }) - deepStrictEqual(fetchedKey1?.metadata, 'metadata') + expect(fetchedKey1?.name).toBe(keyName) + expect(fetchedKey1?.tags).toEqual({ a: 'b' }) + expect(fetchedKey1?.metadata).toBe('metadata') await session.updateKey({ name: keyName, metadata: 'updated metadata', tags: { a: 'c' } }) const fetchedKey2 = await session.fetchKey({ name: keyName }) - strictEqual(fetchedKey2?.name, keyName) - deepStrictEqual(fetchedKey2?.tags, { a: 'c' }) - deepStrictEqual(fetchedKey2?.metadata, 'updated metadata') + expect(fetchedKey2?.name).toBe(keyName) + expect(fetchedKey2?.tags).toEqual({ a: 'c' }) + expect(fetchedKey2?.metadata).toBe('updated metadata') - ok(key.jwkThumbprint === fetchedKey1?.key.jwkThumbprint) + expect(key.jwkThumbprint === fetchedKey1?.key.jwkThumbprint).toBe(true) const found = await session.fetchAllKeys({ algorithm: KeyAlgorithm.Ed25519, @@ -235,13 +232,13 @@ describe('Store and Session', () => { tagFilter: { a: 'c' }, }) - strictEqual(found[0].name, keyName) - deepStrictEqual(found[0].tags, { a: 'c' }) - deepStrictEqual(found[0].metadata, 'updated metadata') + expect(found[0].name).toBe(keyName) + expect(found[0].tags).toEqual({ a: 'c' }) + expect(found[0].metadata).toBe('updated metadata') await session.removeKey({ name: keyName }) - strictEqual(await session.fetchKey({ name: keyName }), null) + expect(await session.fetchKey({ name: keyName })).toBe(null) await session.close() @@ -263,11 +260,11 @@ describe('Store and Session', () => { const session2 = await store.session(profile).open() - strictEqual(await session2.count(firstEntry), 0) + expect(await session2.count(firstEntry)).toBe(0) await session2.insert(firstEntry) - strictEqual(await session2.count(firstEntry), 1) + expect(await session2.count(firstEntry)).toBe(1) await session2.close() @@ -276,53 +273,53 @@ describe('Store and Session', () => { const store2 = await Store.open({ uri: testStoreUri, keyMethod: new StoreKeyMethod(KdfMethod.Raw), passKey: key }) const session3 = await store2.openSession() - strictEqual(await session3.count(firstEntry), 0) + expect(await session3.count(firstEntry)).toBe(0) await session3.close() await store2.close() } - await rejects(() => store.createProfile(profile), AskarError) + await expect(store.createProfile(profile)).rejects.toThrow(AskarError) const session4 = await store.session(profile).open() - strictEqual(await session4.count(firstEntry), 1) + expect(await session4.count(firstEntry)).toBe(1) await session4.close() await store.setDefaultProfile(profile) - deepStrictEqual(await store.getDefaultProfile(), profile) + expect(await store.getDefaultProfile()).toBe(profile) - ok((await store.listProfiles()).includes(profile)) + expect((await store.listProfiles()).includes(profile)).toBe(true) await store.removeProfile(profile) - await rejects(() => store.session(profile).open(), AskarError) + await expect(store.session(profile).open()).rejects.toThrow(AskarError) - await rejects(() => store.session('unknown profile').open(), AskarError) + await expect(store.session('unknown profile').open()).rejects.toThrow(AskarError) - deepStrictEqual(await store.createProfile(profile), profile) + expect(await store.createProfile(profile)).toBe(profile) const session7 = await store.session(profile).open() - strictEqual(await session7.count(firstEntry), 0) + expect(await session7.count(firstEntry)).toBe(0) await session7.insert(firstEntry) - strictEqual(await session7.count(firstEntry), 1) + expect(await session7.count(firstEntry)).toBe(1) await session7.close() - ok(await store.renameProfile({ fromProfile: profile, toProfile: 'newProfileName' })) + expect(await store.renameProfile({ fromProfile: profile, toProfile: 'newProfileName' })).toBe(1) - ok((await store.listProfiles()).includes('newProfileName')) + expect((await store.listProfiles()).includes('newProfileName')).toBe(true) - ok(!(await store.listProfiles()).includes(profile)) + expect((await store.listProfiles()).includes(profile)).toBe(false) const session8 = await store.session('newProfileName').open() - strictEqual(await session8.count(firstEntry), 1) + expect(await session8.count(firstEntry)).toBe(1) await session8.close() @@ -333,17 +330,17 @@ describe('Store and Session', () => { recreate: true, }) - ok( + expect( await store.copyProfile({ toStore: destinationStore, fromProfile: 'newProfileName', toProfile: 'newerProfileName', }) - ) + ).toBeDefined() const session9 = await destinationStore.session('newerProfileName').open() - strictEqual(await session9.count(firstEntry), 1) + expect(await session9.count(firstEntry)).toBe(1) await session9.close() }) @@ -351,13 +348,13 @@ describe('Store and Session', () => { test('Copy', async () => { const key = getRawKey() - await doesNotReject(() => + await expect( store.copyTo({ uri: 'sqlite://:memory:', keyMethod: new StoreKeyMethod(KdfMethod.Raw), passKey: key, recreate: true, }) - ) + ).resolves.toBeUndefined() }) }) diff --git a/packages/askar-nodejs/tests/utils/index.ts b/packages/askar-nodejs/tests/utils/index.ts index 6630a3d..83cc305 100644 --- a/packages/askar-nodejs/tests/utils/index.ts +++ b/packages/askar-nodejs/tests/utils/index.ts @@ -1,2 +1,2 @@ -export * from './initialize' export * from './fixtures' +export * from './initialize' diff --git a/packages/askar-nodejs/tests/utils/initialize.ts b/packages/askar-nodejs/tests/utils/initialize.ts index f89ddfd..353c03f 100644 --- a/packages/askar-nodejs/tests/utils/initialize.ts +++ b/packages/askar-nodejs/tests/utils/initialize.ts @@ -1,5 +1,4 @@ -import { KdfMethod, LogLevel, Store, StoreKeyMethod, askar, registerAskar } from '@openwallet-foundation/askar-shared' -import { NodeJSAskar } from '../../src/NodeJSAskar' +import { KdfMethod, Store, StoreKeyMethod } from '@openwallet-foundation/askar-shared' export const getRawKey = () => Store.generateRawKey(Buffer.from('00000000000000000000000000000My1')) export const testStoreUri = process.env.URI || 'sqlite://:memory:' @@ -15,9 +14,4 @@ export const setupWallet = async () => { }) } -export const setup = () => { - registerAskar({ askar: new NodeJSAskar() }) - askar.setDefaultLogger() -} - export const base64url = (str: string) => Buffer.from(str).toString('base64url') diff --git a/packages/askar-react-native/src/ReactNativeAskar.ts b/packages/askar-react-native/src/ReactNativeAskar.ts index 4ae8b5e..037b7bb 100644 --- a/packages/askar-react-native/src/ReactNativeAskar.ts +++ b/packages/askar-react-native/src/ReactNativeAskar.ts @@ -82,12 +82,12 @@ import { AskarError, EncryptedBuffer, EntryListHandle, + handleInvalidNullResponse, KeyEntryListHandle, LocalKeyHandle, ScanHandle, SessionHandle, StoreHandle, - handleInvalidNullResponse, } from '@openwallet-foundation/askar-shared' import type { NativeBindings } from './NativeBindings' import type { Callback, CallbackWithResponse, ReturnObject } from './serialize' diff --git a/packages/askar-react-native/src/index.ts b/packages/askar-react-native/src/index.ts index eba4e2c..14c42c7 100644 --- a/packages/askar-react-native/src/index.ts +++ b/packages/askar-react-native/src/index.ts @@ -1,7 +1,6 @@ -import type { NativeBindings } from './NativeBindings' - import { registerAskar } from '@openwallet-foundation/askar-shared' import { NativeModules } from 'react-native' +import type { NativeBindings } from './NativeBindings' import { ReactNativeAskar } from './ReactNativeAskar' @@ -12,7 +11,6 @@ const module = NativeModules.Askar as { install: () => boolean } if (!module.install()) throw Error('Unable to install the turboModule: askar') // This can already check whether `_askar` exists on global -// biome-ignore lint/correctness/noInvalidUseBeforeDeclaration: if (!_askar) { throw Error('_askar has not been exposed on global. Something went wrong while installing the turboModule') } diff --git a/packages/askar-react-native/src/serialize.ts b/packages/askar-react-native/src/serialize.ts index 97b03fc..f7dfae8 100644 --- a/packages/askar-react-native/src/serialize.ts +++ b/packages/askar-react-native/src/serialize.ts @@ -22,7 +22,7 @@ type Argument = | Key | Jwk -type SerializedArgument = string | number | Callback | CallbackWithResponse | ArrayBuffer +type SerializedArgument = string | number | Callback | CallbackWithResponse | ArrayBuffer | ArrayBufferLike | Uint8Array type SerializedArguments = Record diff --git a/packages/askar-shared/installBinary.js b/packages/askar-shared/installBinary.js index 47bf8db..4dabf91 100644 --- a/packages/askar-shared/installBinary.js +++ b/packages/askar-shared/installBinary.js @@ -20,7 +20,7 @@ function needsDownload({ version, targetDirectory }) { console.log('Binary is up to date, skipping download') return false } - } catch (error) { + } catch { // If metadata is corrupted, download anyway console.log('Metadata file is invalid, will download binary') } diff --git a/packages/askar-shared/package.json b/packages/askar-shared/package.json index 1ebd0a9..48abfb5 100644 --- a/packages/askar-shared/package.json +++ b/packages/askar-shared/package.json @@ -16,7 +16,10 @@ "publishConfig": { "access": "public" }, - "files": ["build", "installBinary.js"], + "files": [ + "build", + "installBinary.js" + ], "scripts": { "types:check": "pnpm compile --noEmit", "build": "pnpm clean && pnpm compile", @@ -25,7 +28,7 @@ }, "dependencies": { "buffer": "^6.0.3", - "tar": "^7.4.3" + "tar": "^7.5.2" }, "devDependencies": { "typescript": "catalog:" diff --git a/packages/askar-shared/src/askar/index.ts b/packages/askar-shared/src/askar/index.ts index 02f085f..b0bb7e6 100644 --- a/packages/askar-shared/src/askar/index.ts +++ b/packages/askar-shared/src/askar/index.ts @@ -1,2 +1,2 @@ -export * from './register' export * from './Askar' +export * from './register' diff --git a/packages/askar-shared/src/crypto/CryptoBox.ts b/packages/askar-shared/src/crypto/CryptoBox.ts index 0b8cb21..7a2c595 100644 --- a/packages/askar-shared/src/crypto/CryptoBox.ts +++ b/packages/askar-shared/src/crypto/CryptoBox.ts @@ -1,6 +1,5 @@ -import type { Key } from './Key' - import { askar } from '../askar' +import type { Key } from './Key' export class CryptoBox { public static randomNonce() { diff --git a/packages/askar-shared/src/crypto/EcdhEs.ts b/packages/askar-shared/src/crypto/EcdhEs.ts index d64d342..44b3a80 100644 --- a/packages/askar-shared/src/crypto/EcdhEs.ts +++ b/packages/askar-shared/src/crypto/EcdhEs.ts @@ -1,6 +1,5 @@ -import type { KeyAlgorithm } from '../enums' - import { askar } from '../askar' +import type { KeyAlgorithm } from '../enums' import { Jwk } from './Jwk' import { Key } from './Key' diff --git a/packages/askar-shared/src/crypto/Key.ts b/packages/askar-shared/src/crypto/Key.ts index 41997b9..9c25c02 100644 --- a/packages/askar-shared/src/crypto/Key.ts +++ b/packages/askar-shared/src/crypto/Key.ts @@ -1,11 +1,8 @@ -import type { KeyAlgorithm, SignatureAlgorithm } from '../enums' -import type { KeyBackend } from '../enums' -import type { LocalKeyHandle } from './handles' - import { Buffer } from 'buffer' - import { askar } from '../askar' +import type { KeyAlgorithm, KeyBackend, SignatureAlgorithm } from '../enums' import { KeyMethod, keyAlgorithmFromString } from '../enums' +import type { LocalKeyHandle } from './handles' import { Jwk } from './Jwk' diff --git a/packages/askar-shared/src/crypto/index.ts b/packages/askar-shared/src/crypto/index.ts index ea251fa..0c01544 100644 --- a/packages/askar-shared/src/crypto/index.ts +++ b/packages/askar-shared/src/crypto/index.ts @@ -1,9 +1,9 @@ -export * from './handles' -export * from './Key' +export * from './AeadParams' export * from './Argon2' -export * from './EcdhEs' -export * from './Ecdh1PU' export * from './CryptoBox' -export * from './Jwk' +export * from './Ecdh1PU' +export * from './EcdhEs' export * from './EncryptedBuffer' -export * from './AeadParams' +export * from './handles' +export * from './Jwk' +export * from './Key' diff --git a/packages/askar-shared/src/enums/index.ts b/packages/askar-shared/src/enums/index.ts index 1689d3b..9e9128b 100644 --- a/packages/askar-shared/src/enums/index.ts +++ b/packages/askar-shared/src/enums/index.ts @@ -1,5 +1,5 @@ -export * from './KeyBackend' export * from './KeyAlgorithm' +export * from './KeyBackend' export * from './KeyMethod' -export * from './SignatureAlgorithm' export * from './LogLevel' +export * from './SignatureAlgorithm' diff --git a/packages/askar-shared/src/index.ts b/packages/askar-shared/src/index.ts index e001a0a..6518087 100644 --- a/packages/askar-shared/src/index.ts +++ b/packages/askar-shared/src/index.ts @@ -1,6 +1,6 @@ -export * from './error' export * from './askar' export * from './crypto' export * from './enums' -export * from './store' +export * from './error' export * from './migration' +export * from './store' diff --git a/packages/askar-shared/src/store/Entry.ts b/packages/askar-shared/src/store/Entry.ts index d967705..d85706e 100644 --- a/packages/askar-shared/src/store/Entry.ts +++ b/packages/askar-shared/src/store/Entry.ts @@ -1,6 +1,5 @@ -import type { EntryListHandle } from '../crypto' - import { Buffer } from 'buffer' +import type { EntryListHandle } from '../crypto' export type EntryObject = { name: string diff --git a/packages/askar-shared/src/store/EntryList.ts b/packages/askar-shared/src/store/EntryList.ts index 44e9f1e..7456a16 100644 --- a/packages/askar-shared/src/store/EntryList.ts +++ b/packages/askar-shared/src/store/EntryList.ts @@ -1,7 +1,6 @@ -import type { EntryObject } from '.' -import type { EntryListHandle } from '../crypto' - import { askar } from '../askar' +import type { EntryListHandle } from '../crypto' +import type { EntryObject } from '.' import { Entry } from './Entry' diff --git a/packages/askar-shared/src/store/KeyEntryList.ts b/packages/askar-shared/src/store/KeyEntryList.ts index b14af8c..6358909 100644 --- a/packages/askar-shared/src/store/KeyEntryList.ts +++ b/packages/askar-shared/src/store/KeyEntryList.ts @@ -1,7 +1,6 @@ -import type { KeyEntryObject } from '.' -import type { KeyEntryListHandle } from '../crypto' - import { askar } from '../askar' +import type { KeyEntryListHandle } from '../crypto' +import type { KeyEntryObject } from '.' import { KeyEntry } from './KeyEntry' diff --git a/packages/askar-shared/src/store/OpenSession.ts b/packages/askar-shared/src/store/OpenSession.ts index bda6fc4..6eb1b1c 100644 --- a/packages/askar-shared/src/store/OpenSession.ts +++ b/packages/askar-shared/src/store/OpenSession.ts @@ -1,6 +1,5 @@ -import type { StoreHandle } from '../crypto' - import { askar } from '../askar' +import type { StoreHandle } from '../crypto' import { AskarError } from '../error' import { Session } from './Session' diff --git a/packages/askar-shared/src/store/Scan.ts b/packages/askar-shared/src/store/Scan.ts index 5d75ea6..912c391 100644 --- a/packages/askar-shared/src/store/Scan.ts +++ b/packages/askar-shared/src/store/Scan.ts @@ -1,11 +1,9 @@ -import type { EntryListHandle, ScanHandle } from '../crypto' -import type { Entry, EntryObject } from './Entry' -import type { Store } from './Store' - import { askar } from '../askar' +import type { EntryListHandle, ScanHandle } from '../crypto' import { AskarError } from '../error' - +import type { Entry, EntryObject } from './Entry' import { EntryList } from './EntryList' +import type { Store } from './Store' export class Scan { private _handle?: ScanHandle diff --git a/packages/askar-shared/src/store/Session.ts b/packages/askar-shared/src/store/Session.ts index fe85b9a..d5a06d6 100644 --- a/packages/askar-shared/src/store/Session.ts +++ b/packages/askar-shared/src/store/Session.ts @@ -1,9 +1,7 @@ -import type { Key, SessionHandle } from '../crypto' -import type { KeyAlgorithm } from '../enums' - import { Buffer } from 'buffer' - import { askar } from '../askar' +import type { Key, SessionHandle } from '../crypto' +import type { KeyAlgorithm } from '../enums' import { EntryOperation } from '../enums/EntryOperation' import { AskarError } from '../error' diff --git a/packages/askar-shared/src/store/Store.ts b/packages/askar-shared/src/store/Store.ts index 161c1bf..0c42637 100644 --- a/packages/askar-shared/src/store/Store.ts +++ b/packages/askar-shared/src/store/Store.ts @@ -1,10 +1,8 @@ -import type { StoreHandle } from '../crypto' -import type { StoreKeyMethod } from './StoreKeyMethod' - import { askar } from '../askar' - +import type { StoreHandle } from '../crypto' import { OpenSession } from './OpenSession' import { Scan } from './Scan' +import type { StoreKeyMethod } from './StoreKeyMethod' export class Store { private _handle: StoreHandle @@ -52,7 +50,11 @@ export class Store { toStore, fromProfile, toProfile, - }: { toStore: Store; fromProfile: string; toProfile: string }) { + }: { + toStore: Store + fromProfile: string + toProfile: string + }) { return await askar.storeCopyProfile({ fromProfile, toProfile, fromHandle: this.handle, toHandle: toStore.handle }) } diff --git a/packages/askar-shared/src/store/index.ts b/packages/askar-shared/src/store/index.ts index 7a69f4d..c181ed8 100644 --- a/packages/askar-shared/src/store/index.ts +++ b/packages/askar-shared/src/store/index.ts @@ -2,8 +2,8 @@ export * from './Entry' export * from './EntryList' export * from './KeyEntry' export * from './KeyEntryList' -export * from './Scan' -export * from './Store' export * from './OpenSession' +export * from './Scan' export * from './Session' +export * from './Store' export * from './StoreKeyMethod' diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b0f812f..4793b1c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -6,47 +6,44 @@ settings: catalogs: default: - '@biomejs/biome': - specifier: 1.9.4 - version: 1.9.4 '@changesets/cli': - specifier: ^2.27.12 - version: 2.27.12 + specifier: ^2.29.7 + version: 2.29.7 '@types/node': - specifier: ^20.12.11 - version: 20.17.16 + specifier: ^24.10.1 + version: 24.10.1 rimraf: specifier: ^5.0.5 version: 5.0.10 - tsx: - specifier: ^4.19.2 - version: 4.19.2 typescript: - specifier: ~5.4.5 - version: 5.4.5 + specifier: ~5.9.3 + version: 5.9.3 importers: .: devDependencies: '@biomejs/biome': - specifier: 'catalog:' - version: 1.9.4 + specifier: ^2.3.7 + version: 2.3.7 '@changesets/cli': specifier: 'catalog:' - version: 2.27.12 + version: 2.29.7(@types/node@24.10.1) '@types/node': specifier: 'catalog:' - version: 20.17.16 + version: 24.10.1 rimraf: specifier: 'catalog:' version: 5.0.10 - tsx: - specifier: 'catalog:' - version: 4.19.2 typescript: specifier: 'catalog:' - version: 5.4.5 + version: 5.9.3 + vite-tsconfig-paths: + specifier: ^5.1.4 + version: 5.1.4(typescript@5.9.3)(vite@7.2.4(@types/node@24.10.1)(lightningcss@1.27.0)(terser@5.37.0)(tsx@4.19.2)) + vitest: + specifier: ^4.0.12 + version: 4.0.12(@types/node@24.10.1)(lightningcss@1.27.0)(terser@5.37.0)(tsx@4.19.2) examples/askar-react-native-example: dependencies: @@ -77,38 +74,44 @@ importers: version: 18.3.18 typescript: specifier: 'catalog:' - version: 5.4.5 + version: 5.9.3 packages/askar-nodejs: dependencies: - '@2060.io/ffi-napi': - specifier: ^4.0.9 - version: 4.0.9 - '@2060.io/ref-napi': - specifier: ^3.0.6 - version: 3.0.6 - '@openwallet-foundation/askar-shared': - specifier: workspace:* - version: link:../askar-shared - ref-array-di: + '@napi-ffi/ffi-napi': + specifier: ^4.0.3 + version: 4.0.3 + '@napi-ffi/ref-array-di': specifier: ^1.2.2 version: 1.2.2 - ref-struct-di: + '@napi-ffi/ref-napi': + specifier: ^3.0.5 + version: 3.0.5 + '@napi-ffi/ref-struct-di': specifier: ^1.1.1 version: 1.1.1 + '@openwallet-foundation/askar-shared': + specifier: workspace:* + version: link:../askar-shared devDependencies: + '@types/napi-ffi__ffi-napi': + specifier: npm:@types/ffi-napi@^4.0.10 + version: '@types/ffi-napi@4.0.10' + '@types/napi-ffi__ref-array-di': + specifier: npm:@types/ref-array-di@^1.2.3 + version: '@types/ref-array-di@1.2.8' + '@types/napi-ffi__ref-napi': + specifier: npm:@types/ref-napi@^3.0.12 + version: '@types/ref-napi@3.0.12' + '@types/napi-ffi__ref-struct-di': + specifier: npm:@types/ref-struct-di@^1.1.6 + version: '@types/ref-struct-di@1.1.12' '@types/node': specifier: 'catalog:' - version: 20.17.16 - '@types/ref-array-di': - specifier: ^1.2.3 - version: 1.2.8 - '@types/ref-struct-di': - specifier: ^1.1.6 - version: 1.1.12 + version: 24.10.1 typescript: specifier: 'catalog:' - version: 5.4.5 + version: 5.9.3 packages/askar-react-native: dependencies: @@ -124,7 +127,7 @@ importers: version: 0.76.6(@babel/core@7.26.7)(@babel/preset-env@7.26.7(@babel/core@7.26.7))(@types/react@18.3.18)(encoding@0.1.13)(react@18.2.0) typescript: specifier: 'catalog:' - version: 5.4.5 + version: 5.9.3 packages/askar-shared: dependencies: @@ -132,12 +135,12 @@ importers: specifier: ^6.0.3 version: 6.0.3 tar: - specifier: ^7.4.3 - version: 7.4.3 + specifier: ^7.5.2 + version: 7.5.2 devDependencies: typescript: specifier: 'catalog:' - version: 5.4.5 + version: 5.9.3 packages: @@ -149,14 +152,6 @@ packages: graphql: optional: true - '@2060.io/ffi-napi@4.0.9': - resolution: {integrity: sha512-JfVREbtkJhMXSUpya3JCzDumdjeZDCKv4PemiWK+pts5CYgdoMidxeySVlFeF5pHqbBpox4I0Be7sDwAq4N0VQ==} - engines: {node: '>=18'} - - '@2060.io/ref-napi@3.0.6': - resolution: {integrity: sha512-8VAIXLdKL85E85jRYpPcZqATBL6fGnC/XjBGNeSgRSMJtrAMSmfRksqIq5AmuZkA2eeJXMWCiN6UQOUdozcymg==} - engines: {node: '>= 18.0'} - '@ampproject/remapping@2.3.0': resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} @@ -872,113 +867,113 @@ packages: resolution: {integrity: sha512-t8kDRGrKXyp6+tjUh7hw2RLyclsW4TRoRvRHtSyAX9Bb5ldlFh+90YAYY6awRXrlB4G5G2izNeGySpATlFzmOg==} engines: {node: '>=6.9.0'} - '@biomejs/biome@1.9.4': - resolution: {integrity: sha512-1rkd7G70+o9KkTn5KLmDYXihGoTaIGO9PIIN2ZB7UJxFrWw04CZHPYiMRjYsaDvVV7hP1dYNRLxSANLaBFGpog==} + '@biomejs/biome@2.3.7': + resolution: {integrity: sha512-CTbAS/jNAiUc6rcq94BrTB8z83O9+BsgWj2sBCQg9rD6Wkh2gjfR87usjx0Ncx0zGXP1NKgT7JNglay5Zfs9jw==} engines: {node: '>=14.21.3'} hasBin: true - '@biomejs/cli-darwin-arm64@1.9.4': - resolution: {integrity: sha512-bFBsPWrNvkdKrNCYeAp+xo2HecOGPAy9WyNyB/jKnnedgzl4W4Hb9ZMzYNbf8dMCGmUdSavlYHiR01QaYR58cw==} + '@biomejs/cli-darwin-arm64@2.3.7': + resolution: {integrity: sha512-LirkamEwzIUULhXcf2D5b+NatXKeqhOwilM+5eRkbrnr6daKz9rsBL0kNZ16Hcy4b8RFq22SG4tcLwM+yx/wFA==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [darwin] - '@biomejs/cli-darwin-x64@1.9.4': - resolution: {integrity: sha512-ngYBh/+bEedqkSevPVhLP4QfVPCpb+4BBe2p7Xs32dBgs7rh9nY2AIYUL6BgLw1JVXV8GlpKmb/hNiuIxfPfZg==} + '@biomejs/cli-darwin-x64@2.3.7': + resolution: {integrity: sha512-Q4TO633kvrMQkKIV7wmf8HXwF0dhdTD9S458LGE24TYgBjSRbuhvio4D5eOQzirEYg6eqxfs53ga/rbdd8nBKg==} engines: {node: '>=14.21.3'} cpu: [x64] os: [darwin] - '@biomejs/cli-linux-arm64-musl@1.9.4': - resolution: {integrity: sha512-v665Ct9WCRjGa8+kTr0CzApU0+XXtRgwmzIf1SeKSGAv+2scAlW6JR5PMFo6FzqqZ64Po79cKODKf3/AAmECqA==} + '@biomejs/cli-linux-arm64-musl@2.3.7': + resolution: {integrity: sha512-/afy8lto4CB8scWfMdt+NoCZtatBUF62Tk3ilWH2w8ENd5spLhM77zKlFZEvsKJv9AFNHknMl03zO67CiklL2Q==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] - '@biomejs/cli-linux-arm64@1.9.4': - resolution: {integrity: sha512-fJIW0+LYujdjUgJJuwesP4EjIBl/N/TcOX3IvIHJQNsAqvV2CHIogsmA94BPG6jZATS4Hi+xv4SkBBQSt1N4/g==} + '@biomejs/cli-linux-arm64@2.3.7': + resolution: {integrity: sha512-inHOTdlstUBzgjDcx0ge71U4SVTbwAljmkfi3MC5WzsYCRhancqfeL+sa4Ke6v2ND53WIwCFD5hGsYExoI3EZQ==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] - '@biomejs/cli-linux-x64-musl@1.9.4': - resolution: {integrity: sha512-gEhi/jSBhZ2m6wjV530Yy8+fNqG8PAinM3oV7CyO+6c3CEh16Eizm21uHVsyVBEB6RIM8JHIl6AGYCv6Q6Q9Tg==} + '@biomejs/cli-linux-x64-musl@2.3.7': + resolution: {integrity: sha512-CQUtgH1tIN6e5wiYSJqzSwJumHYolNtaj1dwZGCnZXm2PZU1jOJof9TsyiP3bXNDb+VOR7oo7ZvY01If0W3iFQ==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] - '@biomejs/cli-linux-x64@1.9.4': - resolution: {integrity: sha512-lRCJv/Vi3Vlwmbd6K+oQ0KhLHMAysN8lXoCI7XeHlxaajk06u7G+UsFSO01NAs5iYuWKmVZjmiOzJ0OJmGsMwg==} + '@biomejs/cli-linux-x64@2.3.7': + resolution: {integrity: sha512-fJMc3ZEuo/NaMYo5rvoWjdSS5/uVSW+HPRQujucpZqm2ZCq71b8MKJ9U4th9yrv2L5+5NjPF0nqqILCl8HY/fg==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] - '@biomejs/cli-win32-arm64@1.9.4': - resolution: {integrity: sha512-tlbhLk+WXZmgwoIKwHIHEBZUwxml7bRJgk0X2sPyNR3S93cdRq6XulAZRQJ17FYGGzWne0fgrXBKpl7l4M87Hg==} + '@biomejs/cli-win32-arm64@2.3.7': + resolution: {integrity: sha512-aJAE8eCNyRpcfx2JJAtsPtISnELJ0H4xVVSwnxm13bzI8RwbXMyVtxy2r5DV1xT3WiSP+7LxORcApWw0LM8HiA==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [win32] - '@biomejs/cli-win32-x64@1.9.4': - resolution: {integrity: sha512-8Y5wMhVIPaWe6jw2H+KlEm4wP/f7EW3810ZLmDlrEEy5KvBsb9ECEfu/kMWD484ijfQ8+nIi0giMgu9g1UAuuA==} + '@biomejs/cli-win32-x64@2.3.7': + resolution: {integrity: sha512-pulzUshqv9Ed//MiE8MOUeeEkbkSHVDVY5Cz5wVAnH1DUqliCQG3j6s1POaITTFqFfo7AVIx2sWdKpx/GS+Nqw==} engines: {node: '>=14.21.3'} cpu: [x64] os: [win32] - '@changesets/apply-release-plan@7.0.8': - resolution: {integrity: sha512-qjMUj4DYQ1Z6qHawsn7S71SujrExJ+nceyKKyI9iB+M5p9lCL55afuEd6uLBPRpLGWQwkwvWegDHtwHJb1UjpA==} + '@changesets/apply-release-plan@7.0.13': + resolution: {integrity: sha512-BIW7bofD2yAWoE8H4V40FikC+1nNFEKBisMECccS16W1rt6qqhNTBDmIw5HaqmMgtLNz9e7oiALiEUuKrQ4oHg==} - '@changesets/assemble-release-plan@6.0.5': - resolution: {integrity: sha512-IgvBWLNKZd6k4t72MBTBK3nkygi0j3t3zdC1zrfusYo0KpdsvnDjrMM9vPnTCLCMlfNs55jRL4gIMybxa64FCQ==} + '@changesets/assemble-release-plan@6.0.9': + resolution: {integrity: sha512-tPgeeqCHIwNo8sypKlS3gOPmsS3wP0zHt67JDuL20P4QcXiw/O4Hl7oXiuLnP9yg+rXLQ2sScdV1Kkzde61iSQ==} - '@changesets/changelog-git@0.2.0': - resolution: {integrity: sha512-bHOx97iFI4OClIT35Lok3sJAwM31VbUM++gnMBV16fdbtBhgYu4dxsphBF/0AZZsyAHMrnM0yFcj5gZM1py6uQ==} + '@changesets/changelog-git@0.2.1': + resolution: {integrity: sha512-x/xEleCFLH28c3bQeQIyeZf8lFXyDFVn1SgcBiR2Tw/r4IAWlk1fzxCEZ6NxQAjF2Nwtczoen3OA2qR+UawQ8Q==} - '@changesets/cli@2.27.12': - resolution: {integrity: sha512-9o3fOfHYOvBnyEn0mcahB7wzaA3P4bGJf8PNqGit5PKaMEFdsRixik+txkrJWd2VX+O6wRFXpxQL8j/1ANKE9g==} + '@changesets/cli@2.29.7': + resolution: {integrity: sha512-R7RqWoaksyyKXbKXBTbT4REdy22yH81mcFK6sWtqSanxUCbUi9Uf+6aqxZtDQouIqPdem2W56CdxXgsxdq7FLQ==} hasBin: true - '@changesets/config@3.0.5': - resolution: {integrity: sha512-QyXLSSd10GquX7hY0Mt4yQFMEeqnO5z/XLpbIr4PAkNNoQNKwDyiSrx4yd749WddusH1v3OSiA0NRAYmH/APpQ==} + '@changesets/config@3.1.1': + resolution: {integrity: sha512-bd+3Ap2TKXxljCggI0mKPfzCQKeV/TU4yO2h2C6vAihIo8tzseAn2e7klSuiyYYXvgu53zMN1OeYMIQkaQoWnA==} '@changesets/errors@0.2.0': resolution: {integrity: sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==} - '@changesets/get-dependents-graph@2.1.2': - resolution: {integrity: sha512-sgcHRkiBY9i4zWYBwlVyAjEM9sAzs4wYVwJUdnbDLnVG3QwAaia1Mk5P8M7kraTOZN+vBET7n8KyB0YXCbFRLQ==} + '@changesets/get-dependents-graph@2.1.3': + resolution: {integrity: sha512-gphr+v0mv2I3Oxt19VdWRRUxq3sseyUpX9DaHpTUmLj92Y10AGy+XOtV+kbM6L/fDcpx7/ISDFK6T8A/P3lOdQ==} - '@changesets/get-release-plan@4.0.6': - resolution: {integrity: sha512-FHRwBkY7Eili04Y5YMOZb0ezQzKikTka4wL753vfUA5COSebt7KThqiuCN9BewE4/qFGgF/5t3AuzXx1/UAY4w==} + '@changesets/get-release-plan@4.0.13': + resolution: {integrity: sha512-DWG1pus72FcNeXkM12tx+xtExyH/c9I1z+2aXlObH3i9YA7+WZEVaiHzHl03thpvAgWTRaH64MpfHxozfF7Dvg==} '@changesets/get-version-range-type@0.4.0': resolution: {integrity: sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==} - '@changesets/git@3.0.2': - resolution: {integrity: sha512-r1/Kju9Y8OxRRdvna+nxpQIsMsRQn9dhhAZt94FLDeu0Hij2hnOozW8iqnHBgvu+KdnJppCveQwK4odwfw/aWQ==} + '@changesets/git@3.0.4': + resolution: {integrity: sha512-BXANzRFkX+XcC1q/d27NKvlJ1yf7PSAgi8JG6dt8EfbHFHi4neau7mufcSca5zRhwOL8j9s6EqsxmT+s+/E6Sw==} '@changesets/logger@0.1.1': resolution: {integrity: sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg==} - '@changesets/parse@0.4.0': - resolution: {integrity: sha512-TS/9KG2CdGXS27S+QxbZXgr8uPsP4yNJYb4BC2/NeFUj80Rni3TeD2qwWmabymxmrLo7JEsytXH1FbpKTbvivw==} + '@changesets/parse@0.4.1': + resolution: {integrity: sha512-iwksMs5Bf/wUItfcg+OXrEpravm5rEd9Bf4oyIPL4kVTmJQ7PNDSd6MDYkpSJR1pn7tz/k8Zf2DhTCqX08Ou+Q==} - '@changesets/pre@2.0.1': - resolution: {integrity: sha512-vvBJ/If4jKM4tPz9JdY2kGOgWmCowUYOi5Ycv8dyLnEE8FgpYYUo1mgJZxcdtGGP3aG8rAQulGLyyXGSLkIMTQ==} + '@changesets/pre@2.0.2': + resolution: {integrity: sha512-HaL/gEyFVvkf9KFg6484wR9s0qjAXlZ8qWPDkTyKF6+zqjBe/I2mygg3MbpZ++hdi0ToqNUF8cjj7fBy0dg8Ug==} - '@changesets/read@0.6.2': - resolution: {integrity: sha512-wjfQpJvryY3zD61p8jR87mJdyx2FIhEcdXhKUqkja87toMrP/3jtg/Yg29upN+N4Ckf525/uvV7a4tzBlpk6gg==} + '@changesets/read@0.6.5': + resolution: {integrity: sha512-UPzNGhsSjHD3Veb0xO/MwvasGe8eMyNrR/sT9gR8Q3DhOQZirgKhhXv/8hVsI0QpPjR004Z9iFxoJU6in3uGMg==} - '@changesets/should-skip-package@0.1.1': - resolution: {integrity: sha512-H9LjLbF6mMHLtJIc/eHR9Na+MifJ3VxtgP/Y+XLn4BF7tDTEN1HNYtH6QMcjP1uxp9sjaFYmW8xqloaCi/ckTg==} + '@changesets/should-skip-package@0.1.2': + resolution: {integrity: sha512-qAK/WrqWLNCP22UDdBTMPH5f41elVDlsNyat180A33dWxuUDyNpg6fPi/FyTZwRriVjg0L8gnjJn2F9XAoF0qw==} '@changesets/types@4.1.0': resolution: {integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==} - '@changesets/types@6.0.0': - resolution: {integrity: sha512-b1UkfNulgKoWfqyHtzKS5fOZYSJO+77adgL7DLRDr+/7jhChN+QcHnbjiQVOz/U+Ts3PGNySq7diAItzDgugfQ==} + '@changesets/types@6.1.0': + resolution: {integrity: sha512-rKQcJ+o1nKNgeoYRHKOS07tAMNd3YSN0uHaJOZYjBAgxfV7TUE7JE+z4BzZdQwb5hKaYbayKN5KrYV7ODb2rAA==} - '@changesets/write@0.3.2': - resolution: {integrity: sha512-kDxDrPNpUgsjDbWBvUo27PzKX4gqeKOlhibaOXDJA6kuBisGqNHv/HwGJrAu8U/dSf8ZEFIeHIPtvSlZI1kULw==} + '@changesets/write@0.4.0': + resolution: {integrity: sha512-CdTLvIOPiCNuH71pyDu3rA+Q0n65cmAbXnwWH84rKGiFumFzkmHNT8KHTMEchcxN+Kl8I54xGUhJ7l3E7X396Q==} '@esbuild/aix-ppc64@0.23.1': resolution: {integrity: sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==} @@ -986,144 +981,300 @@ packages: cpu: [ppc64] os: [aix] + '@esbuild/aix-ppc64@0.25.12': + resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + '@esbuild/android-arm64@0.23.1': resolution: {integrity: sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==} engines: {node: '>=18'} cpu: [arm64] os: [android] + '@esbuild/android-arm64@0.25.12': + resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + '@esbuild/android-arm@0.23.1': resolution: {integrity: sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==} engines: {node: '>=18'} cpu: [arm] os: [android] + '@esbuild/android-arm@0.25.12': + resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + '@esbuild/android-x64@0.23.1': resolution: {integrity: sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==} engines: {node: '>=18'} cpu: [x64] os: [android] + '@esbuild/android-x64@0.25.12': + resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + '@esbuild/darwin-arm64@0.23.1': resolution: {integrity: sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] + '@esbuild/darwin-arm64@0.25.12': + resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + '@esbuild/darwin-x64@0.23.1': resolution: {integrity: sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==} engines: {node: '>=18'} cpu: [x64] os: [darwin] + '@esbuild/darwin-x64@0.25.12': + resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + '@esbuild/freebsd-arm64@0.23.1': resolution: {integrity: sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] + '@esbuild/freebsd-arm64@0.25.12': + resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + '@esbuild/freebsd-x64@0.23.1': resolution: {integrity: sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] + '@esbuild/freebsd-x64@0.25.12': + resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + '@esbuild/linux-arm64@0.23.1': resolution: {integrity: sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==} engines: {node: '>=18'} cpu: [arm64] os: [linux] + '@esbuild/linux-arm64@0.25.12': + resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + '@esbuild/linux-arm@0.23.1': resolution: {integrity: sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==} engines: {node: '>=18'} cpu: [arm] os: [linux] + '@esbuild/linux-arm@0.25.12': + resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + '@esbuild/linux-ia32@0.23.1': resolution: {integrity: sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==} engines: {node: '>=18'} cpu: [ia32] os: [linux] + '@esbuild/linux-ia32@0.25.12': + resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + '@esbuild/linux-loong64@0.23.1': resolution: {integrity: sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==} engines: {node: '>=18'} cpu: [loong64] os: [linux] + '@esbuild/linux-loong64@0.25.12': + resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + '@esbuild/linux-mips64el@0.23.1': resolution: {integrity: sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] + '@esbuild/linux-mips64el@0.25.12': + resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + '@esbuild/linux-ppc64@0.23.1': resolution: {integrity: sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] + '@esbuild/linux-ppc64@0.25.12': + resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + '@esbuild/linux-riscv64@0.23.1': resolution: {integrity: sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] + '@esbuild/linux-riscv64@0.25.12': + resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + '@esbuild/linux-s390x@0.23.1': resolution: {integrity: sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==} engines: {node: '>=18'} cpu: [s390x] os: [linux] + '@esbuild/linux-s390x@0.25.12': + resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + '@esbuild/linux-x64@0.23.1': resolution: {integrity: sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==} engines: {node: '>=18'} cpu: [x64] os: [linux] + '@esbuild/linux-x64@0.25.12': + resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.25.12': + resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + '@esbuild/netbsd-x64@0.23.1': resolution: {integrity: sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] + '@esbuild/netbsd-x64@0.25.12': + resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + '@esbuild/openbsd-arm64@0.23.1': resolution: {integrity: sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] + '@esbuild/openbsd-arm64@0.25.12': + resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + '@esbuild/openbsd-x64@0.23.1': resolution: {integrity: sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] + '@esbuild/openbsd-x64@0.25.12': + resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openharmony-arm64@0.25.12': + resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + '@esbuild/sunos-x64@0.23.1': resolution: {integrity: sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==} engines: {node: '>=18'} cpu: [x64] os: [sunos] + '@esbuild/sunos-x64@0.25.12': + resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + '@esbuild/win32-arm64@0.23.1': resolution: {integrity: sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==} engines: {node: '>=18'} cpu: [arm64] os: [win32] + '@esbuild/win32-arm64@0.25.12': + resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + '@esbuild/win32-ia32@0.23.1': resolution: {integrity: sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==} engines: {node: '>=18'} cpu: [ia32] os: [win32] + '@esbuild/win32-ia32@0.25.12': + resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + '@esbuild/win32-x64@0.23.1': resolution: {integrity: sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==} engines: {node: '>=18'} cpu: [x64] os: [win32] + '@esbuild/win32-x64@0.25.12': + resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + '@expo/bunyan@4.0.1': resolution: {integrity: sha512-+Lla7nYSiHZirgK+U/uYzsLv/X+HaJienbD5AKX1UQZHYfWaP+9uuQluRB4GrEVWF0GZ7vEVp/jzaOT9k/SQlg==} engines: {node: '>=0.10.0'} @@ -1194,6 +1345,15 @@ packages: resolution: {integrity: sha512-ReZxZ8pdnoI3tP/dNnJdnmAk7uLT4FjsKDGW7YeDdvdOMz2XCQSmSCM9IWlrXuWtMF9zeSB6WJtEhCQ41gQOfw==} hasBin: true + '@inquirer/external-editor@1.0.3': + resolution: {integrity: sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} @@ -1256,6 +1416,9 @@ packages: '@jridgewell/sourcemap-codec@1.5.0': resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} @@ -1265,6 +1428,27 @@ packages: '@manypkg/get-packages@1.1.3': resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} + '@napi-ffi/ffi-napi@4.0.3': + resolution: {integrity: sha512-q4oNihranYHab9kxVW3Yh7A5knw/+SCUlgyXY2p0msRDePyIhZldbMkY6hILPbX59kqCf0cIq5OPpjd46z7zhA==} + engines: {node: '>=10'} + + '@napi-ffi/get-symbol-from-current-process-h@1.0.4': + resolution: {integrity: sha512-omxOvN73y1aSxO79IQ3bxkqpEoln9yzsy9btBKJG3Sm8lIUms3I9wM/eySPsWkKOFN2BBpqFxeB8BYJ2Tt8TfQ==} + engines: {node: '>=18.0.0'} + + '@napi-ffi/get-uv-event-loop-napi-h@1.0.6': + resolution: {integrity: sha512-++/FRO2Rog0U2CZpnCMr4yLORiV1h+AmJlXN0IKmZoqEcYiOg33AToh32QPHxakAqcXxEzqRdkGBudVwWTSqvw==} + + '@napi-ffi/ref-array-di@1.2.2': + resolution: {integrity: sha512-efTNFFSxLGeGXLfukzjR79OEM2rQgj13g3j2IQ1kvnm6yUkd9ifPiw8hWtsHTIAJHxNFMwWTVvWXJiew9uvFWw==} + + '@napi-ffi/ref-napi@3.0.5': + resolution: {integrity: sha512-Oxmr7OUyZpEu0m3eEjHuTOPqnDmAPZPAZcLAfhxhKf7a2mQV2/t0DwCMgx+QDpZLBiFZRHy7oba9fvWEXS469w==} + engines: {node: '>= 20.0'} + + '@napi-ffi/ref-struct-di@1.1.1': + resolution: {integrity: sha512-4+QAerLVGUIVOp5C8tNA2MWy+iMEO8/6pT819He8TKsqElbIjZIiGCexhZa4X5mlVTQ8QT8Nb4yQL2mE62lPtg==} + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -1350,6 +1534,116 @@ packages: '@types/react': optional: true + '@rollup/rollup-android-arm-eabi@4.53.3': + resolution: {integrity: sha512-mRSi+4cBjrRLoaal2PnqH82Wqyb+d3HsPUN/W+WslCXsZsyHa9ZeQQX/pQsZaVIWDkPcpV6jJ+3KLbTbgnwv8w==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.53.3': + resolution: {integrity: sha512-CbDGaMpdE9sh7sCmTrTUyllhrg65t6SwhjlMJsLr+J8YjFuPmCEjbBSx4Z/e4SmDyH3aB5hGaJUP2ltV/vcs4w==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.53.3': + resolution: {integrity: sha512-Nr7SlQeqIBpOV6BHHGZgYBuSdanCXuw09hon14MGOLGmXAFYjx1wNvquVPmpZnl0tLjg25dEdr4IQ6GgyToCUA==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.53.3': + resolution: {integrity: sha512-DZ8N4CSNfl965CmPktJ8oBnfYr3F8dTTNBQkRlffnUarJ2ohudQD17sZBa097J8xhQ26AwhHJ5mvUyQW8ddTsQ==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.53.3': + resolution: {integrity: sha512-yMTrCrK92aGyi7GuDNtGn2sNW+Gdb4vErx4t3Gv/Tr+1zRb8ax4z8GWVRfr3Jw8zJWvpGHNpss3vVlbF58DZ4w==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.53.3': + resolution: {integrity: sha512-lMfF8X7QhdQzseM6XaX0vbno2m3hlyZFhwcndRMw8fbAGUGL3WFMBdK0hbUBIUYcEcMhVLr1SIamDeuLBnXS+Q==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.53.3': + resolution: {integrity: sha512-k9oD15soC/Ln6d2Wv/JOFPzZXIAIFLp6B+i14KhxAfnq76ajt0EhYc5YPeX6W1xJkAdItcVT+JhKl1QZh44/qw==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-musleabihf@4.53.3': + resolution: {integrity: sha512-vTNlKq+N6CK/8UktsrFuc+/7NlEYVxgaEgRXVUVK258Z5ymho29skzW1sutgYjqNnquGwVUObAaxae8rZ6YMhg==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.53.3': + resolution: {integrity: sha512-RGrFLWgMhSxRs/EWJMIFM1O5Mzuz3Xy3/mnxJp/5cVhZ2XoCAxJnmNsEyeMJtpK+wu0FJFWz+QF4mjCA7AUQ3w==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.53.3': + resolution: {integrity: sha512-kASyvfBEWYPEwe0Qv4nfu6pNkITLTb32p4yTgzFCocHnJLAHs+9LjUu9ONIhvfT/5lv4YS5muBHyuV84epBo/A==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-loong64-gnu@4.53.3': + resolution: {integrity: sha512-JiuKcp2teLJwQ7vkJ95EwESWkNRFJD7TQgYmCnrPtlu50b4XvT5MOmurWNrCj3IFdyjBQ5p9vnrX4JM6I8OE7g==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-ppc64-gnu@4.53.3': + resolution: {integrity: sha512-EoGSa8nd6d3T7zLuqdojxC20oBfNT8nexBbB/rkxgKj5T5vhpAQKKnD+h3UkoMuTyXkP5jTjK/ccNRmQrPNDuw==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.53.3': + resolution: {integrity: sha512-4s+Wped2IHXHPnAEbIB0YWBv7SDohqxobiiPA1FIWZpX+w9o2i4LezzH/NkFUl8LRci/8udci6cLq+jJQlh+0g==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-riscv64-musl@4.53.3': + resolution: {integrity: sha512-68k2g7+0vs2u9CxDt5ktXTngsxOQkSEV/xBbwlqYcUrAVh6P9EgMZvFsnHy4SEiUl46Xf0IObWVbMvPrr2gw8A==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.53.3': + resolution: {integrity: sha512-VYsFMpULAz87ZW6BVYw3I6sWesGpsP9OPcyKe8ofdg9LHxSbRMd7zrVrr5xi/3kMZtpWL/wC+UIJWJYVX5uTKg==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.53.3': + resolution: {integrity: sha512-3EhFi1FU6YL8HTUJZ51imGJWEX//ajQPfqWLI3BQq4TlvHy4X0MOr5q3D2Zof/ka0d5FNdPwZXm3Yyib/UEd+w==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.53.3': + resolution: {integrity: sha512-eoROhjcc6HbZCJr+tvVT8X4fW3/5g/WkGvvmwz/88sDtSJzO7r/blvoBDgISDiCjDRZmHpwud7h+6Q9JxFwq1Q==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-openharmony-arm64@4.53.3': + resolution: {integrity: sha512-OueLAWgrNSPGAdUdIjSWXw+u/02BRTcnfw9PN41D2vq/JSEPnJnVuBgw18VkN8wcd4fjUs+jFHVM4t9+kBSNLw==} + cpu: [arm64] + os: [openharmony] + + '@rollup/rollup-win32-arm64-msvc@4.53.3': + resolution: {integrity: sha512-GOFuKpsxR/whszbF/bzydebLiXIHSgsEUp6M0JI8dWvi+fFa1TD6YQa4aSZHtpmh2/uAlj/Dy+nmby3TJ3pkTw==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.53.3': + resolution: {integrity: sha512-iah+THLcBJdpfZ1TstDFbKNznlzoxa8fmnFYK4V67HvmuNYkVdAywJSoteUszvBQ9/HqN2+9AZghbajMsFT+oA==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-gnu@4.53.3': + resolution: {integrity: sha512-J9QDiOIZlZLdcot5NXEepDkstocktoVjkaKUtqzgzpt2yWjGlbYiKyp05rWwk4nypbYUNoFAztEgixoLaSETkg==} + cpu: [x64] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.53.3': + resolution: {integrity: sha512-UhTd8u31dXadv0MopwGgNOBpUVROFKWVQgAg5N1ESyCz8AuBcMqm4AuTjrwgQKGDfoFuz02EuMRHQIw/frmYKQ==} + cpu: [x64] + os: [win32] + '@segment/loosely-validate-event@2.0.0': resolution: {integrity: sha512-ZMCSfztDBqwotkl848ODgVcAmN4OItEWDCkshcKz0/W6gGSQayuuCtWV/MlodFivAZD793d6UgANd6wCXUfrIw==} @@ -1362,6 +1656,9 @@ packages: '@sinonjs/fake-timers@10.3.0': resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} + '@standard-schema/spec@1.0.0': + resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==} + '@types/babel__core@7.20.5': resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} @@ -1374,6 +1671,18 @@ packages: '@types/babel__traverse@7.20.6': resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} + '@types/chai@5.2.3': + resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} + + '@types/deep-eql@4.0.2': + resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} + + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + + '@types/ffi-napi@4.0.10': + resolution: {integrity: sha512-Q6TimLDxdg+Obp4W9tgzIhSA25THD6AmR8eM+ZB7bbU96xnkpd7PRXwG4az2rKpreuF90IPr/LlQtetmIfQL2g==} + '@types/graceful-fs@4.1.9': resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} @@ -1395,6 +1704,9 @@ packages: '@types/node@20.17.16': resolution: {integrity: sha512-vOTpLduLkZXePLxHiHsBLp98mHGnl8RptV4YAO3HfKO5UHjDvySGbxKtpYfy8Sx5+WKcgc45qNreJJRVM3L6mw==} + '@types/node@24.10.1': + resolution: {integrity: sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==} + '@types/prop-types@15.7.14': resolution: {integrity: sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==} @@ -1427,6 +1739,35 @@ packages: peerDependencies: '@urql/core': ^5.0.0 + '@vitest/expect@4.0.12': + resolution: {integrity: sha512-is+g0w8V3/ZhRNrRizrJNr8PFQKwYmctWlU4qg8zy5r9aIV5w8IxXLlfbbxJCwSpsVl2PXPTm2/zruqTqz3QSg==} + + '@vitest/mocker@4.0.12': + resolution: {integrity: sha512-GsmA/tD5Ht3RUFoz41mZsMU1AXch3lhmgbTnoSPTdH231g7S3ytNN1aU0bZDSyxWs8WA7KDyMPD5L4q6V6vj9w==} + peerDependencies: + msw: ^2.4.9 + vite: ^6.0.0 || ^7.0.0-0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + + '@vitest/pretty-format@4.0.12': + resolution: {integrity: sha512-R7nMAcnienG17MvRN8TPMJiCG8rrZJblV9mhT7oMFdBXvS0x+QD6S1G4DxFusR2E0QIS73f7DqSR1n87rrmE+g==} + + '@vitest/runner@4.0.12': + resolution: {integrity: sha512-hDlCIJWuwlcLumfukPsNfPDOJokTv79hnOlf11V+n7E14rHNPz0Sp/BO6h8sh9qw4/UjZiKyYpVxK2ZNi+3ceQ==} + + '@vitest/snapshot@4.0.12': + resolution: {integrity: sha512-2jz9zAuBDUSbnfyixnyOd1S2YDBrZO23rt1bicAb6MA/ya5rHdKFRikPIDpBj/Dwvh6cbImDmudegnDAkHvmRQ==} + + '@vitest/spy@4.0.12': + resolution: {integrity: sha512-GZjI9PPhiOYNX8Nsyqdw7JQB+u0BptL5fSnXiottAUBHlcMzgADV58A7SLTXXQwcN1yZ6gfd1DH+2bqjuUlCzw==} + + '@vitest/utils@4.0.12': + resolution: {integrity: sha512-DVS/TLkLdvGvj1avRy0LSmKfrcI9MNFvNGN6ECjTUHWJdlcgPDOXhjMis5Dh7rBH62nAmSXnkPbE+DZ5YD75Rw==} + '@xmldom/xmldom@0.7.13': resolution: {integrity: sha512-lm2GW5PkosIzccsaZIz7tp8cPADSIlIHWDFTR1N0SzfinhhYgeIQjFMz4rYzanCScr3DqQLeomUDArp6MWKm+g==} engines: {node: '>=10.0.0'} @@ -1521,6 +1862,10 @@ packages: asap@2.0.6: resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} + assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} + ast-types@0.15.2: resolution: {integrity: sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg==} engines: {node: '>=4'} @@ -1702,6 +2047,10 @@ packages: caniuse-lite@1.0.30001695: resolution: {integrity: sha512-vHyLade6wTgI2u1ec3WQBxv+2BrTERV28UXQu9LO6lZ9pYeMk34vjXFLOxo1A4UBA8XTL4njRQZdno/yYaSmWw==} + chai@6.2.1: + resolution: {integrity: sha512-p4Z49OGG5W/WBCPSS/dH3jQ73kD6tiMmUM+bckNK6Jr5JHMG3k9bg/BvKR8lKmtVBKmOiuVaV2ws8s9oSbwysg==} + engines: {node: '>=18'} + chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} @@ -1710,8 +2059,8 @@ packages: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} - chardet@0.7.0: - resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + chardet@2.1.1: + resolution: {integrity: sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==} charenc@0.0.2: resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==} @@ -1882,6 +2231,15 @@ packages: supports-color: optional: true + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + deep-extend@0.6.0: resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} engines: {node: '>=4.0.0'} @@ -1987,6 +2345,9 @@ packages: error-stack-parser@2.1.4: resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} + es-module-lexer@1.7.0: + resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} + es5-ext@0.10.64: resolution: {integrity: sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==} engines: {node: '>=0.10'} @@ -2003,6 +2364,11 @@ packages: engines: {node: '>=18'} hasBin: true + esbuild@0.25.12: + resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} + engines: {node: '>=18'} + hasBin: true + escalade@3.2.0: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} @@ -2031,6 +2397,9 @@ packages: engines: {node: '>=4'} hasBin: true + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} @@ -2057,6 +2426,10 @@ packages: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} + expect-type@1.2.2: + resolution: {integrity: sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==} + engines: {node: '>=12.0.0'} + expo-asset@11.0.2: resolution: {integrity: sha512-We3Td5WsNsNQyXoheLnuwic6JCOt/pqXqIIyWaZ3z/PeHrA+SwoQdI18MjDhkudLK08tbIVyDSUW8IJHXa04eg==} peerDependencies: @@ -2127,10 +2500,6 @@ packages: extendable-error@0.1.7: resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} - external-editor@3.1.0: - resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} - engines: {node: '>=4'} - fast-glob@3.3.3: resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} engines: {node: '>=8.6.0'} @@ -2153,6 +2522,15 @@ packages: fbjs@3.0.5: resolution: {integrity: sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg==} + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + fetch-retry@4.1.1: resolution: {integrity: sha512-e6eB7zN6UBSwGVwrbWVH+gdLnkW9WwHhmq2YDK1Sh30pzx1onRVGBvogTlUeWxwTa+L86NYdo4hFkh7O8ZjSnA==} @@ -2265,15 +2643,9 @@ packages: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} - get-symbol-from-current-process-h@1.0.2: - resolution: {integrity: sha512-syloC6fsCt62ELLrr1VKBM1ggOpMdetX9hTrdW77UQdcApPHLmf7CI7OKcN1c9kYuNxKcDe4iJ4FY9sX3aw2xw==} - get-tsconfig@4.10.0: resolution: {integrity: sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==} - get-uv-event-loop-napi-h@1.0.6: - resolution: {integrity: sha512-t5c9VNR84nRoF+eLiz6wFrEp1SE2Acg0wS+Ysa2zF0eROes+LzOfuTaVHxGy8AbS8rq7FHEJzjnCZo1BupwdJg==} - getenv@1.0.0: resolution: {integrity: sha512-7yetJWqbS9sbn0vIfliPsFgoXMKn/YMF+Wuiog97x+urnSRRRZ7xB+uVkwGKzRgq9CDFfMQnE9ruL5DHv9c6Xg==} engines: {node: '>=6'} @@ -2298,6 +2670,9 @@ packages: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} + globrex@0.1.2: + resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} + graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} @@ -2339,21 +2714,22 @@ packages: resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} engines: {node: '>= 0.8'} - human-id@1.0.2: - resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==} + human-id@4.1.2: + resolution: {integrity: sha512-v/J+4Z/1eIJovEBdlV5TYj1IR+ZiohcYGRY+qN/oC9dAfKzVT023N/Bgw37hrKCoVRBvk3bqyzpr2PP5YeTMSg==} + hasBin: true human-signals@2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} - iconv-lite@0.4.24: - resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} - engines: {node: '>=0.10.0'} - iconv-lite@0.6.3: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} + iconv-lite@0.7.0: + resolution: {integrity: sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==} + engines: {node: '>=0.10.0'} + ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} @@ -2700,6 +3076,9 @@ packages: lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + make-dir@2.1.0: resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} engines: {node: '>=6'} @@ -2853,8 +3232,8 @@ packages: resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} engines: {node: '>= 8'} - minizlib@3.0.1: - resolution: {integrity: sha512-umcy022ILvb5/3Djuu8LWeqUa8D68JaBzlttKeMWen48SjabqS3iY5w/vzeMzMUNhLDifyhbOwKDSznB1vvrwg==} + minizlib@3.1.0: + resolution: {integrity: sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==} engines: {node: '>= 18'} mkdirp@0.5.6: @@ -2866,11 +3245,6 @@ packages: engines: {node: '>=10'} hasBin: true - mkdirp@3.0.1: - resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} - engines: {node: '>=10'} - hasBin: true - mri@1.2.0: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} engines: {node: '>=4'} @@ -2884,6 +3258,11 @@ packages: mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + nanoid@3.3.8: resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -2912,8 +3291,9 @@ packages: node-abort-controller@3.1.1: resolution: {integrity: sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==} - node-addon-api@3.2.1: - resolution: {integrity: sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==} + node-addon-api@8.5.0: + resolution: {integrity: sha512-/bRZty2mXUIFY/xU5HLvveNHlswNJej+RnxBjOMkidWfwZzgTbPG1E3K5TOxRLOR+5hX7bSofy8yf1hZevMS8A==} + engines: {node: ^18 || ^20 || >= 21} node-dir@0.1.17: resolution: {integrity: sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==} @@ -3103,6 +3483,9 @@ packages: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -3114,6 +3497,10 @@ packages: resolution: {integrity: sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag==} engines: {node: '>=10'} + picomatch@4.0.3: + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} + engines: {node: '>=12'} + pify@4.0.1: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} @@ -3138,6 +3525,10 @@ packages: resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} engines: {node: ^10 || ^12 || >=14} + postcss@8.5.6: + resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} + engines: {node: ^10 || ^12 || >=14} + prettier@2.8.8: resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} engines: {node: '>=10.13.0'} @@ -3246,12 +3637,6 @@ packages: resolution: {integrity: sha512-hjMmLaUXAm1hIuTqOdeYObMslq/q+Xff6QE3Y2P+uoHAg2nmVlLBps2hzh1UJDdMtDTMXOFewK6ky51JQIeECg==} engines: {node: '>= 4'} - ref-array-di@1.2.2: - resolution: {integrity: sha512-jhCmhqWa7kvCVrWhR/d7RemkppqPUdxEil1CtTtm7FkZV8LcHHCK3Or9GinUiFP5WY3k0djUkMvhBhx49Jb2iA==} - - ref-struct-di@1.1.1: - resolution: {integrity: sha512-2Xyn/0Qgz89VT+++WP0sTosdm9oeowLP23wRJYhG4BFdMUrLj3jhwHZNEytYNYgtPKLNTP3KJX4HEgBvM1/Y2g==} - regenerate-unicode-properties@10.2.0: resolution: {integrity: sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==} engines: {node: '>=4'} @@ -3342,6 +3727,11 @@ packages: resolution: {integrity: sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==} hasBin: true + rollup@4.53.3: + resolution: {integrity: sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} @@ -3423,6 +3813,9 @@ packages: resolution: {integrity: sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==} engines: {node: '>= 0.4'} + siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} @@ -3476,6 +3869,9 @@ packages: resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} engines: {node: '>=10'} + stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + stackframe@1.3.4: resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==} @@ -3491,6 +3887,9 @@ packages: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} + std-env@3.10.0: + resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} + stream-buffers@2.2.0: resolution: {integrity: sha512-uyQK/mx5QjHun80FLJTfaWE7JtwfRMKBLkMne6udYOmvH0CawotVa7TfgYHzAnpphn4+TweIx1QKMnRIbipmUg==} engines: {node: '>= 0.10.0'} @@ -3574,8 +3973,8 @@ packages: resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} engines: {node: '>=10'} - tar@7.4.3: - resolution: {integrity: sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==} + tar@7.5.2: + resolution: {integrity: sha512-7NyxrTE4Anh8km8iEy7o0QYPs+0JKBTj5ZaqHg6B39erLg0qYXN3BijtShwbsNSvQ+LN75+KV+C4QR/f6Gwnpg==} engines: {node: '>=18'} temp-dir@2.0.0: @@ -3623,6 +4022,20 @@ packages: through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + tinybench@2.9.0: + resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + + tinyexec@0.3.2: + resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} + + tinyglobby@0.2.15: + resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} + engines: {node: '>=12.0.0'} + + tinyrainbow@3.0.3: + resolution: {integrity: sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==} + engines: {node: '>=14.0.0'} + tmp@0.0.33: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} @@ -3644,6 +4057,16 @@ packages: ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + tsconfck@3.1.6: + resolution: {integrity: sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==} + engines: {node: ^18 || >=20} + hasBin: true + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} @@ -3671,8 +4094,8 @@ packages: type@2.7.3: resolution: {integrity: sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==} - typescript@5.4.5: - resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} engines: {node: '>=14.17'} hasBin: true @@ -3683,6 +4106,9 @@ packages: undici-types@6.19.8: resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + undici-types@7.16.0: + resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} + undici@6.21.1: resolution: {integrity: sha512-q/1rj5D0/zayJB2FraXdaWxbhWiNKDvu8naDT2dl1yTlvJp4BLtOcp2a5BvgGNQpYYJzau7tf1WgKv3b+7mqpQ==} engines: {node: '>=18.17'} @@ -3760,6 +4186,91 @@ packages: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} + vite-tsconfig-paths@5.1.4: + resolution: {integrity: sha512-cYj0LRuLV2c2sMqhqhGpaO3LretdtMn/BVX4cPLanIZuwwrkVl+lK84E/miEXkCHWXuq65rhNN4rXsBcOB3S4w==} + peerDependencies: + vite: '*' + peerDependenciesMeta: + vite: + optional: true + + vite@7.2.4: + resolution: {integrity: sha512-NL8jTlbo0Tn4dUEXEsUg8KeyG/Lkmc4Fnzb8JXN/Ykm9G4HNImjtABMJgkQoVjOBN/j2WAwDTRytdqJbZsah7w==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@types/node': ^20.19.0 || >=22.12.0 + jiti: '>=1.21.0' + less: ^4.0.0 + lightningcss: ^1.21.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + vitest@4.0.12: + resolution: {integrity: sha512-pmW4GCKQ8t5Ko1jYjC3SqOr7TUKN7uHOHB/XGsAIb69eYu6d1ionGSsb5H9chmPf+WeXt0VE7jTXsB1IvWoNbw==} + engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@opentelemetry/api': ^1.9.0 + '@types/debug': ^4.1.12 + '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 + '@vitest/browser-playwright': 4.0.12 + '@vitest/browser-preview': 4.0.12 + '@vitest/browser-webdriverio': 4.0.12 + '@vitest/ui': 4.0.12 + happy-dom: '*' + jsdom: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@opentelemetry/api': + optional: true + '@types/debug': + optional: true + '@types/node': + optional: true + '@vitest/browser-playwright': + optional: true + '@vitest/browser-preview': + optional: true + '@vitest/browser-webdriverio': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + vlq@1.0.1: resolution: {integrity: sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==} @@ -3799,6 +4310,11 @@ packages: engines: {node: '>= 8'} hasBin: true + why-is-node-running@2.3.0: + resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} + engines: {node: '>=8'} + hasBin: true + wonka@6.3.4: resolution: {integrity: sha512-CjpbqNtBGNAeyNS/9W6q3kSkKE52+FjIj7AkFlLr11s/VWGUu6a2CdYSdGxocIhIVjaW/zchesBQUKPVU69Cqg==} @@ -3909,26 +4425,6 @@ snapshots: '@0no-co/graphql.web@1.0.13': {} - '@2060.io/ffi-napi@4.0.9': - dependencies: - '@2060.io/ref-napi': 3.0.6 - debug: 4.4.0 - get-uv-event-loop-napi-h: 1.0.6 - node-addon-api: 3.2.1 - node-gyp-build: 4.8.4 - ref-struct-di: 1.1.1 - transitivePeerDependencies: - - supports-color - - '@2060.io/ref-napi@3.0.6': - dependencies: - debug: 4.4.0 - get-symbol-from-current-process-h: 1.0.2 - node-addon-api: 3.2.1 - node-gyp-build: 4.8.4 - transitivePeerDependencies: - - supports-color - '@ampproject/remapping@2.3.0': dependencies: '@jridgewell/gen-mapping': 0.3.8 @@ -4011,7 +4507,7 @@ snapshots: '@babel/core': 7.26.7 '@babel/helper-compilation-targets': 7.26.5 '@babel/helper-plugin-utils': 7.26.5 - debug: 4.4.0 + debug: 4.4.3 lodash.debounce: 4.0.8 resolve: 1.22.10 transitivePeerDependencies: @@ -4828,48 +5324,48 @@ snapshots: '@babel/helper-string-parser': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 - '@biomejs/biome@1.9.4': + '@biomejs/biome@2.3.7': optionalDependencies: - '@biomejs/cli-darwin-arm64': 1.9.4 - '@biomejs/cli-darwin-x64': 1.9.4 - '@biomejs/cli-linux-arm64': 1.9.4 - '@biomejs/cli-linux-arm64-musl': 1.9.4 - '@biomejs/cli-linux-x64': 1.9.4 - '@biomejs/cli-linux-x64-musl': 1.9.4 - '@biomejs/cli-win32-arm64': 1.9.4 - '@biomejs/cli-win32-x64': 1.9.4 - - '@biomejs/cli-darwin-arm64@1.9.4': + '@biomejs/cli-darwin-arm64': 2.3.7 + '@biomejs/cli-darwin-x64': 2.3.7 + '@biomejs/cli-linux-arm64': 2.3.7 + '@biomejs/cli-linux-arm64-musl': 2.3.7 + '@biomejs/cli-linux-x64': 2.3.7 + '@biomejs/cli-linux-x64-musl': 2.3.7 + '@biomejs/cli-win32-arm64': 2.3.7 + '@biomejs/cli-win32-x64': 2.3.7 + + '@biomejs/cli-darwin-arm64@2.3.7': optional: true - '@biomejs/cli-darwin-x64@1.9.4': + '@biomejs/cli-darwin-x64@2.3.7': optional: true - '@biomejs/cli-linux-arm64-musl@1.9.4': + '@biomejs/cli-linux-arm64-musl@2.3.7': optional: true - '@biomejs/cli-linux-arm64@1.9.4': + '@biomejs/cli-linux-arm64@2.3.7': optional: true - '@biomejs/cli-linux-x64-musl@1.9.4': + '@biomejs/cli-linux-x64-musl@2.3.7': optional: true - '@biomejs/cli-linux-x64@1.9.4': + '@biomejs/cli-linux-x64@2.3.7': optional: true - '@biomejs/cli-win32-arm64@1.9.4': + '@biomejs/cli-win32-arm64@2.3.7': optional: true - '@biomejs/cli-win32-x64@1.9.4': + '@biomejs/cli-win32-x64@2.3.7': optional: true - '@changesets/apply-release-plan@7.0.8': + '@changesets/apply-release-plan@7.0.13': dependencies: - '@changesets/config': 3.0.5 + '@changesets/config': 3.1.1 '@changesets/get-version-range-type': 0.4.0 - '@changesets/git': 3.0.2 - '@changesets/should-skip-package': 0.1.1 - '@changesets/types': 6.0.0 + '@changesets/git': 3.0.4 + '@changesets/should-skip-package': 0.1.2 + '@changesets/types': 6.1.0 '@manypkg/get-packages': 1.1.3 detect-indent: 6.1.0 fs-extra: 7.0.1 @@ -4879,40 +5375,40 @@ snapshots: resolve-from: 5.0.0 semver: 7.6.3 - '@changesets/assemble-release-plan@6.0.5': + '@changesets/assemble-release-plan@6.0.9': dependencies: '@changesets/errors': 0.2.0 - '@changesets/get-dependents-graph': 2.1.2 - '@changesets/should-skip-package': 0.1.1 - '@changesets/types': 6.0.0 + '@changesets/get-dependents-graph': 2.1.3 + '@changesets/should-skip-package': 0.1.2 + '@changesets/types': 6.1.0 '@manypkg/get-packages': 1.1.3 semver: 7.6.3 - '@changesets/changelog-git@0.2.0': + '@changesets/changelog-git@0.2.1': dependencies: - '@changesets/types': 6.0.0 + '@changesets/types': 6.1.0 - '@changesets/cli@2.27.12': + '@changesets/cli@2.29.7(@types/node@24.10.1)': dependencies: - '@changesets/apply-release-plan': 7.0.8 - '@changesets/assemble-release-plan': 6.0.5 - '@changesets/changelog-git': 0.2.0 - '@changesets/config': 3.0.5 + '@changesets/apply-release-plan': 7.0.13 + '@changesets/assemble-release-plan': 6.0.9 + '@changesets/changelog-git': 0.2.1 + '@changesets/config': 3.1.1 '@changesets/errors': 0.2.0 - '@changesets/get-dependents-graph': 2.1.2 - '@changesets/get-release-plan': 4.0.6 - '@changesets/git': 3.0.2 + '@changesets/get-dependents-graph': 2.1.3 + '@changesets/get-release-plan': 4.0.13 + '@changesets/git': 3.0.4 '@changesets/logger': 0.1.1 - '@changesets/pre': 2.0.1 - '@changesets/read': 0.6.2 - '@changesets/should-skip-package': 0.1.1 - '@changesets/types': 6.0.0 - '@changesets/write': 0.3.2 + '@changesets/pre': 2.0.2 + '@changesets/read': 0.6.5 + '@changesets/should-skip-package': 0.1.2 + '@changesets/types': 6.1.0 + '@changesets/write': 0.4.0 + '@inquirer/external-editor': 1.0.3(@types/node@24.10.1) '@manypkg/get-packages': 1.1.3 ansi-colors: 4.1.3 ci-info: 3.9.0 enquirer: 2.4.1 - external-editor: 3.1.0 fs-extra: 7.0.1 mri: 1.2.0 p-limit: 2.3.0 @@ -4922,13 +5418,15 @@ snapshots: semver: 7.6.3 spawndamnit: 3.0.1 term-size: 2.2.1 + transitivePeerDependencies: + - '@types/node' - '@changesets/config@3.0.5': + '@changesets/config@3.1.1': dependencies: '@changesets/errors': 0.2.0 - '@changesets/get-dependents-graph': 2.1.2 + '@changesets/get-dependents-graph': 2.1.3 '@changesets/logger': 0.1.1 - '@changesets/types': 6.0.0 + '@changesets/types': 6.1.0 '@manypkg/get-packages': 1.1.3 fs-extra: 7.0.1 micromatch: 4.0.8 @@ -4937,25 +5435,25 @@ snapshots: dependencies: extendable-error: 0.1.7 - '@changesets/get-dependents-graph@2.1.2': + '@changesets/get-dependents-graph@2.1.3': dependencies: - '@changesets/types': 6.0.0 + '@changesets/types': 6.1.0 '@manypkg/get-packages': 1.1.3 picocolors: 1.1.1 semver: 7.6.3 - '@changesets/get-release-plan@4.0.6': + '@changesets/get-release-plan@4.0.13': dependencies: - '@changesets/assemble-release-plan': 6.0.5 - '@changesets/config': 3.0.5 - '@changesets/pre': 2.0.1 - '@changesets/read': 0.6.2 - '@changesets/types': 6.0.0 + '@changesets/assemble-release-plan': 6.0.9 + '@changesets/config': 3.1.1 + '@changesets/pre': 2.0.2 + '@changesets/read': 0.6.5 + '@changesets/types': 6.1.0 '@manypkg/get-packages': 1.1.3 '@changesets/get-version-range-type@0.4.0': {} - '@changesets/git@3.0.2': + '@changesets/git@3.0.4': dependencies: '@changesets/errors': 0.2.0 '@manypkg/get-packages': 1.1.3 @@ -4967,116 +5465,194 @@ snapshots: dependencies: picocolors: 1.1.1 - '@changesets/parse@0.4.0': + '@changesets/parse@0.4.1': dependencies: - '@changesets/types': 6.0.0 + '@changesets/types': 6.1.0 js-yaml: 3.14.1 - '@changesets/pre@2.0.1': + '@changesets/pre@2.0.2': dependencies: '@changesets/errors': 0.2.0 - '@changesets/types': 6.0.0 + '@changesets/types': 6.1.0 '@manypkg/get-packages': 1.1.3 fs-extra: 7.0.1 - '@changesets/read@0.6.2': + '@changesets/read@0.6.5': dependencies: - '@changesets/git': 3.0.2 + '@changesets/git': 3.0.4 '@changesets/logger': 0.1.1 - '@changesets/parse': 0.4.0 - '@changesets/types': 6.0.0 + '@changesets/parse': 0.4.1 + '@changesets/types': 6.1.0 fs-extra: 7.0.1 p-filter: 2.1.0 picocolors: 1.1.1 - '@changesets/should-skip-package@0.1.1': + '@changesets/should-skip-package@0.1.2': dependencies: - '@changesets/types': 6.0.0 + '@changesets/types': 6.1.0 '@manypkg/get-packages': 1.1.3 '@changesets/types@4.1.0': {} - '@changesets/types@6.0.0': {} + '@changesets/types@6.1.0': {} - '@changesets/write@0.3.2': + '@changesets/write@0.4.0': dependencies: - '@changesets/types': 6.0.0 + '@changesets/types': 6.1.0 fs-extra: 7.0.1 - human-id: 1.0.2 + human-id: 4.1.2 prettier: 2.8.8 '@esbuild/aix-ppc64@0.23.1': optional: true + '@esbuild/aix-ppc64@0.25.12': + optional: true + '@esbuild/android-arm64@0.23.1': optional: true + '@esbuild/android-arm64@0.25.12': + optional: true + '@esbuild/android-arm@0.23.1': optional: true + '@esbuild/android-arm@0.25.12': + optional: true + '@esbuild/android-x64@0.23.1': optional: true + '@esbuild/android-x64@0.25.12': + optional: true + '@esbuild/darwin-arm64@0.23.1': optional: true + '@esbuild/darwin-arm64@0.25.12': + optional: true + '@esbuild/darwin-x64@0.23.1': optional: true + '@esbuild/darwin-x64@0.25.12': + optional: true + '@esbuild/freebsd-arm64@0.23.1': optional: true + '@esbuild/freebsd-arm64@0.25.12': + optional: true + '@esbuild/freebsd-x64@0.23.1': optional: true + '@esbuild/freebsd-x64@0.25.12': + optional: true + '@esbuild/linux-arm64@0.23.1': optional: true + '@esbuild/linux-arm64@0.25.12': + optional: true + '@esbuild/linux-arm@0.23.1': optional: true + '@esbuild/linux-arm@0.25.12': + optional: true + '@esbuild/linux-ia32@0.23.1': optional: true + '@esbuild/linux-ia32@0.25.12': + optional: true + '@esbuild/linux-loong64@0.23.1': optional: true + '@esbuild/linux-loong64@0.25.12': + optional: true + '@esbuild/linux-mips64el@0.23.1': optional: true + '@esbuild/linux-mips64el@0.25.12': + optional: true + '@esbuild/linux-ppc64@0.23.1': optional: true + '@esbuild/linux-ppc64@0.25.12': + optional: true + '@esbuild/linux-riscv64@0.23.1': optional: true + '@esbuild/linux-riscv64@0.25.12': + optional: true + '@esbuild/linux-s390x@0.23.1': optional: true + '@esbuild/linux-s390x@0.25.12': + optional: true + '@esbuild/linux-x64@0.23.1': optional: true + '@esbuild/linux-x64@0.25.12': + optional: true + + '@esbuild/netbsd-arm64@0.25.12': + optional: true + '@esbuild/netbsd-x64@0.23.1': optional: true + '@esbuild/netbsd-x64@0.25.12': + optional: true + '@esbuild/openbsd-arm64@0.23.1': optional: true + '@esbuild/openbsd-arm64@0.25.12': + optional: true + '@esbuild/openbsd-x64@0.23.1': optional: true + '@esbuild/openbsd-x64@0.25.12': + optional: true + + '@esbuild/openharmony-arm64@0.25.12': + optional: true + '@esbuild/sunos-x64@0.23.1': optional: true + '@esbuild/sunos-x64@0.25.12': + optional: true + '@esbuild/win32-arm64@0.23.1': optional: true + '@esbuild/win32-arm64@0.25.12': + optional: true + '@esbuild/win32-ia32@0.23.1': optional: true + '@esbuild/win32-ia32@0.25.12': + optional: true + '@esbuild/win32-x64@0.23.1': optional: true + '@esbuild/win32-x64@0.25.12': + optional: true + '@expo/bunyan@4.0.1': dependencies: uuid: 8.3.2 @@ -5360,6 +5936,13 @@ snapshots: find-up: 5.0.0 js-yaml: 4.1.0 + '@inquirer/external-editor@1.0.3(@types/node@24.10.1)': + dependencies: + chardet: 2.1.1 + iconv-lite: 0.7.0 + optionalDependencies: + '@types/node': 24.10.1 + '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 @@ -5455,6 +6038,8 @@ snapshots: '@jridgewell/sourcemap-codec@1.5.0': {} + '@jridgewell/sourcemap-codec@1.5.5': {} + '@jridgewell/trace-mapping@0.3.25': dependencies: '@jridgewell/resolve-uri': 3.1.2 @@ -5476,6 +6061,43 @@ snapshots: globby: 11.1.0 read-yaml-file: 1.1.0 + '@napi-ffi/ffi-napi@4.0.3': + dependencies: + '@napi-ffi/get-uv-event-loop-napi-h': 1.0.6 + '@napi-ffi/ref-napi': 3.0.5 + '@napi-ffi/ref-struct-di': 1.1.1 + debug: 4.4.0 + node-addon-api: 8.5.0 + node-gyp-build: 4.8.4 + transitivePeerDependencies: + - supports-color + + '@napi-ffi/get-symbol-from-current-process-h@1.0.4': {} + + '@napi-ffi/get-uv-event-loop-napi-h@1.0.6': {} + + '@napi-ffi/ref-array-di@1.2.2': + dependencies: + array-index: 1.0.0 + debug: 4.4.0 + transitivePeerDependencies: + - supports-color + + '@napi-ffi/ref-napi@3.0.5': + dependencies: + '@napi-ffi/get-symbol-from-current-process-h': 1.0.4 + debug: 4.4.0 + node-addon-api: 8.5.0 + node-gyp-build: 4.8.4 + transitivePeerDependencies: + - supports-color + + '@napi-ffi/ref-struct-di@1.1.1': + dependencies: + debug: 4.4.0 + transitivePeerDependencies: + - supports-color + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -5644,6 +6266,72 @@ snapshots: optionalDependencies: '@types/react': 18.3.18 + '@rollup/rollup-android-arm-eabi@4.53.3': + optional: true + + '@rollup/rollup-android-arm64@4.53.3': + optional: true + + '@rollup/rollup-darwin-arm64@4.53.3': + optional: true + + '@rollup/rollup-darwin-x64@4.53.3': + optional: true + + '@rollup/rollup-freebsd-arm64@4.53.3': + optional: true + + '@rollup/rollup-freebsd-x64@4.53.3': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.53.3': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.53.3': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.53.3': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.53.3': + optional: true + + '@rollup/rollup-linux-loong64-gnu@4.53.3': + optional: true + + '@rollup/rollup-linux-ppc64-gnu@4.53.3': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.53.3': + optional: true + + '@rollup/rollup-linux-riscv64-musl@4.53.3': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.53.3': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.53.3': + optional: true + + '@rollup/rollup-linux-x64-musl@4.53.3': + optional: true + + '@rollup/rollup-openharmony-arm64@4.53.3': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.53.3': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.53.3': + optional: true + + '@rollup/rollup-win32-x64-gnu@4.53.3': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.53.3': + optional: true + '@segment/loosely-validate-event@2.0.0': dependencies: component-type: 1.2.2 @@ -5659,6 +6347,8 @@ snapshots: dependencies: '@sinonjs/commons': 3.0.1 + '@standard-schema/spec@1.0.0': {} + '@types/babel__core@7.20.5': dependencies: '@babel/parser': 7.26.7 @@ -5680,9 +6370,24 @@ snapshots: dependencies: '@babel/types': 7.26.7 + '@types/chai@5.2.3': + dependencies: + '@types/deep-eql': 4.0.2 + assertion-error: 2.0.1 + + '@types/deep-eql@4.0.2': {} + + '@types/estree@1.0.8': {} + + '@types/ffi-napi@4.0.10': + dependencies: + '@types/node': 24.10.1 + '@types/ref-napi': 3.0.12 + '@types/ref-struct-di': 1.1.12 + '@types/graceful-fs@4.1.9': dependencies: - '@types/node': 20.17.16 + '@types/node': 24.10.1 '@types/istanbul-lib-coverage@2.0.6': {} @@ -5696,7 +6401,7 @@ snapshots: '@types/node-forge@1.3.11': dependencies: - '@types/node': 20.17.16 + '@types/node': 24.10.1 '@types/node@12.20.55': {} @@ -5704,6 +6409,10 @@ snapshots: dependencies: undici-types: 6.19.8 + '@types/node@24.10.1': + dependencies: + undici-types: 7.16.0 + '@types/prop-types@15.7.14': {} '@types/react@18.3.18': @@ -5717,7 +6426,7 @@ snapshots: '@types/ref-napi@3.0.12': dependencies: - '@types/node': 20.17.16 + '@types/node': 24.10.1 '@types/ref-struct-di@1.1.12': dependencies: @@ -5743,6 +6452,45 @@ snapshots: '@urql/core': 5.1.0 wonka: 6.3.4 + '@vitest/expect@4.0.12': + dependencies: + '@standard-schema/spec': 1.0.0 + '@types/chai': 5.2.3 + '@vitest/spy': 4.0.12 + '@vitest/utils': 4.0.12 + chai: 6.2.1 + tinyrainbow: 3.0.3 + + '@vitest/mocker@4.0.12(vite@7.2.4(@types/node@24.10.1)(lightningcss@1.27.0)(terser@5.37.0)(tsx@4.19.2))': + dependencies: + '@vitest/spy': 4.0.12 + estree-walker: 3.0.3 + magic-string: 0.30.21 + optionalDependencies: + vite: 7.2.4(@types/node@24.10.1)(lightningcss@1.27.0)(terser@5.37.0)(tsx@4.19.2) + + '@vitest/pretty-format@4.0.12': + dependencies: + tinyrainbow: 3.0.3 + + '@vitest/runner@4.0.12': + dependencies: + '@vitest/utils': 4.0.12 + pathe: 2.0.3 + + '@vitest/snapshot@4.0.12': + dependencies: + '@vitest/pretty-format': 4.0.12 + magic-string: 0.30.21 + pathe: 2.0.3 + + '@vitest/spy@4.0.12': {} + + '@vitest/utils@4.0.12': + dependencies: + '@vitest/pretty-format': 4.0.12 + tinyrainbow: 3.0.3 + '@xmldom/xmldom@0.7.13': {} '@xmldom/xmldom@0.8.10': {} @@ -5817,6 +6565,8 @@ snapshots: asap@2.0.6: {} + assertion-error@2.0.1: {} + ast-types@0.15.2: dependencies: tslib: 2.8.1 @@ -6050,6 +6800,8 @@ snapshots: caniuse-lite@1.0.30001695: {} + chai@6.2.1: {} + chalk@2.4.2: dependencies: ansi-styles: 3.2.1 @@ -6061,7 +6813,7 @@ snapshots: ansi-styles: 4.3.0 supports-color: 7.2.0 - chardet@0.7.0: {} + chardet@2.1.1: {} charenc@0.0.2: {} @@ -6230,6 +6982,10 @@ snapshots: dependencies: ms: 2.1.3 + debug@4.4.3: + dependencies: + ms: 2.1.3 + deep-extend@0.6.0: {} deepmerge@4.3.1: {} @@ -6318,6 +7074,8 @@ snapshots: dependencies: stackframe: 1.3.4 + es-module-lexer@1.7.0: {} + es5-ext@0.10.64: dependencies: es6-iterator: 2.0.3 @@ -6362,6 +7120,36 @@ snapshots: '@esbuild/win32-arm64': 0.23.1 '@esbuild/win32-ia32': 0.23.1 '@esbuild/win32-x64': 0.23.1 + optional: true + + esbuild@0.25.12: + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.12 + '@esbuild/android-arm': 0.25.12 + '@esbuild/android-arm64': 0.25.12 + '@esbuild/android-x64': 0.25.12 + '@esbuild/darwin-arm64': 0.25.12 + '@esbuild/darwin-x64': 0.25.12 + '@esbuild/freebsd-arm64': 0.25.12 + '@esbuild/freebsd-x64': 0.25.12 + '@esbuild/linux-arm': 0.25.12 + '@esbuild/linux-arm64': 0.25.12 + '@esbuild/linux-ia32': 0.25.12 + '@esbuild/linux-loong64': 0.25.12 + '@esbuild/linux-mips64el': 0.25.12 + '@esbuild/linux-ppc64': 0.25.12 + '@esbuild/linux-riscv64': 0.25.12 + '@esbuild/linux-s390x': 0.25.12 + '@esbuild/linux-x64': 0.25.12 + '@esbuild/netbsd-arm64': 0.25.12 + '@esbuild/netbsd-x64': 0.25.12 + '@esbuild/openbsd-arm64': 0.25.12 + '@esbuild/openbsd-x64': 0.25.12 + '@esbuild/openharmony-arm64': 0.25.12 + '@esbuild/sunos-x64': 0.25.12 + '@esbuild/win32-arm64': 0.25.12 + '@esbuild/win32-ia32': 0.25.12 + '@esbuild/win32-x64': 0.25.12 escalade@3.2.0: {} @@ -6382,6 +7170,10 @@ snapshots: esprima@4.0.1: {} + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.8 + esutils@2.0.3: {} etag@1.8.1: {} @@ -6417,6 +7209,8 @@ snapshots: signal-exit: 3.0.7 strip-final-newline: 2.0.0 + expect-type@1.2.2: {} + expo-asset@11.0.2(expo@52.0.27(@babel/core@7.26.7)(@babel/preset-env@7.26.7(@babel/core@7.26.7))(encoding@0.1.13)(react-native@0.76.6(@babel/core@7.26.7)(@babel/preset-env@7.26.7(@babel/core@7.26.7))(@types/react@18.3.18)(encoding@0.1.13)(react@18.3.1))(react@18.3.1))(react-native@0.76.6(@babel/core@7.26.7)(@babel/preset-env@7.26.7(@babel/core@7.26.7))(@types/react@18.3.18)(encoding@0.1.13)(react@18.3.1))(react@18.3.1): dependencies: '@expo/image-utils': 0.6.4 @@ -6516,12 +7310,6 @@ snapshots: extendable-error@0.1.7: {} - external-editor@3.1.0: - dependencies: - chardet: 0.7.0 - iconv-lite: 0.4.24 - tmp: 0.0.33 - fast-glob@3.3.3: dependencies: '@nodelib/fs.stat': 2.0.5 @@ -6560,6 +7348,10 @@ snapshots: transitivePeerDependencies: - encoding + fdir@6.5.0(picomatch@4.0.3): + optionalDependencies: + picomatch: 4.0.3 + fetch-retry@4.1.1: {} fill-range@7.1.1: @@ -6674,15 +7466,10 @@ snapshots: get-stream@6.0.1: {} - get-symbol-from-current-process-h@1.0.2: {} - get-tsconfig@4.10.0: dependencies: resolve-pkg-maps: 1.0.0 - - get-uv-event-loop-napi-h@1.0.6: - dependencies: - get-symbol-from-current-process-h: 1.0.2 + optional: true getenv@1.0.0: {} @@ -6719,6 +7506,8 @@ snapshots: merge2: 1.4.1 slash: 3.0.0 + globrex@0.1.2: {} + graceful-fs@4.2.11: {} has-flag@3.0.0: {} @@ -6759,18 +7548,18 @@ snapshots: statuses: 2.0.1 toidentifier: 1.0.1 - human-id@1.0.2: {} + human-id@4.1.2: {} human-signals@2.1.0: {} - iconv-lite@0.4.24: + iconv-lite@0.6.3: dependencies: safer-buffer: 2.1.2 + optional: true - iconv-lite@0.6.3: + iconv-lite@0.7.0: dependencies: safer-buffer: 2.1.2 - optional: true ieee754@1.2.1: {} @@ -7108,6 +7897,10 @@ snapshots: dependencies: yallist: 3.1.1 + magic-string@0.30.21: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + make-dir@2.1.0: dependencies: pify: 4.0.1 @@ -7368,10 +8161,9 @@ snapshots: minipass: 3.3.6 yallist: 4.0.0 - minizlib@3.0.1: + minizlib@3.1.0: dependencies: minipass: 7.1.2 - rimraf: 5.0.10 mkdirp@0.5.6: dependencies: @@ -7379,8 +8171,6 @@ snapshots: mkdirp@1.0.4: {} - mkdirp@3.0.1: {} - mri@1.2.0: {} ms@2.0.0: {} @@ -7393,6 +8183,8 @@ snapshots: object-assign: 4.1.1 thenify-all: 1.6.0 + nanoid@3.3.11: {} + nanoid@3.3.8: {} negotiator@0.6.3: {} @@ -7409,7 +8201,7 @@ snapshots: node-abort-controller@3.1.1: {} - node-addon-api@3.2.1: {} + node-addon-api@8.5.0: {} node-dir@0.1.17: dependencies: @@ -7573,12 +8365,16 @@ snapshots: path-type@4.0.0: {} + pathe@2.0.3: {} + picocolors@1.1.1: {} picomatch@2.3.1: {} picomatch@3.0.1: {} + picomatch@4.0.3: {} + pify@4.0.1: {} pirates@4.0.6: {} @@ -7601,6 +8397,12 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 + postcss@8.5.6: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + prettier@2.8.8: {} pretty-bytes@5.6.0: {} @@ -7812,19 +8614,6 @@ snapshots: source-map: 0.6.1 tslib: 2.8.1 - ref-array-di@1.2.2: - dependencies: - array-index: 1.0.0 - debug: 3.2.7 - transitivePeerDependencies: - - supports-color - - ref-struct-di@1.1.1: - dependencies: - debug: 3.2.7 - transitivePeerDependencies: - - supports-color - regenerate-unicode-properties@10.2.0: dependencies: regenerate: 1.4.2 @@ -7870,7 +8659,8 @@ snapshots: resolve-from@5.0.0: {} - resolve-pkg-maps@1.0.0: {} + resolve-pkg-maps@1.0.0: + optional: true resolve-workspace-root@2.0.0: {} @@ -7905,6 +8695,34 @@ snapshots: dependencies: glob: 10.4.5 + rollup@4.53.3: + dependencies: + '@types/estree': 1.0.8 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.53.3 + '@rollup/rollup-android-arm64': 4.53.3 + '@rollup/rollup-darwin-arm64': 4.53.3 + '@rollup/rollup-darwin-x64': 4.53.3 + '@rollup/rollup-freebsd-arm64': 4.53.3 + '@rollup/rollup-freebsd-x64': 4.53.3 + '@rollup/rollup-linux-arm-gnueabihf': 4.53.3 + '@rollup/rollup-linux-arm-musleabihf': 4.53.3 + '@rollup/rollup-linux-arm64-gnu': 4.53.3 + '@rollup/rollup-linux-arm64-musl': 4.53.3 + '@rollup/rollup-linux-loong64-gnu': 4.53.3 + '@rollup/rollup-linux-ppc64-gnu': 4.53.3 + '@rollup/rollup-linux-riscv64-gnu': 4.53.3 + '@rollup/rollup-linux-riscv64-musl': 4.53.3 + '@rollup/rollup-linux-s390x-gnu': 4.53.3 + '@rollup/rollup-linux-x64-gnu': 4.53.3 + '@rollup/rollup-linux-x64-musl': 4.53.3 + '@rollup/rollup-openharmony-arm64': 4.53.3 + '@rollup/rollup-win32-arm64-msvc': 4.53.3 + '@rollup/rollup-win32-ia32-msvc': 4.53.3 + '@rollup/rollup-win32-x64-gnu': 4.53.3 + '@rollup/rollup-win32-x64-msvc': 4.53.3 + fsevents: 2.3.3 + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 @@ -8001,6 +8819,8 @@ snapshots: shell-quote@1.8.2: {} + siginfo@2.0.0: {} + signal-exit@3.0.7: {} signal-exit@4.1.0: {} @@ -8047,6 +8867,8 @@ snapshots: dependencies: escape-string-regexp: 2.0.0 + stackback@0.0.2: {} + stackframe@1.3.4: {} stacktrace-parser@0.1.10: @@ -8057,6 +8879,8 @@ snapshots: statuses@2.0.1: {} + std-env@3.10.0: {} + stream-buffers@2.2.0: {} string-width@4.2.3: @@ -8139,13 +8963,12 @@ snapshots: mkdirp: 1.0.4 yallist: 4.0.0 - tar@7.4.3: + tar@7.5.2: dependencies: '@isaacs/fs-minipass': 4.0.1 chownr: 3.0.0 minipass: 7.1.2 - minizlib: 3.0.1 - mkdirp: 3.0.1 + minizlib: 3.1.0 yallist: 5.0.0 temp-dir@2.0.0: {} @@ -8199,6 +9022,17 @@ snapshots: through@2.3.8: {} + tinybench@2.9.0: {} + + tinyexec@0.3.2: {} + + tinyglobby@0.2.15: + dependencies: + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + + tinyrainbow@3.0.3: {} + tmp@0.0.33: dependencies: os-tmpdir: 1.0.2 @@ -8215,6 +9049,10 @@ snapshots: ts-interface-checker@0.1.13: {} + tsconfck@3.1.6(typescript@5.9.3): + optionalDependencies: + typescript: 5.9.3 + tslib@2.8.1: {} tsx@4.19.2: @@ -8223,6 +9061,7 @@ snapshots: get-tsconfig: 4.10.0 optionalDependencies: fsevents: 2.3.3 + optional: true type-detect@4.0.8: {} @@ -8234,12 +9073,14 @@ snapshots: type@2.7.3: {} - typescript@5.4.5: {} + typescript@5.9.3: {} ua-parser-js@1.0.40: {} undici-types@6.19.8: {} + undici-types@7.16.0: {} + undici@6.21.1: {} unicode-canonical-property-names-ecmascript@2.0.1: {} @@ -8291,6 +9132,70 @@ snapshots: vary@1.1.2: {} + vite-tsconfig-paths@5.1.4(typescript@5.9.3)(vite@7.2.4(@types/node@24.10.1)(lightningcss@1.27.0)(terser@5.37.0)(tsx@4.19.2)): + dependencies: + debug: 4.4.3 + globrex: 0.1.2 + tsconfck: 3.1.6(typescript@5.9.3) + optionalDependencies: + vite: 7.2.4(@types/node@24.10.1)(lightningcss@1.27.0)(terser@5.37.0)(tsx@4.19.2) + transitivePeerDependencies: + - supports-color + - typescript + + vite@7.2.4(@types/node@24.10.1)(lightningcss@1.27.0)(terser@5.37.0)(tsx@4.19.2): + dependencies: + esbuild: 0.25.12 + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + postcss: 8.5.6 + rollup: 4.53.3 + tinyglobby: 0.2.15 + optionalDependencies: + '@types/node': 24.10.1 + fsevents: 2.3.3 + lightningcss: 1.27.0 + terser: 5.37.0 + tsx: 4.19.2 + + vitest@4.0.12(@types/node@24.10.1)(lightningcss@1.27.0)(terser@5.37.0)(tsx@4.19.2): + dependencies: + '@vitest/expect': 4.0.12 + '@vitest/mocker': 4.0.12(vite@7.2.4(@types/node@24.10.1)(lightningcss@1.27.0)(terser@5.37.0)(tsx@4.19.2)) + '@vitest/pretty-format': 4.0.12 + '@vitest/runner': 4.0.12 + '@vitest/snapshot': 4.0.12 + '@vitest/spy': 4.0.12 + '@vitest/utils': 4.0.12 + debug: 4.4.3 + es-module-lexer: 1.7.0 + expect-type: 1.2.2 + magic-string: 0.30.21 + pathe: 2.0.3 + picomatch: 4.0.3 + std-env: 3.10.0 + tinybench: 2.9.0 + tinyexec: 0.3.2 + tinyglobby: 0.2.15 + tinyrainbow: 3.0.3 + vite: 7.2.4(@types/node@24.10.1)(lightningcss@1.27.0)(terser@5.37.0)(tsx@4.19.2) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/node': 24.10.1 + transitivePeerDependencies: + - jiti + - less + - lightningcss + - msw + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + vlq@1.0.1: {} walker@1.0.8: @@ -8328,6 +9233,11 @@ snapshots: dependencies: isexe: 2.0.0 + why-is-node-running@2.3.0: + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 + wonka@6.3.4: {} wrap-ansi@7.0.0: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 753c97b..5936847 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -3,9 +3,8 @@ packages: - "examples/*" catalog: - typescript: ~5.4.5 - tsx: ^4.19.2 + typescript: ~5.9.3 rimraf: ^5.0.5 "@biomejs/biome": 1.9.4 - "@types/node": ^20.12.11 - "@changesets/cli": ^2.27.12 + "@types/node": ^24.10.1 + "@changesets/cli": ^2.29.7 diff --git a/vitest.config.ts b/vitest.config.ts new file mode 100644 index 0000000..3953f18 --- /dev/null +++ b/vitest.config.ts @@ -0,0 +1,10 @@ +import viteTsConfigPaths from 'vite-tsconfig-paths' +import { defineConfig } from 'vitest/config' + +export default defineConfig({ + plugins: [viteTsConfigPaths()], + test: { + watch: false, + setupFiles: ['packages/askar-nodejs/tests/setup.ts'], + }, +})