From 2cdd4ea8e34ff8793feeb524b762b27f77ef6965 Mon Sep 17 00:00:00 2001 From: tomide Date: Wed, 12 Nov 2025 13:30:50 +0000 Subject: [PATCH 1/5] feat(react): export react context for external use --- packages/react-hooks/src/context.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react-hooks/src/context.tsx b/packages/react-hooks/src/context.tsx index cbd5376..1ade332 100644 --- a/packages/react-hooks/src/context.tsx +++ b/packages/react-hooks/src/context.tsx @@ -2,7 +2,7 @@ import { createClient, type SolanaClient, type SolanaClientConfig } from '@solan import type { ReactNode } from 'react'; import { createContext, useContext, useEffect, useMemo } from 'react'; -const SolanaClientContext = createContext(null); +export const SolanaClientContext = createContext(null); type ProviderProps = Readonly<{ children: ReactNode; From f51c2319625b3ac6c41c20cefe90e6d4fc95cb20 Mon Sep 17 00:00:00 2001 From: tomide Date: Wed, 12 Nov 2025 13:34:37 +0000 Subject: [PATCH 2/5] feat(core): return session from connect action --- packages/client-core/src/client/actions.ts | 14 +++++++++++--- packages/client-core/src/types.ts | 2 +- packages/react-hooks/src/hooks.ts | 2 +- packages/react-hooks/src/index.ts | 2 +- 4 files changed, 14 insertions(+), 6 deletions(-) diff --git a/packages/client-core/src/client/actions.ts b/packages/client-core/src/client/actions.ts index edfc612..b606aef 100644 --- a/packages/client-core/src/client/actions.ts +++ b/packages/client-core/src/client/actions.ts @@ -17,7 +17,14 @@ import { import { createLogger, formatError } from '../logging/logger'; import { createSolanaRpcClient } from '../rpc/createSolanaRpcClient'; -import type { ClientActions, ClientState, ClientStore, SolanaClientRuntime, WalletRegistry } from '../types'; +import type { + ClientActions, + ClientState, + ClientStore, + SolanaClientRuntime, + WalletRegistry, + WalletSession, +} from '../types'; import { now } from '../utils'; type MutableRuntime = SolanaClientRuntime; @@ -156,12 +163,12 @@ export function createActions({ connectors, logger: inputLogger, runtime, store * Initiates a wallet connection using a registered connector. * * @param connectorId - Identifier for the desired wallet connector. - * @returns Promise that resolves once the connection attempt has completed. + * @returns Promise that resolves to the wallet session once the connection attempt has completed. */ async function connectWallet( connectorId: string, options: Readonly<{ autoConnect?: boolean }> = {}, - ): Promise { + ): Promise { const connector = connectors.get(connectorId); if (!connector) { throw new Error(`No wallet connector registered for id "${connectorId}".`); @@ -186,6 +193,7 @@ export function createActions({ connectors, logger: inputLogger, runtime, store level: 'info', message: 'wallet connected', }); + return session; } catch (error) { store.setState((state) => ({ ...state, diff --git a/packages/client-core/src/types.ts b/packages/client-core/src/types.ts index 3dea3fa..e28f29a 100644 --- a/packages/client-core/src/types.ts +++ b/packages/client-core/src/types.ts @@ -193,7 +193,7 @@ export type WatchSubscription = Readonly<{ }>; export type ClientActions = Readonly<{ - connectWallet(connectorId: string, options?: Readonly<{ autoConnect?: boolean }>): Promise; + connectWallet(connectorId: string, options?: Readonly<{ autoConnect?: boolean }>): Promise; disconnectWallet(): Promise; fetchAccount(address: Address, commitment?: Commitment): Promise; fetchBalance(address: Address, commitment?: Commitment): Promise; diff --git a/packages/react-hooks/src/hooks.ts b/packages/react-hooks/src/hooks.ts index fd23ef6..4265eed 100644 --- a/packages/react-hooks/src/hooks.ts +++ b/packages/react-hooks/src/hooks.ts @@ -123,7 +123,7 @@ export function useWalletActions() { export function useConnectWallet(): ( connectorId: string, options?: Readonly<{ autoConnect?: boolean }>, -) => Promise { +) => Promise { const client = useSolanaClient(); return useCallback( (connectorId: string, options?: Readonly<{ autoConnect?: boolean }>) => diff --git a/packages/react-hooks/src/index.ts b/packages/react-hooks/src/index.ts index e4fdae9..9b2454f 100644 --- a/packages/react-hooks/src/index.ts +++ b/packages/react-hooks/src/index.ts @@ -1,4 +1,4 @@ -export { SolanaClientProvider, useSolanaClient } from './context'; +export { SolanaClientContext, SolanaClientProvider, useSolanaClient } from './context'; export { useAccount, useBalance, From 6fcb690c19b6c6af77de4fa9d4eb9099a1c150c2 Mon Sep 17 00:00:00 2001 From: tomide Date: Wed, 12 Nov 2025 17:23:12 +0000 Subject: [PATCH 3/5] chore: add circular deps check and break current circular deps --- package.json | 3 +- packages/client-core/package.json | 16 +- .../client-core/src/client/actions.test.ts | 4 +- packages/client-core/src/client/actions.ts | 11 +- .../client-core/src/client/createClient.ts | 3 +- .../src/client/createClientHelpers.ts | 3 +- .../client-core/src/client/watchers.test.ts | 3 +- packages/client-core/src/client/watchers.ts | 2 +- packages/client-core/src/features/sol.ts | 3 +- packages/client-core/src/features/spl.ts | 3 +- .../client-core/src/features/transactions.ts | 4 +- packages/client-core/src/index.ts | 13 +- packages/client-core/src/rpc/types.ts | 7 + .../src/signers/walletTransactionSigner.ts | 3 +- packages/client-core/src/types.ts | 73 +- packages/client-core/src/wallet/registry.ts | 2 +- packages/client-core/src/wallet/standard.ts | 3 +- packages/client-core/src/wallet/types.ts | 64 ++ packages/react-hooks/package.json | 6 +- pnpm-lock.yaml | 927 ++++++++++++++++++ turbo.json | 3 + 21 files changed, 1048 insertions(+), 108 deletions(-) create mode 100644 packages/client-core/src/rpc/types.ts create mode 100644 packages/client-core/src/wallet/types.ts diff --git a/package.json b/package.json index d901eb5..b971ce1 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,8 @@ "lint": "turbo run lint", "test": "turbo run test", "typecheck": "turbo run typecheck", - "prepare": "husky" + "prepare": "husky", + "check:circular-deps": "turbo run check:circular-deps" }, "devDependencies": { "@biomejs/biome": "^2.3.4", diff --git a/packages/client-core/package.json b/packages/client-core/package.json index 387d968..58e0ea7 100644 --- a/packages/client-core/package.json +++ b/packages/client-core/package.json @@ -49,27 +49,29 @@ "lint": "biome check src", "test:typecheck": "tsc --noEmit", "test": "vitest run --config ./vitest.config.ts", - "typecheck": "pnpm test:typecheck" + "typecheck": "pnpm test:typecheck", + "check:circular-deps": "madge --circular $(find ./src -name '*.ts' -o -name '*.tsx')" }, "author": "Solana Labs Maintainers ", "license": "MIT", "dependencies": { + "@solana-program/compute-budget": "^0.9.0", + "@solana-program/system": "^0.9.0", + "@solana-program/token": "^0.5.1", "@solana/codecs-strings": "^5.0.0", "@solana/kit": "^5.0.0", - "@solana/transactions": "^5.0.0", "@solana/transaction-confirmation": "^5.0.0", - "@solana-program/system": "^0.9.0", - "@solana-program/compute-budget": "^0.9.0", - "@solana-program/token": "^0.5.1", + "@solana/transactions": "^5.0.0", + "@solana/wallet-standard-features": "^1.3.0", "@wallet-standard/app": "^1.0.1", "@wallet-standard/base": "^1.1.0", "@wallet-standard/errors": "^0.1.1", "@wallet-standard/features": "^1.0.3", - "@solana/wallet-standard-features": "^1.3.0", "zustand": "^5.0.0" }, "devDependencies": { - "@types/node": "^24" + "@types/node": "^24", + "madge": "^8.0.0" }, "peerDependencies": { "typescript": ">=5.3.3" diff --git a/packages/client-core/src/client/actions.test.ts b/packages/client-core/src/client/actions.test.ts index 5f2bc39..ec9aec4 100644 --- a/packages/client-core/src/client/actions.test.ts +++ b/packages/client-core/src/client/actions.test.ts @@ -2,7 +2,9 @@ import type { Address, Lamports, SendableTransaction, Signature, Transaction } f import type { TransactionWithLastValidBlockHeight } from '@solana/transaction-confirmation'; import { beforeEach, describe, expect, it, vi } from 'vitest'; -import type { ClientActions, SolanaClientRuntime, WalletConnector, WalletRegistry } from '../types'; +import type { SolanaClientRuntime } from '../rpc/types'; +import type { ClientActions } from '../types'; +import type { WalletConnector, WalletRegistry } from '../wallet/types'; import { createActions } from './actions'; import { createDefaultClientStore } from './createClientStore'; diff --git a/packages/client-core/src/client/actions.ts b/packages/client-core/src/client/actions.ts index b606aef..1a946dc 100644 --- a/packages/client-core/src/client/actions.ts +++ b/packages/client-core/src/client/actions.ts @@ -17,15 +17,10 @@ import { import { createLogger, formatError } from '../logging/logger'; import { createSolanaRpcClient } from '../rpc/createSolanaRpcClient'; -import type { - ClientActions, - ClientState, - ClientStore, - SolanaClientRuntime, - WalletRegistry, - WalletSession, -} from '../types'; +import type { SolanaClientRuntime } from '../rpc/types'; +import type { ClientActions, ClientState, ClientStore } from '../types'; import { now } from '../utils'; +import type { WalletRegistry, WalletSession } from '../wallet/types'; type MutableRuntime = SolanaClientRuntime; diff --git a/packages/client-core/src/client/createClient.ts b/packages/client-core/src/client/createClient.ts index dcfd89b..d70c979 100644 --- a/packages/client-core/src/client/createClient.ts +++ b/packages/client-core/src/client/createClient.ts @@ -1,6 +1,7 @@ import { createLogger, formatError } from '../logging/logger'; import { createSolanaRpcClient } from '../rpc/createSolanaRpcClient'; -import type { ClientStore, SolanaClient, SolanaClientConfig, SolanaClientRuntime } from '../types'; +import type { SolanaClientRuntime } from '../rpc/types'; +import type { ClientStore, SolanaClient, SolanaClientConfig } from '../types'; import { now } from '../utils'; import { createWalletRegistry } from '../wallet/registry'; import { createActions } from './actions'; diff --git a/packages/client-core/src/client/createClientHelpers.ts b/packages/client-core/src/client/createClientHelpers.ts index db9ddb9..6ba55f2 100644 --- a/packages/client-core/src/client/createClientHelpers.ts +++ b/packages/client-core/src/client/createClientHelpers.ts @@ -3,12 +3,13 @@ import type { Commitment } from '@solana/kit'; import { createSolTransferHelper, type SolTransferHelper } from '../features/sol'; import { createSplTokenHelper, type SplTokenHelper, type SplTokenHelperConfig } from '../features/spl'; import { createTransactionHelper, type TransactionHelper } from '../features/transactions'; +import type { SolanaClientRuntime } from '../rpc/types'; import { type PrepareTransactionMessage, type PrepareTransactionOptions, prepareTransaction as prepareTransactionUtility, } from '../transactions/prepareTransaction'; -import type { ClientHelpers, ClientStore, SolanaClientRuntime } from '../types'; +import type { ClientHelpers, ClientStore } from '../types'; type SplTokenCacheEntry = Readonly<{ baseCommitment?: Commitment; diff --git a/packages/client-core/src/client/watchers.test.ts b/packages/client-core/src/client/watchers.test.ts index de09fcd..a035b68 100644 --- a/packages/client-core/src/client/watchers.test.ts +++ b/packages/client-core/src/client/watchers.test.ts @@ -1,7 +1,8 @@ import type { Address, Signature } from '@solana/kit'; import { beforeEach, describe, expect, it, vi } from 'vitest'; -import type { ClientStore, SolanaClientRuntime } from '../types'; +import type { SolanaClientRuntime } from '../rpc/types'; +import type { ClientStore } from '../types'; import { createDefaultClientStore } from './createClientStore'; import { createWatchers } from './watchers'; diff --git a/packages/client-core/src/client/watchers.ts b/packages/client-core/src/client/watchers.ts index 44dc94a..dea554c 100644 --- a/packages/client-core/src/client/watchers.ts +++ b/packages/client-core/src/client/watchers.ts @@ -1,6 +1,7 @@ import type { Lamports, SolanaRpcSubscriptionsApi } from '@solana/kit'; import { createLogger, formatError } from '../logging/logger'; +import type { SolanaClientRuntime } from '../rpc/types'; import type { AccountCacheEntry, AccountWatcherConfig, @@ -8,7 +9,6 @@ import type { ClientStore, ClientWatchers, SignatureWatcherConfig, - SolanaClientRuntime, SubscriptionStatus, } from '../types'; import { now } from '../utils'; diff --git a/packages/client-core/src/features/sol.ts b/packages/client-core/src/features/sol.ts index 1eb3bea..3984d13 100644 --- a/packages/client-core/src/features/sol.ts +++ b/packages/client-core/src/features/sol.ts @@ -21,8 +21,9 @@ import { import { getTransferSolInstruction } from '@solana-program/system'; import { lamportsMath } from '../numeric/lamports'; +import type { SolanaClientRuntime } from '../rpc/types'; import { createWalletTransactionSigner, isWalletSession, resolveSignerMode } from '../signers/walletTransactionSigner'; -import type { SolanaClientRuntime, WalletSession } from '../types'; +import type { WalletSession } from '../wallet/types'; type BlockhashLifetime = Readonly<{ blockhash: Blockhash; diff --git a/packages/client-core/src/features/spl.ts b/packages/client-core/src/features/spl.ts index d6cca55..551a8a0 100644 --- a/packages/client-core/src/features/spl.ts +++ b/packages/client-core/src/features/spl.ts @@ -28,8 +28,9 @@ import { } from '@solana-program/token'; import { createTokenAmount, type TokenAmountMath } from '../numeric/amounts'; +import type { SolanaClientRuntime } from '../rpc/types'; import { createWalletTransactionSigner, isWalletSession, resolveSignerMode } from '../signers/walletTransactionSigner'; -import type { SolanaClientRuntime, WalletSession } from '../types'; +import type { WalletSession } from '../wallet/types'; import type { SolTransferSendOptions } from './sol'; type BlockhashLifetime = Readonly<{ diff --git a/packages/client-core/src/features/transactions.ts b/packages/client-core/src/features/transactions.ts index 194bfb9..7b3cc2e 100644 --- a/packages/client-core/src/features/transactions.ts +++ b/packages/client-core/src/features/transactions.ts @@ -30,14 +30,14 @@ import { getSetComputeUnitLimitInstruction, getSetComputeUnitPriceInstruction, } from '@solana-program/compute-budget'; - +import type { SolanaClientRuntime } from '../rpc/types'; import { createWalletTransactionSigner, isWalletSession, resolveSignerMode } from '../signers/walletTransactionSigner'; import { type PrepareTransactionMessage, type PrepareTransactionOptions, prepareTransaction as prepareTransactionUtility, } from '../transactions/prepareTransaction'; -import type { SolanaClientRuntime, WalletSession } from '../types'; +import type { WalletSession } from '../wallet/types'; type BlockhashLifetime = Readonly<{ blockhash: Blockhash; diff --git a/packages/client-core/src/index.ts b/packages/client-core/src/index.ts index 00090c0..846c4aa 100644 --- a/packages/client-core/src/index.ts +++ b/packages/client-core/src/index.ts @@ -49,6 +49,7 @@ export { type SimulateTransactionOptions, type SolanaRpcClient, } from './rpc/createSolanaRpcClient'; +export type { SolanaClientRuntime } from './rpc/types'; export { bigintFromJson, bigintToJson, lamportsFromJson, lamportsToJson } from './serialization/json'; export { transactionToBase64, @@ -73,11 +74,6 @@ export type { ClientWatchers, SolanaClient, SolanaClientConfig, - WalletConnector, - WalletConnectorMetadata, - WalletRegistry, - WalletSession, - WalletStatus, } from './types'; export { createWalletRegistry } from './wallet/registry'; export { @@ -85,3 +81,10 @@ export { getWalletStandardConnectors, watchWalletStandardConnectors, } from './wallet/standard'; +export type { + WalletConnector, + WalletConnectorMetadata, + WalletRegistry, + WalletSession, + WalletStatus, +} from './wallet/types'; diff --git a/packages/client-core/src/rpc/types.ts b/packages/client-core/src/rpc/types.ts new file mode 100644 index 0000000..f8d8478 --- /dev/null +++ b/packages/client-core/src/rpc/types.ts @@ -0,0 +1,7 @@ +type SolanaRpcInstance = ReturnType; +type SolanaSubscriptionsInstance = ReturnType; + +export type SolanaClientRuntime = { + rpc: SolanaRpcInstance; + rpcSubscriptions: SolanaSubscriptionsInstance; +}; diff --git a/packages/client-core/src/signers/walletTransactionSigner.ts b/packages/client-core/src/signers/walletTransactionSigner.ts index 037c52a..d9ab56a 100644 --- a/packages/client-core/src/signers/walletTransactionSigner.ts +++ b/packages/client-core/src/signers/walletTransactionSigner.ts @@ -15,8 +15,7 @@ import { type TransactionWithinSizeLimit, type TransactionWithLifetime, } from '@solana/kit'; - -import type { WalletSession } from '../types'; +import type { WalletSession } from '../wallet/types'; type WalletTransactionSignerMode = 'partial' | 'send'; diff --git a/packages/client-core/src/types.ts b/packages/client-core/src/types.ts index e28f29a..3c08d2d 100644 --- a/packages/client-core/src/types.ts +++ b/packages/client-core/src/types.ts @@ -14,73 +14,14 @@ import type { SolTransferHelper } from './features/sol'; import type { SplTokenHelper, SplTokenHelperConfig } from './features/spl'; import type { TransactionHelper } from './features/transactions'; import type { SolanaRpcClient } from './rpc/createSolanaRpcClient'; +import type { SolanaClientRuntime } from './rpc/types'; import type { PrepareTransactionMessage, PrepareTransactionOptions } from './transactions/prepareTransaction'; - -type SolanaRpcInstance = ReturnType; -type SolanaSubscriptionsInstance = ReturnType; +import type { WalletConnector, WalletRegistry, WalletSession, WalletStatus } from './wallet/types'; export type LogLevel = 'debug' | 'error' | 'info' | 'warn'; export type ClientLogger = (event: { data?: Record; level: LogLevel; message: string }) => void; -export type WalletConnectorMetadata = Readonly<{ - canAutoConnect?: boolean; - icon?: string; - id: string; - name: string; -}>; - -export type WalletAccount = Readonly<{ - address: Address; - label?: string; - publicKey: Uint8Array; -}>; - -export type WalletSession = Readonly<{ - account: WalletAccount; - connector: WalletConnectorMetadata; - disconnect(): Promise; - sendTransaction?( - transaction: SendableTransaction & Transaction, - config?: Readonly<{ commitment?: Commitment }>, - ): Promise; - signMessage?(message: Uint8Array): Promise; - signTransaction?(transaction: SendableTransaction & Transaction): Promise; -}>; - -export type WalletConnector = WalletConnectorMetadata & { - connect(opts?: Readonly<{ autoConnect?: boolean }>): Promise; - disconnect(): Promise; - isSupported(): boolean; -}; - -type WalletStatusConnected = Readonly<{ - connectorId: string; - session: WalletSession; - status: 'connected'; -}>; - -type WalletStatusConnecting = Readonly<{ - connectorId: string; - status: 'connecting'; -}>; - -type WalletStatusDisconnected = Readonly<{ - status: 'disconnected'; -}>; - -type WalletStatusError = Readonly<{ - connectorId?: string; - error: unknown; - status: 'error'; -}>; - -export type WalletStatus = - | WalletStatusConnected - | WalletStatusConnecting - | WalletStatusDisconnected - | WalletStatusError; - type ClusterStatusConnecting = Readonly<{ status: 'connecting' }>; type ClusterStatusError = Readonly<{ @@ -167,11 +108,6 @@ export type SolanaClientConfig = Readonly<{ websocketEndpoint?: ClusterUrl; }>; -export type SolanaClientRuntime = { - rpc: SolanaRpcInstance; - rpcSubscriptions: SolanaSubscriptionsInstance; -}; - export type BalanceWatcherConfig = Readonly<{ address: Address; commitment?: Commitment; @@ -223,11 +159,6 @@ export type ClientHelpers = Readonly<{ ): Promise; }>; -export type WalletRegistry = Readonly<{ - all: readonly WalletConnector[]; - get(id: string): WalletConnector | undefined; -}>; - export type SolanaClient = Readonly<{ actions: ClientActions; config: SolanaClientConfig; diff --git a/packages/client-core/src/wallet/registry.ts b/packages/client-core/src/wallet/registry.ts index 5be15c9..7de5b0c 100644 --- a/packages/client-core/src/wallet/registry.ts +++ b/packages/client-core/src/wallet/registry.ts @@ -1,4 +1,4 @@ -import type { WalletConnector, WalletRegistry } from '../types'; +import type { WalletConnector, WalletRegistry } from './types'; /** * Creates an in-memory wallet registry from the provided connectors. diff --git a/packages/client-core/src/wallet/standard.ts b/packages/client-core/src/wallet/standard.ts index 773a21e..e648325 100644 --- a/packages/client-core/src/wallet/standard.ts +++ b/packages/client-core/src/wallet/standard.ts @@ -16,8 +16,7 @@ import { getWallets } from '@wallet-standard/app'; import type { IdentifierString, Wallet, WalletAccount as WalletStandardAccount } from '@wallet-standard/base'; import type { StandardConnectFeature, StandardDisconnectFeature } from '@wallet-standard/features'; import { StandardConnect, StandardDisconnect } from '@wallet-standard/features'; - -import type { WalletAccount, WalletConnector, WalletConnectorMetadata, WalletSession } from '../types'; +import type { WalletAccount, WalletConnector, WalletConnectorMetadata, WalletSession } from './types'; export type WalletStandardConnectorMetadata = Readonly<{ canAutoConnect?: boolean; diff --git a/packages/client-core/src/wallet/types.ts b/packages/client-core/src/wallet/types.ts new file mode 100644 index 0000000..9ddc220 --- /dev/null +++ b/packages/client-core/src/wallet/types.ts @@ -0,0 +1,64 @@ +import type { Address, Commitment, SendableTransaction, Signature, Transaction } from '@solana/kit'; + +export type WalletConnectorMetadata = Readonly<{ + canAutoConnect?: boolean; + icon?: string; + id: string; + name: string; +}>; + +export type WalletAccount = Readonly<{ + address: Address; + label?: string; + publicKey: Uint8Array; +}>; + +export type WalletSession = Readonly<{ + account: WalletAccount; + connector: WalletConnectorMetadata; + disconnect(): Promise; + sendTransaction?( + transaction: SendableTransaction & Transaction, + config?: Readonly<{ commitment?: Commitment }>, + ): Promise; + signMessage?(message: Uint8Array): Promise; + signTransaction?(transaction: SendableTransaction & Transaction): Promise; +}>; + +export type WalletConnector = WalletConnectorMetadata & { + connect(opts?: Readonly<{ autoConnect?: boolean }>): Promise; + disconnect(): Promise; + isSupported(): boolean; +}; + +type WalletStatusConnected = Readonly<{ + connectorId: string; + session: WalletSession; + status: 'connected'; +}>; + +type WalletStatusConnecting = Readonly<{ + connectorId: string; + status: 'connecting'; +}>; + +type WalletStatusDisconnected = Readonly<{ + status: 'disconnected'; +}>; + +type WalletStatusError = Readonly<{ + connectorId?: string; + error: unknown; + status: 'error'; +}>; + +export type WalletStatus = + | WalletStatusConnected + | WalletStatusConnecting + | WalletStatusDisconnected + | WalletStatusError; + +export type WalletRegistry = Readonly<{ + all: readonly WalletConnector[]; + get(id: string): WalletConnector | undefined; +}>; diff --git a/packages/react-hooks/package.json b/packages/react-hooks/package.json index 0275a0b..2680244 100644 --- a/packages/react-hooks/package.json +++ b/packages/react-hooks/package.json @@ -49,7 +49,8 @@ "lint": "biome check src", "test:typecheck": "tsc --noEmit", "test": "vitest run --config ../../vitest.config.ts", - "typecheck": "pnpm test:typecheck" + "typecheck": "pnpm test:typecheck", + "check:circular-deps": "madge --circular $(find ./src -name '*.ts' -o -name '*.tsx')" }, "author": "Solana Labs Maintainers ", "license": "MIT", @@ -74,7 +75,8 @@ }, "devDependencies": { "@types/react": "^19", - "react": "^19.0.0" + "react": "^19.0.0", + "madge": "^8.0.0" }, "peerDependencies": { "react": ">=18" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9b53e29..0e0ff07 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -154,6 +154,9 @@ importers: '@types/node': specifier: ^24 version: 24.10.0 + madge: + specifier: ^8.0.0 + version: 8.0.0(typescript@5.9.3) packages/react-hooks: dependencies: @@ -212,6 +215,9 @@ importers: '@types/react': specifier: ^19 version: 19.2.2 + madge: + specifier: ^8.0.0 + version: 8.0.0(typescript@5.9.3) react: specifier: ^19.0.0 version: 19.2.0 @@ -338,6 +344,10 @@ packages: resolution: {integrity: sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==} engines: {node: '>=18'} + '@dependents/detective-less@5.0.1': + resolution: {integrity: sha512-Y6+WUMsTFWE5jb20IFP4YGa5IrGY/+a/FbOSjDF/wz9gepU2hwCYSXRHP/vPwBvwcY3SVMASt4yXxbXNXigmZQ==} + engines: {node: '>=18'} + '@esbuild/aix-ppc64@0.25.12': resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} engines: {node: '>=18'} @@ -1009,6 +1019,22 @@ packages: peerDependencies: '@testing-library/dom': '>=7.21.4' + '@ts-graphviz/adapter@2.0.6': + resolution: {integrity: sha512-kJ10lIMSWMJkLkkCG5gt927SnGZcBuG0s0HHswGzcHTgvtUe7yk5/3zTEr0bafzsodsOq5Gi6FhQeV775nC35Q==} + engines: {node: '>=18'} + + '@ts-graphviz/ast@2.0.7': + resolution: {integrity: sha512-e6+2qtNV99UT6DJSoLbHfkzfyqY84aIuoV8Xlb9+hZAjgpum8iVHprGeAMQ4rF6sKUAxrmY8rfF/vgAwoPc3gw==} + engines: {node: '>=18'} + + '@ts-graphviz/common@2.1.5': + resolution: {integrity: sha512-S6/9+T6x8j6cr/gNhp+U2olwo1n0jKj/682QVqsh7yXWV6ednHYqxFw0ZsY3LyzT0N8jaZ6jQY9YD99le3cmvg==} + engines: {node: '>=18'} + + '@ts-graphviz/core@2.0.7': + resolution: {integrity: sha512-w071DSzP94YfN6XiWhOxnLpYT3uqtxJBDYdh6Jdjzt+Ce6DNspJsPQgpC7rbts/B8tEkq0LHoYuIF/O5Jh5rPg==} + engines: {node: '>=18'} + '@types/aria-query@5.0.4': resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} @@ -1032,6 +1058,32 @@ packages: '@types/react@19.2.2': resolution: {integrity: sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA==} + '@typescript-eslint/project-service@8.46.4': + resolution: {integrity: sha512-nPiRSKuvtTN+no/2N1kt2tUh/HoFzeEgOm9fQ6XQk4/ApGqjx0zFIIaLJ6wooR1HIoozvj2j6vTi/1fgAz7UYQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/tsconfig-utils@8.46.4': + resolution: {integrity: sha512-+/XqaZPIAk6Cjg7NWgSGe27X4zMGqrFqZ8atJsX3CWxH/jACqWnrWI68h7nHQld0y+k9eTTjb9r+KU4twLoo9A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/types@8.46.4': + resolution: {integrity: sha512-USjyxm3gQEePdUwJBFjjGNG18xY9A2grDVGuk7/9AkjIF1L+ZrVnwR5VAU5JXtUnBL/Nwt3H31KlRDaksnM7/w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@8.46.4': + resolution: {integrity: sha512-7oV2qEOr1d4NWNmpXLR35LvCfOkTNymY9oyW+lUHkmCno7aOmIf/hMaydnJBUTBMRCOGZh8YjkFOc8dadEoNGA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/visitor-keys@8.46.4': + resolution: {integrity: sha512-/++5CYLQqsO9HFGLI7APrxBJYo+5OCMpViuhV8q5/Qa3o5mMrF//eQHks+PXcsAVaLdn817fMuS7zqoXNNZGaw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@vitejs/plugin-react-swc@4.2.0': resolution: {integrity: sha512-/tesahXD1qpkGC6FzMoFOJj0RyZdw9xLELOL+6jbElwmWfwOnIVy+IfpY+o9JfD9PKaR/Eyb6DNrvbXpuvA+8Q==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1076,6 +1128,21 @@ packages: '@vitest/utils@4.0.7': resolution: {integrity: sha512-HNrg9CM/Z4ZWB6RuExhuC6FPmLipiShKVMnT9JlQvfhwR47JatWLChA6mtZqVHqypE6p/z6ofcjbyWpM7YLxPQ==} + '@vue/compiler-core@3.5.24': + resolution: {integrity: sha512-eDl5H57AOpNakGNAkFDH+y7kTqrQpJkZFXhWZQGyx/5Wh7B1uQYvcWkvZi11BDhscPgj8N7XV3oRwiPnx1Vrig==} + + '@vue/compiler-dom@3.5.24': + resolution: {integrity: sha512-1QHGAvs53gXkWdd3ZMGYuvQFXHW4ksKWPG8HP8/2BscrbZ0brw183q2oNWjMrSWImYLHxHrx1ItBQr50I/q2zw==} + + '@vue/compiler-sfc@3.5.24': + resolution: {integrity: sha512-8EG5YPRgmTB+YxYBM3VXy8zHD9SWHUJLIGPhDovo3Z8VOgvP+O7UP5vl0J4BBPWYD9vxtBabzW1EuEZ+Cqs14g==} + + '@vue/compiler-ssr@3.5.24': + resolution: {integrity: sha512-trOvMWNBMQ/odMRHW7Ae1CdfYx+7MuiQu62Jtu36gMLXcaoqKvAyh+P73sYG9ll+6jLB6QPovqoKGGZROzkFFg==} + + '@vue/shared@3.5.24': + resolution: {integrity: sha512-9cwHL2EsJBdi8NY22pngYYWzkTDhld6fAD6jlaeloNGciNSJL6bLpbxVgXl96X00Jtc6YWQv96YA/0sxex/k1A==} + '@wallet-standard/app@1.1.0': resolution: {integrity: sha512-3CijvrO9utx598kjr45hTbbeeykQrQfKmSnxeWOgU25TOEpvcipD/bYDQWIqUv1Oc6KK4YStokSMu/FBNecGUQ==} engines: {node: '>=16'} @@ -1149,6 +1216,9 @@ packages: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} + app-module-path@2.2.0: + resolution: {integrity: sha512-gkco+qxENJV+8vFcDiiFhuoSvRXb2a/QPqpSoWhVz829VNJfOTnELbBmPmNKFxf3xdNnw4DWCkzkDaavcX/1YQ==} + arg@5.0.2: resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} @@ -1163,6 +1233,10 @@ packages: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} + ast-module-types@6.0.1: + resolution: {integrity: sha512-WHw67kLXYbZuHTmcdbIrVArCq5wxo6NEuj3hiYAWr8mwJeC+C2mMCIBIWCiDoCye/OF/xelc+teJ1ERoWmnEIA==} + engines: {node: '>=18'} + ast-v8-to-istanbul@0.3.8: resolution: {integrity: sha512-szgSZqUxI5T8mLKvS7WTjF9is+MVbOeLADU73IseOcrqhxr/VAvy6wfoVE39KnKzA7JRhjF5eUagNlHwvZPlKQ==} @@ -1182,6 +1256,9 @@ packages: base-x@5.0.1: resolution: {integrity: sha512-M7uio8Zt++eg3jPj+rHMfCC+IuygQHHCOU+IYsVtik6FWjuYpVt/+MRKcgsAMHh8mMFAwnB+Bs+mTrFiXjMzKg==} + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + baseline-browser-mapping@2.8.25: resolution: {integrity: sha512-2NovHVesVF5TXefsGX1yzx1xgr7+m9JQenvz6FQY3qd+YXkKkYiv+vTCc7OriP9mcDZpTC5mAOYN4ocd29+erA==} hasBin: true @@ -1190,6 +1267,12 @@ packages: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} + bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + + brace-expansion@1.1.12: + resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} + brace-expansion@2.0.2: resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} @@ -1205,6 +1288,9 @@ packages: bs58@6.0.0: resolution: {integrity: sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw==} + buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + bundle-require@5.1.0: resolution: {integrity: sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -1230,6 +1316,10 @@ packages: resolution: {integrity: sha512-aUTnJc/JipRzJrNADXVvpVqi6CO0dn3nx4EVPxijri+fj3LUUDyZQOgVeW54Ob3Y1Xh9Iz8f+CgaCl8v0mn9bA==} engines: {node: '>=18'} + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + chalk@5.6.2: resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} @@ -1245,6 +1335,18 @@ packages: class-variance-authority@0.7.1: resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} + cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + + cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} + + clone@1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} + clsx@2.1.1: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} @@ -1260,6 +1362,10 @@ packages: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} + commander@12.1.0: + resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} + engines: {node: '>=18'} + commander@13.1.0: resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} engines: {node: '>=18'} @@ -1272,6 +1378,16 @@ packages: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} + commander@7.2.0: + resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} + engines: {node: '>= 10'} + + commondir@1.0.1: + resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + confbox@0.1.8: resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} @@ -1314,14 +1430,69 @@ packages: decimal.js@10.6.0: resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==} + deep-extend@0.6.0: + resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} + engines: {node: '>=4.0.0'} + + defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} + dependency-tree@11.2.0: + resolution: {integrity: sha512-+C1H3mXhcvMCeu5i2Jpg9dc0N29TWTuT6vJD7mHLAfVmAbo9zW8NlkvQ1tYd3PDMab0IRQM0ccoyX68EZtx9xw==} + engines: {node: '>=18'} + hasBin: true + dequal@2.0.3: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} + detective-amd@6.0.1: + resolution: {integrity: sha512-TtyZ3OhwUoEEIhTFoc1C9IyJIud3y+xYkSRjmvCt65+ycQuc3VcBrPRTMWoO/AnuCyOB8T5gky+xf7Igxtjd3g==} + engines: {node: '>=18'} + hasBin: true + + detective-cjs@6.0.1: + resolution: {integrity: sha512-tLTQsWvd2WMcmn/60T2inEJNhJoi7a//PQ7DwRKEj1yEeiQs4mrONgsUtEJKnZmrGWBBmE0kJ1vqOG/NAxwaJw==} + engines: {node: '>=18'} + + detective-es6@5.0.1: + resolution: {integrity: sha512-XusTPuewnSUdoxRSx8OOI6xIA/uld/wMQwYsouvFN2LAg7HgP06NF1lHRV3x6BZxyL2Kkoih4ewcq8hcbGtwew==} + engines: {node: '>=18'} + + detective-postcss@7.0.1: + resolution: {integrity: sha512-bEOVpHU9picRZux5XnwGsmCN4+8oZo7vSW0O0/Enq/TO5R2pIAP2279NsszpJR7ocnQt4WXU0+nnh/0JuK4KHQ==} + engines: {node: ^14.0.0 || >=16.0.0} + peerDependencies: + postcss: ^8.4.47 + + detective-sass@6.0.1: + resolution: {integrity: sha512-jSGPO8QDy7K7pztUmGC6aiHkexBQT4GIH+mBAL9ZyBmnUIOFbkfZnO8wPRRJFP/QP83irObgsZHCoDHZ173tRw==} + engines: {node: '>=18'} + + detective-scss@5.0.1: + resolution: {integrity: sha512-MAyPYRgS6DCiS6n6AoSBJXLGVOydsr9huwXORUlJ37K3YLyiN0vYHpzs3AdJOgHobBfispokoqrEon9rbmKacg==} + engines: {node: '>=18'} + + detective-stylus@5.0.1: + resolution: {integrity: sha512-Dgn0bUqdGbE3oZJ+WCKf8Dmu7VWLcmRJGc6RCzBgG31DLIyai9WAoEhYRgIHpt/BCRMrnXLbGWGPQuBUrnF0TA==} + engines: {node: '>=18'} + + detective-typescript@14.0.0: + resolution: {integrity: sha512-pgN43/80MmWVSEi5LUuiVvO/0a9ss5V7fwVfrJ4QzAQRd3cwqU1SfWGXJFcNKUqoD5cS+uIovhw5t/0rSeC5Mw==} + engines: {node: '>=18'} + peerDependencies: + typescript: ^5.4.4 + + detective-vue2@2.2.0: + resolution: {integrity: sha512-sVg/t6O2z1zna8a/UIV6xL5KUa2cMTQbdTIIvqNM0NIPswp52fe43Nwmbahzj3ww4D844u/vC2PYfiGLvD3zFA==} + engines: {node: '>=18'} + peerDependencies: + typescript: ^5.4.4 + didyoumean@1.2.2: resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} @@ -1350,6 +1521,14 @@ packages: emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + enhanced-resolve@5.18.3: + resolution: {integrity: sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==} + engines: {node: '>=10.13.0'} + + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + entities@6.0.1: resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} engines: {node: '>=0.12'} @@ -1382,9 +1561,34 @@ packages: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} + escodegen@2.1.0: + resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} + engines: {node: '>=6.0'} + hasBin: true + + eslint-visitor-keys@4.2.1: + resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + 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'} + expect-type@1.2.2: resolution: {integrity: sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==} engines: {node: '>=12.0.0'} @@ -1408,6 +1612,11 @@ packages: picomatch: optional: true + filing-cabinet@5.0.3: + resolution: {integrity: sha512-PlPcMwVWg60NQkhvfoxZs4wEHjhlOO/y7OAm4sKM60o1Z9nttRY4mcdQxp/iZ+kg/Vv6Hw1OAaTbYVM9DA9pYg==} + engines: {node: '>=18'} + hasBin: true + fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} @@ -1426,6 +1635,9 @@ packages: fraction.js@4.3.7: resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -1434,10 +1646,17 @@ packages: function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + get-amd-module-type@6.0.1: + resolution: {integrity: sha512-MtjsmYiCXcYDDrGqtNbeIYdAl85n+5mSv2r3FbzER/YV3ZILw4HNNIw34HuV5pyl0jzs6GFYU1VHVEefhgcNHQ==} + engines: {node: '>=18'} + get-intrinsic@1.3.0: resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} engines: {node: '>= 0.4'} + get-own-enumerable-property-symbols@3.0.2: + resolution: {integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==} + get-proto@1.0.1: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} @@ -1454,10 +1673,22 @@ packages: resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} hasBin: true + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + + gonzales-pe@4.3.0: + resolution: {integrity: sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==} + engines: {node: '>=0.6.0'} + hasBin: true + gopd@1.2.0: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} @@ -1498,10 +1729,23 @@ packages: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + indent-string@4.0.0: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} engines: {node: '>=8'} + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + is-binary-path@2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} @@ -1522,13 +1766,36 @@ packages: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} + is-interactive@1.0.0: + resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} + engines: {node: '>=8'} + is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} + is-obj@1.0.1: + resolution: {integrity: sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==} + engines: {node: '>=0.10.0'} + is-potential-custom-element-name@1.0.1: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} + is-regexp@1.0.0: + resolution: {integrity: sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==} + engines: {node: '>=0.10.0'} + + is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + + is-url-superb@4.0.0: + resolution: {integrity: sha512-GI+WjezhPPcbM+tqE9LnmsY5qqjwHzTvjJ36wxYX5ujNXefSUJ/T17r5bqDV8yLhcgB59KTPNOc9O9cmHTPWsA==} + engines: {node: '>=10'} + + is-url@1.2.4: + resolution: {integrity: sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==} + isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} @@ -1574,6 +1841,11 @@ packages: canvas: optional: true + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + lilconfig@3.1.3: resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} engines: {node: '>=14'} @@ -1588,6 +1860,10 @@ packages: lodash.sortby@4.7.0: resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} + log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} @@ -1595,6 +1871,16 @@ packages: resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} hasBin: true + madge@8.0.0: + resolution: {integrity: sha512-9sSsi3TBPhmkTCIpVQF0SPiChj1L7Rq9kU2KDG1o6v2XH9cCw086MopjVCD+vuoL5v8S77DTbVopTO8OUiQpIw==} + engines: {node: '>=18'} + hasBin: true + peerDependencies: + typescript: ^5.4.4 + peerDependenciesMeta: + typescript: + optional: true + magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} @@ -1625,14 +1911,24 @@ packages: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + min-indent@1.0.1: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + minimatch@9.0.5: resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + minipass@7.1.2: resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} @@ -1640,6 +1936,16 @@ packages: mlly@1.8.0: resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==} + module-definition@6.0.1: + resolution: {integrity: sha512-FeVc50FTfVVQnolk/WQT8MX+2WVcDnTGiq6Wo+/+lJ2ET1bRVi3HG3YlJUfqagNMc/kUlFSoR96AJkxGpKz13g==} + engines: {node: '>=18'} + hasBin: true + + module-lookup-amd@9.0.5: + resolution: {integrity: sha512-Rs5FVpVcBYRHPLuhHOjgbRhosaQYLtEo3JIeDIbmNo7mSssi1CTzwMh8v36gAzpbzLGXI9wB/yHh+5+3fY1QVw==} + engines: {node: '>=18'} + hasBin: true + ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -1654,6 +1960,10 @@ packages: node-releases@2.0.27: resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==} + node-source-walk@7.0.1: + resolution: {integrity: sha512-3VW/8JpPqPvnJvseXowjZcirPisssnBuDikk6JIZ8jQzF7KJQX52iPFX4RYYxLycYH7IbMRSPUOga/esVjy5Yg==} + engines: {node: '>=18'} + normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} @@ -1673,12 +1983,31 @@ packages: resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} engines: {node: '>= 6'} + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + + ora@5.4.1: + resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} + engines: {node: '>=10'} + package-json-from-dist@1.0.1: resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + parse-ms@2.1.0: + resolution: {integrity: sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==} + engines: {node: '>=6'} + parse5@7.3.0: resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} @@ -1715,6 +2044,10 @@ packages: pkg-types@1.3.1: resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} + pluralize@8.0.0: + resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} + engines: {node: '>=4'} + postcss-import@15.1.0: resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} engines: {node: '>=14.0.0'} @@ -1758,14 +2091,29 @@ packages: postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + postcss-values-parser@6.0.2: + resolution: {integrity: sha512-YLJpK0N1brcNJrs9WatuJFtHaV9q5aAOj+S4DI5S7jgHlRfm0PIbDCAFRYMQD5SHq7Fy6xsDhyutgS0QOAs0qw==} + engines: {node: '>=10'} + peerDependencies: + postcss: ^8.2.9 + postcss@8.5.6: resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} engines: {node: ^10 || ^12 || >=14} + precinct@12.2.0: + resolution: {integrity: sha512-NFBMuwIfaJ4SocE9YXPU/n4AcNSoFMVFjP72nvl3cx69j/ke61/hPOWFREVxLkFhhEGnA8ZuVfTqJBa+PK3b5w==} + engines: {node: '>=18'} + hasBin: true + pretty-format@27.5.1: resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + pretty-ms@7.0.1: + resolution: {integrity: sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==} + engines: {node: '>=10'} + psl@1.15.0: resolution: {integrity: sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==} @@ -1779,6 +2127,13 @@ packages: queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + quote-unquote@1.0.0: + resolution: {integrity: sha512-twwRO/ilhlG/FIgYeKGFqyHhoEhqgnKVkcmqMKi2r524gz3ZbDTcyFt38E9xjJI2vT+KbRNHVbnJ/e0I25Azwg==} + + rc@1.2.8: + resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} + hasBin: true + react-dom@19.2.0: resolution: {integrity: sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==} peerDependencies: @@ -1794,6 +2149,10 @@ packages: read-cache@1.0.0: resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} @@ -1806,9 +2165,22 @@ packages: resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} engines: {node: '>=8'} + requirejs-config-file@4.0.0: + resolution: {integrity: sha512-jnIre8cbWOyvr8a5F2KuqBnY+SDA4NXr/hzEZJG79Mxm2WiFQz2dzhC8ibtPJS7zkmBEl1mxSwp5HhC1W4qpxw==} + engines: {node: '>=10.13.0'} + + requirejs@2.3.7: + resolution: {integrity: sha512-DouTG8T1WanGok6Qjg2SXuCMzszOo0eHeH9hDZ5Y4x8Je+9JB38HdTLT4/VA8OaUhBa0JPVHJ0pyBkM1z+pDsw==} + engines: {node: '>=0.4.0'} + hasBin: true + requires-port@1.0.0: resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + resolve-dependency-path@4.0.1: + resolution: {integrity: sha512-YQftIIC4vzO9UMhO/sCgXukNyiwVRCVaxiWskCBy7Zpqkplm8kTAISZ8O1MoKW1ca6xzgLUBjZTcDgypXvXxiQ==} + engines: {node: '>=18'} + resolve-from@5.0.0: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} @@ -1818,6 +2190,10 @@ packages: engines: {node: '>= 0.4'} hasBin: true + restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + reusify@1.1.0: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} @@ -1836,9 +2212,17 @@ packages: run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + sass-lookup@6.1.0: + resolution: {integrity: sha512-Zx+lVyoWqXZxHuYWlTA17Z5sczJ6braNT2C7rmClw+c4E7r/n911Zwss3h1uHI9reR5AgHZyNHF7c2+VIp5AUA==} + engines: {node: '>=18'} + hasBin: true + saxes@6.0.0: resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} engines: {node: '>=v12.22.7'} @@ -1862,6 +2246,9 @@ packages: siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + signal-exit@4.1.0: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} @@ -1870,6 +2257,10 @@ packages: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + source-map@0.8.0-beta.0: resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} engines: {node: '>= 8'} @@ -1881,6 +2272,9 @@ packages: std-env@3.10.0: resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} + stream-to-array@2.3.0: + resolution: {integrity: sha512-UsZtOYEn4tWU2RGLOXr/o/xjRBftZRlG3dEWoaHr8j4GuypJ3isitGbVyjQKAuMu+xbiop8q224TjiZWc4XTZA==} + string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} @@ -1889,6 +2283,13 @@ packages: resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} engines: {node: '>=12'} + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + + stringify-object@3.3.0: + resolution: {integrity: sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==} + engines: {node: '>=4'} + strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -1897,10 +2298,23 @@ packages: resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==} engines: {node: '>=12'} + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + strip-indent@3.0.0: resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} engines: {node: '>=8'} + strip-json-comments@2.0.1: + resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} + engines: {node: '>=0.10.0'} + + stylus-lookup@6.1.0: + resolution: {integrity: sha512-5QSwgxAzXPMN+yugy61C60PhoANdItfdjSEZR8siFwz7yL9jTmV0UBKDCfn3K8GkGB4g0Y9py7vTCX8rFu4/pQ==} + engines: {node: '>=18'} + hasBin: true + sucrase@3.35.0: resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} engines: {node: '>=16 || 14 >=14.17'} @@ -1935,6 +2349,10 @@ packages: engines: {node: '>=14.0.0'} hasBin: true + tapable@2.3.0: + resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} + engines: {node: '>=6'} + thenify-all@1.6.0: resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} engines: {node: '>=0.8'} @@ -1975,9 +2393,23 @@ packages: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true + ts-api-utils@2.1.0: + resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' + + ts-graphviz@2.1.6: + resolution: {integrity: sha512-XyLVuhBVvdJTJr2FJJV2L1pc4MwSjMhcunRVgDE9k4wbb2ee7ORYnPewxMWUav12vxyfUM686MSGsqnVRIInuw==} + engines: {node: '>=18'} + ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + tsconfig-paths@4.2.0: + resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} + engines: {node: '>=6'} + tsup@8.5.0: resolution: {integrity: sha512-VmBp77lWNQq6PfuMqCHD3xWl22vEoWsKajkF8t+yMBawlUS8JzEI+vOVMeuNZIuMML8qXRizFKi9oD5glKQVcQ==} engines: {node: '>=18'} @@ -2141,6 +2573,13 @@ packages: resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} engines: {node: '>=18'} + walkdir@0.4.1: + resolution: {integrity: sha512-3eBwRyEln6E1MSzcxcVpQIhRG8Q1jLvEqRmCZqS3dsfXEDR/AhOF4d+jHg1qvDCpYaVRZjENPQyrVxAkQqxPgQ==} + engines: {node: '>=6.0.0'} + + wcwidth@1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + webidl-conversions@4.0.2: resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} @@ -2181,6 +2620,9 @@ packages: resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} engines: {node: '>=12'} + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + ws@8.18.3: resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==} engines: {node: '>=10.0.0'} @@ -2310,6 +2752,11 @@ snapshots: '@csstools/css-tokenizer@3.0.4': {} + '@dependents/detective-less@5.0.1': + dependencies: + gonzales-pe: 4.3.0 + node-source-walk: 7.0.1 + '@esbuild/aix-ppc64@0.25.12': optional: true @@ -2976,6 +3423,21 @@ snapshots: dependencies: '@testing-library/dom': 10.4.1 + '@ts-graphviz/adapter@2.0.6': + dependencies: + '@ts-graphviz/common': 2.1.5 + + '@ts-graphviz/ast@2.0.7': + dependencies: + '@ts-graphviz/common': 2.1.5 + + '@ts-graphviz/common@2.1.5': {} + + '@ts-graphviz/core@2.0.7': + dependencies: + '@ts-graphviz/ast': 2.0.7 + '@ts-graphviz/common': 2.1.5 + '@types/aria-query@5.0.4': {} '@types/chai@5.2.3': @@ -2999,6 +3461,42 @@ snapshots: dependencies: csstype: 3.1.3 + '@typescript-eslint/project-service@8.46.4(typescript@5.9.3)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.46.4(typescript@5.9.3) + '@typescript-eslint/types': 8.46.4 + debug: 4.4.3 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/tsconfig-utils@8.46.4(typescript@5.9.3)': + dependencies: + typescript: 5.9.3 + + '@typescript-eslint/types@8.46.4': {} + + '@typescript-eslint/typescript-estree@8.46.4(typescript@5.9.3)': + dependencies: + '@typescript-eslint/project-service': 8.46.4(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.46.4(typescript@5.9.3) + '@typescript-eslint/types': 8.46.4 + '@typescript-eslint/visitor-keys': 8.46.4 + debug: 4.4.3 + fast-glob: 3.3.3 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.7.3 + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/visitor-keys@8.46.4': + dependencies: + '@typescript-eslint/types': 8.46.4 + eslint-visitor-keys: 4.2.1 + '@vitejs/plugin-react-swc@4.2.0(vite@7.1.12(@types/node@24.10.0)(jiti@1.21.7))': dependencies: '@rolldown/pluginutils': 1.0.0-beta.43 @@ -3063,6 +3561,38 @@ snapshots: '@vitest/pretty-format': 4.0.7 tinyrainbow: 3.0.3 + '@vue/compiler-core@3.5.24': + dependencies: + '@babel/parser': 7.28.5 + '@vue/shared': 3.5.24 + entities: 4.5.0 + estree-walker: 2.0.2 + source-map-js: 1.2.1 + + '@vue/compiler-dom@3.5.24': + dependencies: + '@vue/compiler-core': 3.5.24 + '@vue/shared': 3.5.24 + + '@vue/compiler-sfc@3.5.24': + dependencies: + '@babel/parser': 7.28.5 + '@vue/compiler-core': 3.5.24 + '@vue/compiler-dom': 3.5.24 + '@vue/compiler-ssr': 3.5.24 + '@vue/shared': 3.5.24 + estree-walker: 2.0.2 + magic-string: 0.30.21 + postcss: 8.5.6 + source-map-js: 1.2.1 + + '@vue/compiler-ssr@3.5.24': + dependencies: + '@vue/compiler-dom': 3.5.24 + '@vue/shared': 3.5.24 + + '@vue/shared@3.5.24': {} + '@wallet-standard/app@1.1.0': dependencies: '@wallet-standard/base': 1.1.0 @@ -3130,6 +3660,8 @@ snapshots: normalize-path: 3.0.0 picomatch: 2.3.1 + app-module-path@2.2.0: {} + arg@5.0.2: {} aria-query@5.3.0: @@ -3140,6 +3672,8 @@ snapshots: assertion-error@2.0.1: {} + ast-module-types@6.0.1: {} + ast-v8-to-istanbul@0.3.8: dependencies: '@jridgewell/trace-mapping': 0.3.31 @@ -3162,10 +3696,23 @@ snapshots: base-x@5.0.1: {} + base64-js@1.5.1: {} + baseline-browser-mapping@2.8.25: {} binary-extensions@2.3.0: {} + bl@4.1.0: + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.2 + + brace-expansion@1.1.12: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + brace-expansion@2.0.2: dependencies: balanced-match: 1.0.2 @@ -3186,6 +3733,11 @@ snapshots: dependencies: base-x: 5.0.1 + buffer@5.7.1: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + bundle-require@5.1.0(esbuild@0.25.12): dependencies: esbuild: 0.25.12 @@ -3204,6 +3756,11 @@ snapshots: chai@6.2.0: {} + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + chalk@5.6.2: {} chokidar@3.6.0: @@ -3226,6 +3783,14 @@ snapshots: dependencies: clsx: 2.1.1 + cli-cursor@3.1.0: + dependencies: + restore-cursor: 3.1.0 + + cli-spinners@2.9.2: {} + + clone@1.0.4: {} + clsx@2.1.1: {} color-convert@2.0.1: @@ -3238,12 +3803,20 @@ snapshots: dependencies: delayed-stream: 1.0.0 + commander@12.1.0: {} + commander@13.1.0: {} commander@14.0.1: {} commander@4.1.1: {} + commander@7.2.0: {} + + commondir@1.0.1: {} + + concat-map@0.0.1: {} + confbox@0.1.8: {} consola@3.4.2: {} @@ -3276,10 +3849,81 @@ snapshots: decimal.js@10.6.0: {} + deep-extend@0.6.0: {} + + defaults@1.0.4: + dependencies: + clone: 1.0.4 + delayed-stream@1.0.0: {} + dependency-tree@11.2.0: + dependencies: + commander: 12.1.0 + filing-cabinet: 5.0.3 + precinct: 12.2.0 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + dequal@2.0.3: {} + detective-amd@6.0.1: + dependencies: + ast-module-types: 6.0.1 + escodegen: 2.1.0 + get-amd-module-type: 6.0.1 + node-source-walk: 7.0.1 + + detective-cjs@6.0.1: + dependencies: + ast-module-types: 6.0.1 + node-source-walk: 7.0.1 + + detective-es6@5.0.1: + dependencies: + node-source-walk: 7.0.1 + + detective-postcss@7.0.1(postcss@8.5.6): + dependencies: + is-url: 1.2.4 + postcss: 8.5.6 + postcss-values-parser: 6.0.2(postcss@8.5.6) + + detective-sass@6.0.1: + dependencies: + gonzales-pe: 4.3.0 + node-source-walk: 7.0.1 + + detective-scss@5.0.1: + dependencies: + gonzales-pe: 4.3.0 + node-source-walk: 7.0.1 + + detective-stylus@5.0.1: {} + + detective-typescript@14.0.0(typescript@5.9.3): + dependencies: + '@typescript-eslint/typescript-estree': 8.46.4(typescript@5.9.3) + ast-module-types: 6.0.1 + node-source-walk: 7.0.1 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + detective-vue2@2.2.0(typescript@5.9.3): + dependencies: + '@dependents/detective-less': 5.0.1 + '@vue/compiler-sfc': 3.5.24 + detective-es6: 5.0.1 + detective-sass: 6.0.1 + detective-scss: 5.0.1 + detective-stylus: 5.0.1 + detective-typescript: 14.0.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + didyoumean@1.2.2: {} dlv@1.1.3: {} @@ -3302,6 +3946,13 @@ snapshots: emoji-regex@9.2.2: {} + enhanced-resolve@5.18.3: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.3.0 + + entities@4.5.0: {} + entities@6.0.1: {} es-define-property@1.0.1: {} @@ -3352,10 +4003,28 @@ snapshots: escalade@3.2.0: {} + escodegen@2.1.0: + dependencies: + esprima: 4.0.1 + estraverse: 5.3.0 + esutils: 2.0.3 + optionalDependencies: + source-map: 0.6.1 + + eslint-visitor-keys@4.2.1: {} + + esprima@4.0.1: {} + + estraverse@5.3.0: {} + + estree-walker@2.0.2: {} + estree-walker@3.0.3: dependencies: '@types/estree': 1.0.8 + esutils@2.0.3: {} + expect-type@1.2.2: {} fast-glob@3.3.3: @@ -3376,6 +4045,20 @@ snapshots: optionalDependencies: picomatch: 4.0.3 + filing-cabinet@5.0.3: + dependencies: + app-module-path: 2.2.0 + commander: 12.1.0 + enhanced-resolve: 5.18.3 + module-definition: 6.0.1 + module-lookup-amd: 9.0.5 + resolve: 1.22.11 + resolve-dependency-path: 4.0.1 + sass-lookup: 6.1.0 + stylus-lookup: 6.1.0 + tsconfig-paths: 4.2.0 + typescript: 5.9.3 + fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 @@ -3401,11 +4084,18 @@ snapshots: fraction.js@4.3.7: {} + fs.realpath@1.0.0: {} + fsevents@2.3.3: optional: true function-bind@1.1.2: {} + get-amd-module-type@6.0.1: + dependencies: + ast-module-types: 6.0.1 + node-source-walk: 7.0.1 + get-intrinsic@1.3.0: dependencies: call-bind-apply-helpers: 1.0.2 @@ -3419,6 +4109,8 @@ snapshots: hasown: 2.0.2 math-intrinsics: 1.1.0 + get-own-enumerable-property-symbols@3.0.2: {} + get-proto@1.0.1: dependencies: dunder-proto: 1.0.1 @@ -3441,8 +4133,23 @@ snapshots: package-json-from-dist: 1.0.1 path-scurry: 1.11.1 + glob@7.2.3: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + gonzales-pe@4.3.0: + dependencies: + minimist: 1.2.8 + gopd@1.2.0: {} + graceful-fs@4.2.11: {} + has-flag@4.0.0: {} has-symbols@1.1.0: {} @@ -3481,8 +4188,19 @@ snapshots: dependencies: safer-buffer: 2.1.2 + ieee754@1.2.1: {} + indent-string@4.0.0: {} + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.4: {} + + ini@1.3.8: {} + is-binary-path@2.1.0: dependencies: binary-extensions: 2.3.0 @@ -3499,10 +4217,22 @@ snapshots: dependencies: is-extglob: 2.1.1 + is-interactive@1.0.0: {} + is-number@7.0.0: {} + is-obj@1.0.1: {} + is-potential-custom-element-name@1.0.1: {} + is-regexp@1.0.0: {} + + is-unicode-supported@0.1.0: {} + + is-url-superb@4.0.0: {} + + is-url@1.2.4: {} + isexe@2.0.0: {} istanbul-lib-coverage@3.2.2: {} @@ -3568,6 +4298,8 @@ snapshots: - supports-color - utf-8-validate + json5@2.2.3: {} + lilconfig@3.1.3: {} lines-and-columns@1.2.4: {} @@ -3576,10 +4308,34 @@ snapshots: lodash.sortby@4.7.0: {} + log-symbols@4.1.0: + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + lru-cache@10.4.3: {} lz-string@1.5.0: {} + madge@8.0.0(typescript@5.9.3): + dependencies: + chalk: 4.1.2 + commander: 7.2.0 + commondir: 1.0.1 + debug: 4.4.3 + dependency-tree: 11.2.0 + ora: 5.4.1 + pluralize: 8.0.0 + pretty-ms: 7.0.1 + rc: 1.2.8 + stream-to-array: 2.3.0 + ts-graphviz: 2.1.6 + walkdir: 0.4.1 + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + magic-string@0.30.21: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -3609,12 +4365,20 @@ snapshots: dependencies: mime-db: 1.52.0 + mimic-fn@2.1.0: {} + min-indent@1.0.1: {} + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.12 + minimatch@9.0.5: dependencies: brace-expansion: 2.0.2 + minimist@1.2.8: {} + minipass@7.1.2: {} mlly@1.8.0: @@ -3624,6 +4388,18 @@ snapshots: pkg-types: 1.3.1 ufo: 1.6.1 + module-definition@6.0.1: + dependencies: + ast-module-types: 6.0.1 + node-source-walk: 7.0.1 + + module-lookup-amd@9.0.5: + dependencies: + commander: 12.1.0 + glob: 7.2.3 + requirejs: 2.3.7 + requirejs-config-file: 4.0.0 + ms@2.1.3: {} mz@2.7.0: @@ -3636,6 +4412,10 @@ snapshots: node-releases@2.0.27: {} + node-source-walk@7.0.1: + dependencies: + '@babel/parser': 7.28.5 + normalize-path@3.0.0: {} normalize-range@0.1.2: {} @@ -3646,12 +4426,36 @@ snapshots: object-hash@3.0.0: {} + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + onetime@5.1.2: + dependencies: + mimic-fn: 2.1.0 + + ora@5.4.1: + dependencies: + bl: 4.1.0 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-spinners: 2.9.2 + is-interactive: 1.0.0 + is-unicode-supported: 0.1.0 + log-symbols: 4.1.0 + strip-ansi: 6.0.1 + wcwidth: 1.0.1 + package-json-from-dist@1.0.1: {} + parse-ms@2.1.0: {} + parse5@7.3.0: dependencies: entities: 6.0.1 + path-is-absolute@1.0.1: {} + path-key@3.1.1: {} path-parse@1.0.7: {} @@ -3679,6 +4483,8 @@ snapshots: mlly: 1.8.0 pathe: 2.0.3 + pluralize@8.0.0: {} + postcss-import@15.1.0(postcss@8.5.6): dependencies: postcss: 8.5.6 @@ -3710,18 +4516,49 @@ snapshots: postcss-value-parser@4.2.0: {} + postcss-values-parser@6.0.2(postcss@8.5.6): + dependencies: + color-name: 1.1.4 + is-url-superb: 4.0.0 + postcss: 8.5.6 + quote-unquote: 1.0.0 + postcss@8.5.6: dependencies: nanoid: 3.3.11 picocolors: 1.1.1 source-map-js: 1.2.1 + precinct@12.2.0: + dependencies: + '@dependents/detective-less': 5.0.1 + commander: 12.1.0 + detective-amd: 6.0.1 + detective-cjs: 6.0.1 + detective-es6: 5.0.1 + detective-postcss: 7.0.1(postcss@8.5.6) + detective-sass: 6.0.1 + detective-scss: 5.0.1 + detective-stylus: 5.0.1 + detective-typescript: 14.0.0(typescript@5.9.3) + detective-vue2: 2.2.0(typescript@5.9.3) + module-definition: 6.0.1 + node-source-walk: 7.0.1 + postcss: 8.5.6 + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + pretty-format@27.5.1: dependencies: ansi-regex: 5.0.1 ansi-styles: 5.2.0 react-is: 17.0.2 + pretty-ms@7.0.1: + dependencies: + parse-ms: 2.1.0 + psl@1.15.0: dependencies: punycode: 2.3.1 @@ -3732,6 +4569,15 @@ snapshots: queue-microtask@1.2.3: {} + quote-unquote@1.0.0: {} + + rc@1.2.8: + dependencies: + deep-extend: 0.6.0 + ini: 1.3.8 + minimist: 1.2.8 + strip-json-comments: 2.0.1 + react-dom@19.2.0(react@19.2.0): dependencies: react: 19.2.0 @@ -3745,6 +4591,12 @@ snapshots: dependencies: pify: 2.3.0 + readable-stream@3.6.2: + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + readdirp@3.6.0: dependencies: picomatch: 2.3.1 @@ -3756,8 +4608,17 @@ snapshots: indent-string: 4.0.0 strip-indent: 3.0.0 + requirejs-config-file@4.0.0: + dependencies: + esprima: 4.0.1 + stringify-object: 3.3.0 + + requirejs@2.3.7: {} + requires-port@1.0.0: {} + resolve-dependency-path@4.0.1: {} + resolve-from@5.0.0: {} resolve@1.22.11: @@ -3766,6 +4627,11 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 + restore-cursor@3.1.0: + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + reusify@1.1.0: {} rollup@4.52.5: @@ -3804,8 +4670,15 @@ snapshots: dependencies: queue-microtask: 1.2.3 + safe-buffer@5.2.1: {} + safer-buffer@2.1.2: {} + sass-lookup@6.1.0: + dependencies: + commander: 12.1.0 + enhanced-resolve: 5.18.3 + saxes@6.0.0: dependencies: xmlchars: 2.2.0 @@ -3822,10 +4695,15 @@ snapshots: siginfo@2.0.0: {} + signal-exit@3.0.7: {} + signal-exit@4.1.0: {} source-map-js@1.2.1: {} + source-map@0.6.1: + optional: true + source-map@0.8.0-beta.0: dependencies: whatwg-url: 7.1.0 @@ -3834,6 +4712,10 @@ snapshots: std-env@3.10.0: {} + stream-to-array@2.3.0: + dependencies: + any-promise: 1.3.0 + string-width@4.2.3: dependencies: emoji-regex: 8.0.0 @@ -3846,6 +4728,16 @@ snapshots: emoji-regex: 9.2.2 strip-ansi: 7.1.2 + string_decoder@1.3.0: + dependencies: + safe-buffer: 5.2.1 + + stringify-object@3.3.0: + dependencies: + get-own-enumerable-property-symbols: 3.0.2 + is-obj: 1.0.1 + is-regexp: 1.0.0 + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 @@ -3854,10 +4746,18 @@ snapshots: dependencies: ansi-regex: 6.2.2 + strip-bom@3.0.0: {} + strip-indent@3.0.0: dependencies: min-indent: 1.0.1 + strip-json-comments@2.0.1: {} + + stylus-lookup@6.1.0: + dependencies: + commander: 12.1.0 + sucrase@3.35.0: dependencies: '@jridgewell/gen-mapping': 0.3.13 @@ -3916,6 +4816,8 @@ snapshots: - tsx - yaml + tapable@2.3.0: {} + thenify-all@1.6.0: dependencies: thenify: 3.3.1 @@ -3956,8 +4858,25 @@ snapshots: tree-kill@1.2.2: {} + ts-api-utils@2.1.0(typescript@5.9.3): + dependencies: + typescript: 5.9.3 + + ts-graphviz@2.1.6: + dependencies: + '@ts-graphviz/adapter': 2.0.6 + '@ts-graphviz/ast': 2.0.7 + '@ts-graphviz/common': 2.1.5 + '@ts-graphviz/core': 2.0.7 + ts-interface-checker@0.1.13: {} + tsconfig-paths@4.2.0: + dependencies: + json5: 2.2.3 + minimist: 1.2.8 + strip-bom: 3.0.0 + tsup@8.5.0(@swc/core@1.15.0)(jiti@1.21.7)(postcss@8.5.6)(typescript@5.9.3): dependencies: bundle-require: 5.1.0(esbuild@0.25.12) @@ -4095,6 +5014,12 @@ snapshots: dependencies: xml-name-validator: 5.0.0 + walkdir@0.4.1: {} + + wcwidth@1.0.1: + dependencies: + defaults: 1.0.4 + webidl-conversions@4.0.2: {} webidl-conversions@7.0.0: {} @@ -4137,6 +5062,8 @@ snapshots: string-width: 5.1.2 strip-ansi: 7.1.2 + wrappy@1.0.2: {} + ws@8.18.3: {} xml-name-validator@5.0.0: {} diff --git a/turbo.json b/turbo.json index 74441c0..0da6368 100644 --- a/turbo.json +++ b/turbo.json @@ -21,6 +21,9 @@ }, "typecheck": { "outputs": [] + }, + "check:circular-deps": { + "outputs": [] } } } From 2c25d1866540720f450881a4ee79d9b5c80526d4 Mon Sep 17 00:00:00 2001 From: tomide Date: Wed, 12 Nov 2025 17:58:34 +0000 Subject: [PATCH 4/5] chore: update imports in tests --- packages/client-core/package.json | 4 ++-- packages/client-core/src/features/sol.test.ts | 2 +- .../src/signers/walletTransactionSigner.test.ts | 2 +- packages/client-core/src/wallet/registry.test.ts | 3 +-- packages/client-core/tsconfig.test.json | 8 ++++++++ 5 files changed, 13 insertions(+), 6 deletions(-) create mode 100644 packages/client-core/tsconfig.test.json diff --git a/packages/client-core/package.json b/packages/client-core/package.json index 58e0ea7..a2a3522 100644 --- a/packages/client-core/package.json +++ b/packages/client-core/package.json @@ -47,9 +47,9 @@ "compile:typedefs": "tsc -p ./tsconfig.declarations.json", "format": "biome check --write src", "lint": "biome check src", - "test:typecheck": "tsc --noEmit", + "test:typecheck": "tsc --noEmit -p tsconfig.test.json", "test": "vitest run --config ./vitest.config.ts", - "typecheck": "pnpm test:typecheck", + "typecheck": "tsc --noEmit", "check:circular-deps": "madge --circular $(find ./src -name '*.ts' -o -name '*.tsx')" }, "author": "Solana Labs Maintainers ", diff --git a/packages/client-core/src/features/sol.test.ts b/packages/client-core/src/features/sol.test.ts index 302704d..2f712c2 100644 --- a/packages/client-core/src/features/sol.test.ts +++ b/packages/client-core/src/features/sol.test.ts @@ -1,6 +1,6 @@ import type { TransactionSigner } from '@solana/kit'; import { beforeAll, beforeEach, describe, expect, it, vi } from 'vitest'; -import type { WalletSession } from '../types'; +import type { WalletSession } from '../wallet/types'; type MutableMessage = { instructions: unknown[]; diff --git a/packages/client-core/src/signers/walletTransactionSigner.test.ts b/packages/client-core/src/signers/walletTransactionSigner.test.ts index 9d46260..6b098a9 100644 --- a/packages/client-core/src/signers/walletTransactionSigner.test.ts +++ b/packages/client-core/src/signers/walletTransactionSigner.test.ts @@ -2,7 +2,7 @@ import { getBase58Decoder } from '@solana/codecs-strings'; import type { TransactionSigner } from '@solana/kit'; import { describe, expect, it, vi } from 'vitest'; -import type { WalletSession } from '../types'; +import type { WalletSession } from '../wallet/types'; import { createWalletTransactionSigner, isWalletSession, resolveSignerMode } from './walletTransactionSigner'; type SessionTransaction = Parameters>[0]; diff --git a/packages/client-core/src/wallet/registry.test.ts b/packages/client-core/src/wallet/registry.test.ts index d22f76c..77a5add 100644 --- a/packages/client-core/src/wallet/registry.test.ts +++ b/packages/client-core/src/wallet/registry.test.ts @@ -1,7 +1,6 @@ import { describe, expect, it } from 'vitest'; - -import type { WalletConnector } from '../types'; import { createWalletRegistry } from './registry'; +import type { WalletConnector } from './types'; describe('wallet registry', () => { const connector = (id: string): WalletConnector => ({ diff --git a/packages/client-core/tsconfig.test.json b/packages/client-core/tsconfig.test.json new file mode 100644 index 0000000..227211b --- /dev/null +++ b/packages/client-core/tsconfig.test.json @@ -0,0 +1,8 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "module": "ESNext" + }, + "include": ["src/**/*.test.ts", "src/**/*.test.tsx"], + "exclude": [] +} From 8b754cd76b2e19efbc535e0b4a1217395c77d289 Mon Sep 17 00:00:00 2001 From: tomide Date: Wed, 10 Dec 2025 14:35:13 +0000 Subject: [PATCH 5/5] fix: reset next-env file --- biome.json | 2 +- examples/nextjs/next-env.d.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/biome.json b/biome.json index 54e95be..78e53d9 100644 --- a/biome.json +++ b/biome.json @@ -6,7 +6,7 @@ "indentWidth": 4 }, "files": { - "includes": ["**/*", "!!coverage", "!!**/.turbo", "!!**/dist", "!!**/next-env.d.ts"] + "includes": ["**/*", "!!coverage", "!!**/.turbo", "!!**/dist"] }, "linter": { "enabled": true, diff --git a/examples/nextjs/next-env.d.ts b/examples/nextjs/next-env.d.ts index 9edff1c..1511519 100644 --- a/examples/nextjs/next-env.d.ts +++ b/examples/nextjs/next-env.d.ts @@ -1,6 +1,6 @@ /// /// -import "./.next/types/routes.d.ts"; +import './.next/types/routes.d.ts'; // NOTE: This file should not be edited // see https://nextjs.org/docs/app/api-reference/config/typescript for more information.