diff --git a/CHANGELOG.md b/CHANGELOG.md index 7061e5b194..0e851f61ed 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -103,7 +103,7 @@ const frameMetadata = getFrameMetadata({ ```ts type Button = { label: string; - action?: "post" | "post_redirect"; + action?: 'post' | 'post_redirect'; }; type FrameMetadata = { diff --git a/README.md b/README.md index e9e152a5e9..b60d43f969 100644 --- a/README.md +++ b/README.md @@ -237,6 +237,54 @@ type FrameMetadataResponse = Record;

+## Identity Kit 👤 + +### OnchainName + +The `OnchainName` component is used to display ENS names associated with Ethereum addresses. When an ENS name is not available, it defaults to showing a truncated version of the address. + +```tsx +import { OnchainName } from '@coinbase/onchainkit'; + +; +``` + +**@Param** + +- `address`: Ethereum address to be resolved from ENS. +- `className`: Optional CSS class for custom styling. +- `sliced`: Determines if the address should be sliced when no ENS name is available. +- `props`: Additional HTML attributes for the span element. + +**@Returns** + +```ts +type JSX.Element; +``` + +```tsx +import { useOnchainName } from '@coinbase/onchainkit'; + +const { ensName, isLoading } = useOnchainName('0x1234567890abcdef1234567890abcdef12345678'); +``` + +**@Param** + +```ts +type UseOnchainName = { + address?: `0x${string}`; +}; +``` + +**@Returns** + +```ts +type UseOnchainNameResponse = { + ensName: string | null | undefined; + isLoading: boolean; +}; +``` + ## The Team and Our Community ☁️ 🌁 ☁️ OnchainKit is all about community; for any questions, feel free to: diff --git a/jest.config.js b/jest.config.js index 69ea173c28..5c115ece84 100644 --- a/jest.config.js +++ b/jest.config.js @@ -3,5 +3,6 @@ module.exports = { transform: { '^.+\\.tsx?$': 'ts-jest', }, - testMatch: ['**/?(*.)+(spec|test|integ).ts'], + testMatch: ['**/?(*.)+(spec|test|integ).{ts,tsx}'], + setupFilesAfterEnv: ['/jest.setup.ts'], }; diff --git a/jest.setup.ts b/jest.setup.ts new file mode 100644 index 0000000000..66b3d247e3 --- /dev/null +++ b/jest.setup.ts @@ -0,0 +1,12 @@ +// Jest is an amazing test runner and has some awesome assertion APIs +// built in by default. However, there are times when having more +// specific matchers (assertions) would be far more convenient. +// https://jest-extended.jestcommunity.dev/docs/matchers/ +import 'jest-extended'; +// Enable jest-dom functions +import '@testing-library/jest-dom'; + +import { TextEncoder, TextDecoder } from 'util'; + +global.TextEncoder = TextEncoder; +global.TextDecoder = TextDecoder as typeof global.TextDecoder; diff --git a/package.json b/package.json index df0a5ac645..b464ea86aa 100644 --- a/package.json +++ b/package.json @@ -17,16 +17,30 @@ "release:publish": "yarn install && yarn build && changeset publish", "release:version": "changeset version && yarn install --immutable" }, + "peerDependencies": { + "react": "^18", + "react-dom": "^18", + "viem": "^2.5.0" + }, "devDependencies": { "@changesets/changelog-github": "^0.4.8", "@changesets/cli": "^2.26.2", + "@testing-library/jest-dom": "^6.4.0", + "@testing-library/react": "^14.2.0", "@types/jest": "^29.5.11", + "@types/react": "^18", + "@types/react-dom": "^18", "jest": "^29.7.0", + "jest-environment-jsdom": "^29.7.0", + "jest-extended": "^4.0.2", "prettier": "^3.1.1", "prettier-plugin-tailwindcss": "^0.5.9", + "react": "^18", + "react-dom": "^18", "rimraf": "^5.0.5", "ts-jest": "^29.1.2", "typescript": "~5.3.3", + "viem": "^2.5.0", "yarn": "^1.22.21" }, "publishConfig": { diff --git a/src/components/OnchainName.test.tsx b/src/components/OnchainName.test.tsx new file mode 100644 index 0000000000..fa557b5ae7 --- /dev/null +++ b/src/components/OnchainName.test.tsx @@ -0,0 +1,62 @@ +/** + * @jest-environment jsdom + */ +import React from 'react'; +import { render, screen } from '@testing-library/react'; +import { OnchainName } from './OnchainName'; +import { useOnchainName } from '../hooks/useOnchainName'; +import { getSlicedAddress } from '../core/address'; + +// Mocking the hooks and utilities +jest.mock('../hooks/useOnchainName', () => ({ + useOnchainName: jest.fn(), +})); +jest.mock('../core/address', () => ({ + getSlicedAddress: jest.fn(), +})); + +const mockSliceAddress = (addr: string) => addr.slice(0, 6) + '...' + addr.slice(-4); + +describe('OnchainAddress', () => { + const testAddress = '0x1234567890abcdef1234567890abcdef12345678'; + const testName = 'testname.eth'; + + beforeEach(() => { + jest.clearAllMocks(); + (getSlicedAddress as jest.Mock).mockImplementation(mockSliceAddress); + }); + + it('displays ENS name when available', () => { + (useOnchainName as jest.Mock).mockReturnValue({ ensName: testName, isLoading: false }); + + render(); + + expect(screen.getByText(testName)).toBeInTheDocument(); + expect(getSlicedAddress).toHaveBeenCalledTimes(0); + }); + + it('displays sliced address when ENS name is not available and sliced is true as default', () => { + (useOnchainName as jest.Mock).mockReturnValue({ ensName: null, isLoading: false }); + + render(); + + expect(screen.getByText(mockSliceAddress(testAddress))).toBeInTheDocument(); + }); + + it('displays empty when ens still fetching', () => { + (useOnchainName as jest.Mock).mockReturnValue({ ensName: null, isLoading: true }); + + render(); + + expect(screen.queryByText(mockSliceAddress(testAddress))).not.toBeInTheDocument(); + expect(getSlicedAddress).toHaveBeenCalledTimes(0); + }); + + it('displays full address when ENS name is not available and sliced is false', () => { + (useOnchainName as jest.Mock).mockReturnValue({ ensName: null, isLoading: false }); + + render(); + + expect(screen.getByText(testAddress)).toBeInTheDocument(); + }); +}); diff --git a/src/components/OnchainName.tsx b/src/components/OnchainName.tsx new file mode 100644 index 0000000000..548d053bfa --- /dev/null +++ b/src/components/OnchainName.tsx @@ -0,0 +1,43 @@ +import React, { useMemo } from 'react'; +import { getSlicedAddress } from '../core/address'; +import { useOnchainName } from '../hooks/useOnchainName'; +import type { Address } from 'viem'; + +type OnchainNameProps = { + address: Address; + className?: string; + sliced?: boolean; + props?: React.HTMLAttributes; +}; + +/** + * OnchainName is a React component that renders the user name from an Ethereum address. + * It displays the ENS name if available; otherwise, it shows either a sliced version of the address + * or the full address, based on the 'sliced' prop. By default, 'sliced' is set to true. + * + * @param {Address} address - Ethereum address to be displayed. + * @param {string} [className] - Optional CSS class for custom styling. + * @param {boolean} [sliced=true] - Determines if the address should be sliced when no ENS name is available. + * @param {React.HTMLAttributes} [props] - Additional HTML attributes for the span element. + */ +export function OnchainName({ address, className, sliced = true, props }: OnchainNameProps) { + const { ensName, isLoading } = useOnchainName(address); + + // wrapped in useMemo to prevent unnecessary recalculations. + const normalizedAddress = useMemo(() => { + if (!ensName && !isLoading && sliced) { + return getSlicedAddress(address); + } + return address; + }, [address, isLoading]); + + if (isLoading) { + return null; + } + + return ( + + {ensName ?? normalizedAddress} + + ); +} diff --git a/src/core/address.test.ts b/src/core/address.test.ts new file mode 100644 index 0000000000..6276ef5e01 --- /dev/null +++ b/src/core/address.test.ts @@ -0,0 +1,8 @@ +import { getSlicedAddress } from './address'; + +describe('getSlicedAddress', () => { + it('should return a string of class names', () => { + const address = getSlicedAddress('0x1234567890123456789012345678901234567890'); + expect(address).toEqual('0x123...7890'); + }); +}); diff --git a/src/core/address.ts b/src/core/address.ts new file mode 100644 index 0000000000..8fb5c52a58 --- /dev/null +++ b/src/core/address.ts @@ -0,0 +1,9 @@ +/** + * getSlicedAddress returns the first 5 and last 4 characters of an address. + */ +export const getSlicedAddress = (address: `0x${string}` | undefined) => { + if (!address) { + return ''; + } + return `${address.slice(0, 5)}...${address.slice(-4)}`; +}; diff --git a/src/hooks/useOnchainActionWithCache.test.ts b/src/hooks/useOnchainActionWithCache.test.ts new file mode 100644 index 0000000000..c58180d24c --- /dev/null +++ b/src/hooks/useOnchainActionWithCache.test.ts @@ -0,0 +1,65 @@ +/** + * @jest-environment jsdom + */ + +import { renderHook, waitFor } from '@testing-library/react'; +import { useOnchainActionWithCache } from './useOnchainActionWithCache'; +import { InMemoryStorage } from '../store/inMemoryStorageService'; + +jest.mock('../store/inMemoryStorageService', () => ({ + InMemoryStorage: { + getData: jest.fn(), + setData: jest.fn(), + }, +})); + +describe('useOnchainActionWithCache', () => { + const mockAction = jest.fn(); + const actionKey = 'testKey'; + + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('initializes with loading state and undefined data', () => { + const { result } = renderHook(() => useOnchainActionWithCache(mockAction, actionKey)); + + expect(result.current.isLoading).toBe(true); + expect(result.current.data).toBeUndefined(); + }); + + it('fetches data and updates state', async () => { + const testData = 'testData'; + mockAction.mockResolvedValue(testData); + + const { result } = renderHook(() => useOnchainActionWithCache(mockAction, actionKey)); + + await waitFor(() => { + expect(mockAction).toHaveBeenCalled(); + expect(result.current.data).toBe(testData); + expect(result.current.isLoading).toBe(false); + }); + }); + + it('caches data when an actionKey is provided', async () => { + const testData = 'testData'; + mockAction.mockResolvedValue(testData); + + renderHook(() => useOnchainActionWithCache(mockAction, actionKey)); + + await waitFor(() => { + expect(InMemoryStorage.setData).toHaveBeenCalledWith(actionKey, testData); + }); + }); + + it('does not cache data when actionKey is empty', async () => { + const testData = 'testData'; + mockAction.mockResolvedValue(testData); + + renderHook(() => useOnchainActionWithCache(mockAction, '')); + + await waitFor(() => { + expect(InMemoryStorage.setData).not.toHaveBeenCalled(); + }); + }); +}); diff --git a/src/hooks/useOnchainActionWithCache.ts b/src/hooks/useOnchainActionWithCache.ts new file mode 100644 index 0000000000..59ad8ddb57 --- /dev/null +++ b/src/hooks/useOnchainActionWithCache.ts @@ -0,0 +1,51 @@ +import { useEffect, useState } from 'react'; +import { ActionFunction, ActionKey, StorageValue } from '../types'; +import { InMemoryStorage } from '../store/inMemoryStorageService'; // Adjust the import path as needed + +type ExtractStorageValue = T extends StorageValue ? T : never; + +/** + * A generic hook to fetch and store data using a specified storage service. + * It fetches data based on the given dependencies and stores it using the provided storage service. + * @param action - The action function to fetch data. + * @param actionKey - A key associated with the action for caching purposes. + * @returns The data fetched by the action function and a boolean indicating whether the data is being fetched. + */ +export function useOnchainActionWithCache(action: ActionFunction, actionKey: ActionKey) { + const [data, setData] = useState(undefined); + const [isLoading, setIsLoading] = useState(true); + + useEffect(() => { + let isSubscribed = true; + + const callAction = async () => { + let fetchedData: StorageValue; + // Use cache only if actionKey is not empty + if (actionKey) { + fetchedData = await InMemoryStorage.getData(actionKey); + } + + // If no cached data or actionKey is empty, fetch new data + if (!fetchedData) { + fetchedData = (await action()) as ExtractStorageValue; + // Cache the data only if actionKey is not empty + if (actionKey) { + await InMemoryStorage.setData(actionKey, fetchedData); + } + } + + if (isSubscribed) { + setData(fetchedData); + setIsLoading(false); + } + }; + + void callAction(); + + return () => { + isSubscribed = false; + }; + }, [actionKey, action]); + + return { data, isLoading }; +} diff --git a/src/hooks/useOnchainName.test.ts b/src/hooks/useOnchainName.test.ts new file mode 100644 index 0000000000..aa1275578d --- /dev/null +++ b/src/hooks/useOnchainName.test.ts @@ -0,0 +1,106 @@ +/** + * @jest-environment jsdom + */ + +import { renderHook, waitFor } from '@testing-library/react'; +import { publicClient } from '../network/client'; +import { useOnchainName, ensNameAction } from './useOnchainName'; +import { useOnchainActionWithCache } from './useOnchainActionWithCache'; + +jest.mock('../network/client'); +jest.mock('./useOnchainActionWithCache'); + +describe('useOnchainName', () => { + const mockGetEnsName = publicClient.getEnsName as jest.Mock; + const mockUseOnchainActionWithCache = useOnchainActionWithCache as jest.Mock; + + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('returns the correct ENS name and loading state', async () => { + const testAddress = '0x123'; + const testEnsName = 'test.ens'; + + // Mock the getEnsName method of the publicClient + mockGetEnsName.mockResolvedValue(testEnsName); + mockUseOnchainActionWithCache.mockImplementation(() => { + return { + data: testEnsName, + isLoading: false, + }; + }); + + // Use the renderHook function to create a test harness for the useOnchainName hook + const { result } = renderHook(() => useOnchainName(testAddress)); + + // Wait for the hook to finish fetching the ENS name + await waitFor(() => { + // Check that the ENS name and loading state are correct + expect(result.current.ensName).toBe(testEnsName); + expect(result.current.isLoading).toBe(false); + }); + }); + + it('returns the loading state true while still fetching from ens action', async () => { + const testAddress = '0x123'; + + // Mock the getEnsName method of the publicClient + // mockGetEnsName.mockResolvedValue(testEnsName); + mockUseOnchainActionWithCache.mockImplementation(() => { + return { + data: undefined, + isLoading: true, + }; + }); + + // Use the renderHook function to create a test harness for the useOnchainName hook + const { result } = renderHook(() => useOnchainName(testAddress)); + + // Wait for the hook to finish fetching the ENS name + await waitFor(() => { + // Check that the ENS name and loading state are correct + expect(result.current.ensName).toBe(undefined); + expect(result.current.isLoading).toBe(true); + }); + }); + + describe('ensNameAction', () => { + it('should return correct value from client getEnsName', async () => { + const walletAddress = '0x1234'; + const expectedEnsName = 'avatarUrl'; + + mockGetEnsName.mockResolvedValue(expectedEnsName); + + const action = ensNameAction(walletAddress); + const name = await action(); + + expect(name).toBe(expectedEnsName); + expect(mockGetEnsName).toHaveBeenCalledWith({ address: walletAddress }); + }); + + it('should return null name when client ', async () => { + const walletAddress = '0x1234'; + const expectedEnsName = 'avatarUrl'; + + mockGetEnsName.mockResolvedValue(expectedEnsName); + + const action = ensNameAction(walletAddress); + const name = await action(); + + expect(name).toBe(expectedEnsName); + expect(mockGetEnsName).toHaveBeenCalledWith({ address: walletAddress }); + }); + + it('should return null client getEnsName throws an error', async () => { + const walletAddress = '0x1234'; + + mockGetEnsName.mockRejectedValue(new Error('This is an error')); + + const action = ensNameAction(walletAddress); + const name = await action(); + + expect(name).toBe(null); + }); + }); +}); diff --git a/src/hooks/useOnchainName.ts b/src/hooks/useOnchainName.ts new file mode 100644 index 0000000000..e6bb695cb4 --- /dev/null +++ b/src/hooks/useOnchainName.ts @@ -0,0 +1,37 @@ +import { publicClient } from '../network/client'; +import { useOnchainActionWithCache } from './useOnchainActionWithCache'; +import type { Address, GetEnsNameReturnType } from 'viem'; + +/** + * An asynchronous function to fetch the Ethereum Name Service (ENS) name for a given Ethereum address. + * It returns the ENS name if it exists, or null if it doesn't or in case of an error. + * + * @param address - The Ethereum address for which the ENS name is being fetched. + * @returns A promise that resolves to the ENS name (as a string) or null. + */ +export const ensNameAction = (address: Address) => async (): Promise => { + try { + return await publicClient.getEnsName({ + address, + }); + } catch (err) { + return null; + } +}; + +/** + * It leverages the `useOnchainActionWithCache` hook for fetching and optionally caching the ENS name, + * handling loading state internally. + * @param address - The Ethereum address for which the ENS name is to be fetched. + * @returns An object containing: + * - `ensName`: The fetched ENS name for the provided address, or null if not found or in case of an error. + * - `isLoading`: A boolean indicating whether the ENS name is currently being fetched. + */ +export const useOnchainName = (address: Address) => { + const ensActionKey = `ens-name-${address}`; + const { data: ensName, isLoading } = useOnchainActionWithCache( + ensNameAction(address), + ensActionKey, + ); + return { ensName, isLoading }; +}; diff --git a/src/index.ts b/src/index.ts index 787820fac9..bfc91761eb 100644 --- a/src/index.ts +++ b/src/index.ts @@ -3,4 +3,6 @@ export { version } from './version'; export { getFrameHtmlResponse } from './core/getFrameHtmlResponse'; export { getFrameMetadata } from './core/getFrameMetadata'; export { getFrameMessage } from './core/getFrameMessage'; +export { OnchainName } from './components/OnchainName'; +export { useOnchainName } from './hooks/useOnchainName'; export type { FrameRequest, FrameValidationData } from './core/farcasterTypes'; diff --git a/src/network/client.ts b/src/network/client.ts new file mode 100644 index 0000000000..1b04b97737 --- /dev/null +++ b/src/network/client.ts @@ -0,0 +1,7 @@ +import { createPublicClient, http } from 'viem'; +import { mainnet } from 'viem/chains'; + +export const publicClient: ReturnType = createPublicClient({ + chain: mainnet, + transport: http(), +}); diff --git a/src/store/inMemoryStorageService.test.ts b/src/store/inMemoryStorageService.test.ts new file mode 100644 index 0000000000..bc279c20a3 --- /dev/null +++ b/src/store/inMemoryStorageService.test.ts @@ -0,0 +1,31 @@ +import { InMemoryStorage } from '../store/inMemoryStorageService'; + +describe('InMemoryStorage', () => { + beforeEach(() => { + // Optionally clear the storage before each test if needed. + // This depends on whether InMemoryStorage provides a method to clear the storage. + }); + + it('initializes with an empty storage', async () => { + const value = await InMemoryStorage.getData('someKey'); + expect(value).toBeNull(); + }); + + it('stores and retrieves data correctly', async () => { + await InMemoryStorage.setData('testKey', 'testValue'); + const value = await InMemoryStorage.getData('testKey'); + expect(value).toBe('testValue'); + }); + + it('returns null for non-existent keys', async () => { + const value = await InMemoryStorage.getData('nonExistentKey'); + expect(value).toBeNull(); + }); + + it("deletes data when setting a key's value to null", async () => { + await InMemoryStorage.setData('testKey', 'testValue'); + await InMemoryStorage.setData('testKey', null); + const value = await InMemoryStorage.getData('testKey'); + expect(value).toBeNull(); + }); +}); diff --git a/src/store/inMemoryStorageService.ts b/src/store/inMemoryStorageService.ts new file mode 100644 index 0000000000..9592bd40bb --- /dev/null +++ b/src/store/inMemoryStorageService.ts @@ -0,0 +1,43 @@ +import { StorageInterface } from '../types'; + +// Module-level storage variable (replaces the class property) +const storage = new Map(); + +/** + * Asynchronously retrieves data from the in-memory storage. + * + * @param {string} key - The key for which to retrieve the data. + * @returns {Promise} The data associated with the key, or null if not found. + */ +const getData = async (key: string): Promise => { + try { + return storage.has(key) ? storage.get(key) : null; + } catch (error) { + console.error('error reading data from storage', error); + return null; + } +}; + +/** + * Asynchronously sets data in the in-memory storage. + * + * @param {string} key - The key to store the data against. + * @param {string | null | undefined} value - The data to store. + */ +const setData = async (key: string, value: string | null | undefined): Promise => { + if (value === null) { + storage.delete(key); + } else { + try { + storage.set(key, value); + } catch (error) { + console.error('error when setting data in storage', error); + } + } +}; + +// Exporting the module functions +export const InMemoryStorage: StorageInterface = { + getData, + setData, +}; diff --git a/src/types.ts b/src/types.ts new file mode 100644 index 0000000000..e4cd8c116c --- /dev/null +++ b/src/types.ts @@ -0,0 +1,10 @@ +export type StorageValue = string | null | undefined; + +export type StorageInterface = { + getData: (key: string) => Promise; + setData: (key: string, value: StorageValue) => Promise; +}; + +export type ActionFunction = () => Promise; + +export type ActionKey = string; diff --git a/tsconfig.json b/tsconfig.json index 32b28c8f21..796f40d4cd 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -7,6 +7,8 @@ "es2020", "dom" ], + "skipLibCheck": true, + "jsx": "react-jsx", "strict": true, "sourceMap": true, "declaration": true, @@ -21,6 +23,10 @@ ] }, "include": [ - "src" + "src", + "jest.setup.ts" + ], + "exclude": [ + "node_modules" ] } diff --git a/yarn.lock b/yarn.lock index abcf0f1cae..b4532ac362 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5,6 +5,20 @@ __metadata: version: 8 cacheKey: 10c0 +"@adobe/css-tools@npm:^4.3.2": + version: 4.3.3 + resolution: "@adobe/css-tools@npm:4.3.3" + checksum: e76e712df713964b87cdf2aca1f0477f19bebd845484d5fcba726d3ec7782366e2f26ec8cb2dcfaf47081a5c891987d8a9f5c3f30d11e1eb3c1848adc27fcb24 + languageName: node + linkType: hard + +"@adraffy/ens-normalize@npm:1.10.0": + version: 1.10.0 + resolution: "@adraffy/ens-normalize@npm:1.10.0" + checksum: 78ae700847a2516d5a0ae12c4e23d09392a40c67e73b137eb7189f51afb1601c8d18784aeda2ed288a278997824dc924d1f398852c21d41ee2c4c564f2fb4d26 + languageName: node + linkType: hard + "@ampproject/remapping@npm:^2.2.0": version: 2.2.1 resolution: "@ampproject/remapping@npm:2.2.1" @@ -15,7 +29,7 @@ __metadata: languageName: node linkType: hard -"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.23.5": +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.23.5": version: 7.23.5 resolution: "@babel/code-frame@npm:7.23.5" dependencies: @@ -361,7 +375,7 @@ __metadata: languageName: node linkType: hard -"@babel/runtime@npm:^7.20.1, @babel/runtime@npm:^7.5.5": +"@babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.20.1, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.9.2": version: 7.23.9 resolution: "@babel/runtime@npm:7.23.9" dependencies: @@ -686,14 +700,27 @@ __metadata: dependencies: "@changesets/changelog-github": "npm:^0.4.8" "@changesets/cli": "npm:^2.26.2" + "@testing-library/jest-dom": "npm:^6.4.0" + "@testing-library/react": "npm:^14.2.0" "@types/jest": "npm:^29.5.11" + "@types/react": "npm:^18" + "@types/react-dom": "npm:^18" jest: "npm:^29.7.0" + jest-environment-jsdom: "npm:^29.7.0" + jest-extended: "npm:^4.0.2" prettier: "npm:^3.1.1" prettier-plugin-tailwindcss: "npm:^0.5.9" + react: "npm:^18" + react-dom: "npm:^18" rimraf: "npm:^5.0.5" ts-jest: "npm:^29.1.2" typescript: "npm:~5.3.3" + viem: "npm:^2.5.0" yarn: "npm:^1.22.21" + peerDependencies: + react: ^18 + react-dom: ^18 + viem: ^2.5.0 languageName: unknown linkType: soft @@ -1029,6 +1056,29 @@ __metadata: languageName: node linkType: hard +"@noble/curves@npm:1.2.0, @noble/curves@npm:~1.2.0": + version: 1.2.0 + resolution: "@noble/curves@npm:1.2.0" + dependencies: + "@noble/hashes": "npm:1.3.2" + checksum: 0bac7d1bbfb3c2286910b02598addd33243cb97c3f36f987ecc927a4be8d7d88e0fcb12b0f0ef8a044e7307d1844dd5c49bb724bfa0a79c8ec50ba60768c97f6 + languageName: node + linkType: hard + +"@noble/hashes@npm:1.3.2": + version: 1.3.2 + resolution: "@noble/hashes@npm:1.3.2" + checksum: 2482cce3bce6a596626f94ca296e21378e7a5d4c09597cbc46e65ffacc3d64c8df73111f2265444e36a3168208628258bbbaccba2ef24f65f58b2417638a20e7 + languageName: node + linkType: hard + +"@noble/hashes@npm:~1.3.0, @noble/hashes@npm:~1.3.2": + version: 1.3.3 + resolution: "@noble/hashes@npm:1.3.3" + checksum: 23c020b33da4172c988e44100e33cd9f8f6250b68b43c467d3551f82070ebd9716e0d9d2347427aa3774c85934a35fa9ee6f026fca2117e3fa12db7bedae7668 + languageName: node + linkType: hard + "@nodelib/fs.scandir@npm:2.1.5": version: 2.1.5 resolution: "@nodelib/fs.scandir@npm:2.1.5" @@ -1085,6 +1135,34 @@ __metadata: languageName: node linkType: hard +"@scure/base@npm:~1.1.0, @scure/base@npm:~1.1.2": + version: 1.1.5 + resolution: "@scure/base@npm:1.1.5" + checksum: 6eb07be0202fac74a57c79d0d00a45f6f7e57447010c1e3d90a4275d197829727b7abc54b248fc6f9bef9ae374f7be5ee9154dde5b5b73da773560bf17aa8504 + languageName: node + linkType: hard + +"@scure/bip32@npm:1.3.2": + version: 1.3.2 + resolution: "@scure/bip32@npm:1.3.2" + dependencies: + "@noble/curves": "npm:~1.2.0" + "@noble/hashes": "npm:~1.3.2" + "@scure/base": "npm:~1.1.2" + checksum: 2e9c1ce67f72b6c3329483f5fd39fb43ba6dcf732ed7ac63b80fa96341d2bc4cad1ea4c75bfeb91e801968c00df48b577b015fd4591f581e93f0d91178e630ca + languageName: node + linkType: hard + +"@scure/bip39@npm:1.2.1": + version: 1.2.1 + resolution: "@scure/bip39@npm:1.2.1" + dependencies: + "@noble/hashes": "npm:~1.3.0" + "@scure/base": "npm:~1.1.0" + checksum: fe951f69dd5a7cdcefbe865bce1b160d6b59ba19bd01d09f0718e54fce37a7d8be158b32f5455f0e9c426a7fbbede3e019bf0baa99bacc88ef26a76a07e115d4 + languageName: node + linkType: hard + "@sinclair/typebox@npm:^0.27.8": version: 0.27.8 resolution: "@sinclair/typebox@npm:0.27.8" @@ -1110,6 +1188,83 @@ __metadata: languageName: node linkType: hard +"@testing-library/dom@npm:^9.0.0": + version: 9.3.4 + resolution: "@testing-library/dom@npm:9.3.4" + dependencies: + "@babel/code-frame": "npm:^7.10.4" + "@babel/runtime": "npm:^7.12.5" + "@types/aria-query": "npm:^5.0.1" + aria-query: "npm:5.1.3" + chalk: "npm:^4.1.0" + dom-accessibility-api: "npm:^0.5.9" + lz-string: "npm:^1.5.0" + pretty-format: "npm:^27.0.2" + checksum: 147da340e8199d7f98f3a4ad8aa22ed55b914b83957efa5eb22bfea021a979ebe5a5182afa9c1e5b7a5f99a7f6744a5a4d9325ae46ec3b33b5a15aed8750d794 + languageName: node + linkType: hard + +"@testing-library/jest-dom@npm:^6.4.0": + version: 6.4.0 + resolution: "@testing-library/jest-dom@npm:6.4.0" + dependencies: + "@adobe/css-tools": "npm:^4.3.2" + "@babel/runtime": "npm:^7.9.2" + aria-query: "npm:^5.0.0" + chalk: "npm:^3.0.0" + css.escape: "npm:^1.5.1" + dom-accessibility-api: "npm:^0.6.3" + lodash: "npm:^4.17.15" + redent: "npm:^3.0.0" + peerDependencies: + "@jest/globals": ">= 28" + "@types/bun": "*" + "@types/jest": ">= 28" + jest: ">= 28" + vitest: ">= 0.32" + peerDependenciesMeta: + "@jest/globals": + optional: true + "@types/bun": + optional: true + "@types/jest": + optional: true + jest: + optional: true + vitest: + optional: true + checksum: 6b7eba9ca388986a721fb12f84adf0f5534bf7ec5851982023a889c4a0afac6e9e91291bdac39e1f59a05adefd7727e30463d98b21c3da32fbfec229ccb11ef1 + languageName: node + linkType: hard + +"@testing-library/react@npm:^14.2.0": + version: 14.2.0 + resolution: "@testing-library/react@npm:14.2.0" + dependencies: + "@babel/runtime": "npm:^7.12.5" + "@testing-library/dom": "npm:^9.0.0" + "@types/react-dom": "npm:^18.0.0" + peerDependencies: + react: ^18.0.0 + react-dom: ^18.0.0 + checksum: dfb6c7eee892a20eeb251094358f37ce88cd3473e12462ceac7e609b1fb365faed21e285ce6c5783abccb3ba19a62c45c61f1eb306812cf9171c473cc5aaca56 + languageName: node + linkType: hard + +"@tootallnate/once@npm:2": + version: 2.0.0 + resolution: "@tootallnate/once@npm:2.0.0" + checksum: 073bfa548026b1ebaf1659eb8961e526be22fa77139b10d60e712f46d2f0f05f4e6c8bec62a087d41088ee9e29faa7f54838568e475ab2f776171003c3920858 + languageName: node + linkType: hard + +"@types/aria-query@npm:^5.0.1": + version: 5.0.4 + resolution: "@types/aria-query@npm:5.0.4" + checksum: dc667bc6a3acc7bba2bccf8c23d56cb1f2f4defaa704cfef595437107efaa972d3b3db9ec1d66bc2711bfc35086821edd32c302bffab36f2e79b97f312069f08 + languageName: node + linkType: hard + "@types/babel__core@npm:^7.1.14": version: 7.20.5 resolution: "@types/babel__core@npm:7.20.5" @@ -1195,6 +1350,17 @@ __metadata: languageName: node linkType: hard +"@types/jsdom@npm:^20.0.0": + version: 20.0.1 + resolution: "@types/jsdom@npm:20.0.1" + dependencies: + "@types/node": "npm:*" + "@types/tough-cookie": "npm:*" + parse5: "npm:^7.0.0" + checksum: 3d4b2a3eab145674ee6da482607c5e48977869109f0f62560bf91ae1a792c9e847ac7c6aaf243ed2e97333cb3c51aef314ffa54a19ef174b8f9592dfcb836b25 + languageName: node + linkType: hard + "@types/minimist@npm:^1.2.0": version: 1.2.5 resolution: "@types/minimist@npm:1.2.5" @@ -1225,6 +1391,40 @@ __metadata: languageName: node linkType: hard +"@types/prop-types@npm:*": + version: 15.7.11 + resolution: "@types/prop-types@npm:15.7.11" + checksum: e53423cf9d510515ef8b47ff42f4f1b65a7b7b37c8704e2dbfcb9a60defe0c0e1f3cb1acfdeb466bad44ca938d7c79bffdd51b48ffb659df2432169d0b27a132 + languageName: node + linkType: hard + +"@types/react-dom@npm:^18, @types/react-dom@npm:^18.0.0": + version: 18.2.18 + resolution: "@types/react-dom@npm:18.2.18" + dependencies: + "@types/react": "npm:*" + checksum: 74dba11a1b8156f3a763f3fca1fb4ec1dcd349153279b8bf79210024a69f994bf2cf0728198c047f8130c5318420ea56281b0a4ef84c8ae943cd9a0cac705220 + languageName: node + linkType: hard + +"@types/react@npm:*, @types/react@npm:^18": + version: 18.2.48 + resolution: "@types/react@npm:18.2.48" + dependencies: + "@types/prop-types": "npm:*" + "@types/scheduler": "npm:*" + csstype: "npm:^3.0.2" + checksum: 7e89f18ea2928b1638f564b156d692894dcb9352a7e0a807873c97e858abe1f23dbd165a25dd088a991344e973fdeef88ba5724bfb64504b74072cbc9c220c3a + languageName: node + linkType: hard + +"@types/scheduler@npm:*": + version: 0.16.8 + resolution: "@types/scheduler@npm:0.16.8" + checksum: f86de504945b8fc41b1f391f847444d542e2e4067cf7e5d9bfeb5d2d2393d3203b1161bc0ef3b1e104d828dabfb60baf06e8d2c27e27ff7e8258e6e618d8c4ec + languageName: node + linkType: hard + "@types/semver@npm:^7.5.0": version: 7.5.6 resolution: "@types/semver@npm:7.5.6" @@ -1239,6 +1439,13 @@ __metadata: languageName: node linkType: hard +"@types/tough-cookie@npm:*": + version: 4.0.5 + resolution: "@types/tough-cookie@npm:4.0.5" + checksum: 68c6921721a3dcb40451543db2174a145ef915bc8bcbe7ad4e59194a0238e776e782b896c7a59f4b93ac6acefca9161fccb31d1ce3b3445cb6faa467297fb473 + languageName: node + linkType: hard + "@types/yargs-parser@npm:*": version: 21.0.3 resolution: "@types/yargs-parser@npm:21.0.3" @@ -1255,6 +1462,13 @@ __metadata: languageName: node linkType: hard +"abab@npm:^2.0.6": + version: 2.0.6 + resolution: "abab@npm:2.0.6" + checksum: 0b245c3c3ea2598fe0025abf7cc7bb507b06949d51e8edae5d12c1b847a0a0c09639abcb94788332b4e2044ac4491c1e8f571b51c7826fd4b0bda1685ad4a278 + languageName: node + linkType: hard + "abbrev@npm:^2.0.0": version: 2.0.0 resolution: "abbrev@npm:2.0.0" @@ -1262,6 +1476,56 @@ __metadata: languageName: node linkType: hard +"abitype@npm:1.0.0": + version: 1.0.0 + resolution: "abitype@npm:1.0.0" + peerDependencies: + typescript: ">=5.0.4" + zod: ^3 >=3.22.0 + peerDependenciesMeta: + typescript: + optional: true + zod: + optional: true + checksum: d685351a725c49f81bdc588e2f3825c28ad96c59048d4f36bf5e4ef30935c31f7e60b5553c70177b77a9e4d8b04290eea43d3d9c1c2562cb130381c88b15d39f + languageName: node + linkType: hard + +"acorn-globals@npm:^7.0.0": + version: 7.0.1 + resolution: "acorn-globals@npm:7.0.1" + dependencies: + acorn: "npm:^8.1.0" + acorn-walk: "npm:^8.0.2" + checksum: 7437f58e92d99292dbebd0e79531af27d706c9f272f31c675d793da6c82d897e75302a8744af13c7f7978a8399840f14a353b60cf21014647f71012982456d2b + languageName: node + linkType: hard + +"acorn-walk@npm:^8.0.2": + version: 8.3.2 + resolution: "acorn-walk@npm:8.3.2" + checksum: 7e2a8dad5480df7f872569b9dccff2f3da7e65f5353686b1d6032ab9f4ddf6e3a2cb83a9b52cf50b1497fd522154dda92f0abf7153290cc79cd14721ff121e52 + languageName: node + linkType: hard + +"acorn@npm:^8.1.0, acorn@npm:^8.8.1": + version: 8.11.3 + resolution: "acorn@npm:8.11.3" + bin: + acorn: bin/acorn + checksum: 3ff155f8812e4a746fee8ecff1f227d527c4c45655bb1fad6347c3cb58e46190598217551b1500f18542d2bbe5c87120cb6927f5a074a59166fbdd9468f0a299 + languageName: node + linkType: hard + +"agent-base@npm:6": + version: 6.0.2 + resolution: "agent-base@npm:6.0.2" + dependencies: + debug: "npm:4" + checksum: dc4f757e40b5f3e3d674bc9beb4f1048f4ee83af189bae39be99f57bf1f48dde166a8b0a5342a84b5944ee8e6ed1e5a9d801858f4ad44764e84957122fe46261 + languageName: node + linkType: hard + "agent-base@npm:^7.0.2, agent-base@npm:^7.1.0": version: 7.1.0 resolution: "agent-base@npm:7.1.0" @@ -1362,6 +1626,24 @@ __metadata: languageName: node linkType: hard +"aria-query@npm:5.1.3": + version: 5.1.3 + resolution: "aria-query@npm:5.1.3" + dependencies: + deep-equal: "npm:^2.0.5" + checksum: edcbc8044c4663d6f88f785e983e6784f98cb62b4ba1e9dd8d61b725d0203e4cfca38d676aee984c31f354103461102a3d583aa4fbe4fd0a89b679744f4e5faf + languageName: node + linkType: hard + +"aria-query@npm:^5.0.0": + version: 5.3.0 + resolution: "aria-query@npm:5.3.0" + dependencies: + dequal: "npm:^2.0.3" + checksum: 2bff0d4eba5852a9dd578ecf47eaef0e82cc52569b48469b0aac2db5145db0b17b7a58d9e01237706d1e14b7a1b0ac9b78e9c97027ad97679dd8f91b85da1469 + languageName: node + linkType: hard + "array-buffer-byte-length@npm:^1.0.0": version: 1.0.0 resolution: "array-buffer-byte-length@npm:1.0.0" @@ -1413,6 +1695,13 @@ __metadata: languageName: node linkType: hard +"asynckit@npm:^0.4.0": + version: 0.4.0 + resolution: "asynckit@npm:0.4.0" + checksum: d73e2ddf20c4eb9337e1b3df1a0f6159481050a5de457c55b14ea2e5cb6d90bb69e004c9af54737a5ee0917fcf2c9e25de67777bbe58261847846066ba75bc9d + languageName: node + linkType: hard + "available-typed-arrays@npm:^1.0.5": version: 1.0.5 resolution: "available-typed-arrays@npm:1.0.5" @@ -1669,7 +1958,17 @@ __metadata: languageName: node linkType: hard -"chalk@npm:^4.0.0, chalk@npm:^4.1.2": +"chalk@npm:^3.0.0": + version: 3.0.0 + resolution: "chalk@npm:3.0.0" + dependencies: + ansi-styles: "npm:^4.1.0" + supports-color: "npm:^7.1.0" + checksum: ee650b0a065b3d7a6fda258e75d3a86fc8e4effa55871da730a9e42ccb035bf5fd203525e5a1ef45ec2582ecc4f65b47eb11357c526b84dd29a14fb162c414d2 + languageName: node + linkType: hard + +"chalk@npm:^4.0.0, chalk@npm:^4.1.0, chalk@npm:^4.1.2": version: 4.1.2 resolution: "chalk@npm:4.1.2" dependencies: @@ -1796,6 +2095,15 @@ __metadata: languageName: node linkType: hard +"combined-stream@npm:^1.0.8": + version: 1.0.8 + resolution: "combined-stream@npm:1.0.8" + dependencies: + delayed-stream: "npm:~1.0.0" + checksum: 0dbb829577e1b1e839fa82b40c07ffaf7de8a09b935cadd355a73652ae70a88b4320db322f6634a4ad93424292fa80973ac6480986247f1734a1137debf271d5 + languageName: node + linkType: hard + "concat-map@npm:0.0.1": version: 0.0.1 resolution: "concat-map@npm:0.0.1" @@ -1849,6 +2157,43 @@ __metadata: languageName: node linkType: hard +"css.escape@npm:^1.5.1": + version: 1.5.1 + resolution: "css.escape@npm:1.5.1" + checksum: 5e09035e5bf6c2c422b40c6df2eb1529657a17df37fda5d0433d722609527ab98090baf25b13970ca754079a0f3161dd3dfc0e743563ded8cfa0749d861c1525 + languageName: node + linkType: hard + +"cssom@npm:^0.5.0": + version: 0.5.0 + resolution: "cssom@npm:0.5.0" + checksum: 8c4121c243baf0678c65dcac29b201ff0067dfecf978de9d5c83b2ff127a8fdefd2bfd54577f5ad8c80ed7d2c8b489ae01c82023545d010c4ecb87683fb403dd + languageName: node + linkType: hard + +"cssom@npm:~0.3.6": + version: 0.3.8 + resolution: "cssom@npm:0.3.8" + checksum: d74017b209440822f9e24d8782d6d2e808a8fdd58fa626a783337222fe1c87a518ba944d4c88499031b4786e68772c99dfae616638d71906fe9f203aeaf14411 + languageName: node + linkType: hard + +"cssstyle@npm:^2.3.0": + version: 2.3.0 + resolution: "cssstyle@npm:2.3.0" + dependencies: + cssom: "npm:~0.3.6" + checksum: 863400da2a458f73272b9a55ba7ff05de40d850f22eb4f37311abebd7eff801cf1cd2fb04c4c92b8c3daed83fe766e52e4112afb7bc88d86c63a9c2256a7d178 + languageName: node + linkType: hard + +"csstype@npm:^3.0.2": + version: 3.1.3 + resolution: "csstype@npm:3.1.3" + checksum: 80c089d6f7e0c5b2bd83cf0539ab41474198579584fa10d86d0cafe0642202343cbc119e076a0b1aece191989477081415d66c9fefbf3c957fc2fc4b7009f248 + languageName: node + linkType: hard + "csv-generate@npm:^3.4.3": version: 3.4.3 resolution: "csv-generate@npm:3.4.3" @@ -1882,6 +2227,17 @@ __metadata: languageName: node linkType: hard +"data-urls@npm:^3.0.2": + version: 3.0.2 + resolution: "data-urls@npm:3.0.2" + dependencies: + abab: "npm:^2.0.6" + whatwg-mimetype: "npm:^3.0.0" + whatwg-url: "npm:^11.0.0" + checksum: 051c3aaaf3e961904f136aab095fcf6dff4db23a7fc759dd8ba7b3e6ba03fc07ef608086caad8ab910d864bd3b5e57d0d2f544725653d77c96a2c971567045f4 + languageName: node + linkType: hard + "dataloader@npm:^1.4.0": version: 1.4.0 resolution: "dataloader@npm:1.4.0" @@ -1918,6 +2274,13 @@ __metadata: languageName: node linkType: hard +"decimal.js@npm:^10.4.2": + version: 10.4.3 + resolution: "decimal.js@npm:10.4.3" + checksum: 6d60206689ff0911f0ce968d40f163304a6c1bc739927758e6efc7921cfa630130388966f16bf6ef6b838cb33679fbe8e7a78a2f3c478afce841fd55ac8fb8ee + languageName: node + linkType: hard + "dedent@npm:^1.0.0": version: 1.5.1 resolution: "dedent@npm:1.5.1" @@ -1930,6 +2293,32 @@ __metadata: languageName: node linkType: hard +"deep-equal@npm:^2.0.5": + version: 2.2.3 + resolution: "deep-equal@npm:2.2.3" + dependencies: + array-buffer-byte-length: "npm:^1.0.0" + call-bind: "npm:^1.0.5" + es-get-iterator: "npm:^1.1.3" + get-intrinsic: "npm:^1.2.2" + is-arguments: "npm:^1.1.1" + is-array-buffer: "npm:^3.0.2" + is-date-object: "npm:^1.0.5" + is-regex: "npm:^1.1.4" + is-shared-array-buffer: "npm:^1.0.2" + isarray: "npm:^2.0.5" + object-is: "npm:^1.1.5" + object-keys: "npm:^1.1.1" + object.assign: "npm:^4.1.4" + regexp.prototype.flags: "npm:^1.5.1" + side-channel: "npm:^1.0.4" + which-boxed-primitive: "npm:^1.0.2" + which-collection: "npm:^1.0.1" + which-typed-array: "npm:^1.1.13" + checksum: a48244f90fa989f63ff5ef0cc6de1e4916b48ea0220a9c89a378561960814794a5800c600254482a2c8fd2e49d6c2e196131dc983976adb024c94a42dfe4949f + languageName: node + linkType: hard + "deepmerge@npm:^4.2.2": version: 4.3.1 resolution: "deepmerge@npm:4.3.1" @@ -1968,6 +2357,20 @@ __metadata: languageName: node linkType: hard +"delayed-stream@npm:~1.0.0": + version: 1.0.0 + resolution: "delayed-stream@npm:1.0.0" + checksum: d758899da03392e6712f042bec80aa293bbe9e9ff1b2634baae6a360113e708b91326594c8a486d475c69d6259afb7efacdc3537bfcda1c6c648e390ce601b19 + languageName: node + linkType: hard + +"dequal@npm:^2.0.3": + version: 2.0.3 + resolution: "dequal@npm:2.0.3" + checksum: f98860cdf58b64991ae10205137c0e97d384c3a4edc7f807603887b7c4b850af1224a33d88012009f150861cbee4fa2d322c4cc04b9313bee312e47f6ecaa888 + languageName: node + linkType: hard + "detect-indent@npm:^6.0.0": version: 6.1.0 resolution: "detect-indent@npm:6.1.0" @@ -1998,6 +2401,29 @@ __metadata: languageName: node linkType: hard +"dom-accessibility-api@npm:^0.5.9": + version: 0.5.16 + resolution: "dom-accessibility-api@npm:0.5.16" + checksum: b2c2eda4fae568977cdac27a9f0c001edf4f95a6a6191dfa611e3721db2478d1badc01db5bb4fa8a848aeee13e442a6c2a4386d65ec65a1436f24715a2f8d053 + languageName: node + linkType: hard + +"dom-accessibility-api@npm:^0.6.3": + version: 0.6.3 + resolution: "dom-accessibility-api@npm:0.6.3" + checksum: 10bee5aa514b2a9a37c87cd81268db607a2e933a050074abc2f6fa3da9080ebed206a320cbc123567f2c3087d22292853bdfdceaffdd4334ffe2af9510b29360 + languageName: node + linkType: hard + +"domexception@npm:^4.0.0": + version: 4.0.0 + resolution: "domexception@npm:4.0.0" + dependencies: + webidl-conversions: "npm:^7.0.0" + checksum: 774277cd9d4df033f852196e3c0077a34dbd15a96baa4d166e0e47138a80f4c0bdf0d94e4703e6ff5883cec56bb821a6fff84402d8a498e31de7c87eb932a294 + languageName: node + linkType: hard + "dotenv@npm:^8.1.0": version: 8.6.0 resolution: "dotenv@npm:8.6.0" @@ -2059,6 +2485,13 @@ __metadata: languageName: node linkType: hard +"entities@npm:^4.4.0": + version: 4.5.0 + resolution: "entities@npm:4.5.0" + checksum: 5b039739f7621f5d1ad996715e53d964035f75ad3b9a4d38c6b3804bb226e282ffeae2443624d8fdd9c47d8e926ae9ac009c54671243f0c3294c26af7cc85250 + languageName: node + linkType: hard + "env-paths@npm:^2.2.0": version: 2.2.1 resolution: "env-paths@npm:2.2.1" @@ -2129,6 +2562,23 @@ __metadata: languageName: node linkType: hard +"es-get-iterator@npm:^1.1.3": + version: 1.1.3 + resolution: "es-get-iterator@npm:1.1.3" + dependencies: + call-bind: "npm:^1.0.2" + get-intrinsic: "npm:^1.1.3" + has-symbols: "npm:^1.0.3" + is-arguments: "npm:^1.1.1" + is-map: "npm:^2.0.2" + is-set: "npm:^2.0.2" + is-string: "npm:^1.0.7" + isarray: "npm:^2.0.5" + stop-iteration-iterator: "npm:^1.0.0" + checksum: ebd11effa79851ea75d7f079405f9d0dc185559fd65d986c6afea59a0ff2d46c2ed8675f19f03dce7429d7f6c14ff9aede8d121fbab78d75cfda6a263030bac0 + languageName: node + linkType: hard + "es-set-tostringtag@npm:^2.0.1": version: 2.0.2 resolution: "es-set-tostringtag@npm:2.0.2" @@ -2181,7 +2631,25 @@ __metadata: languageName: node linkType: hard -"esprima@npm:^4.0.0": +"escodegen@npm:^2.0.0": + version: 2.1.0 + resolution: "escodegen@npm:2.1.0" + dependencies: + esprima: "npm:^4.0.1" + estraverse: "npm:^5.2.0" + esutils: "npm:^2.0.2" + source-map: "npm:~0.6.1" + dependenciesMeta: + source-map: + optional: true + bin: + escodegen: bin/escodegen.js + esgenerate: bin/esgenerate.js + checksum: e1450a1f75f67d35c061bf0d60888b15f62ab63aef9df1901cffc81cffbbb9e8b3de237c5502cf8613a017c1df3a3003881307c78835a1ab54d8c8d2206e01d3 + languageName: node + linkType: hard + +"esprima@npm:^4.0.0, esprima@npm:^4.0.1": version: 4.0.1 resolution: "esprima@npm:4.0.1" bin: @@ -2191,6 +2659,20 @@ __metadata: languageName: node linkType: hard +"estraverse@npm:^5.2.0": + version: 5.3.0 + resolution: "estraverse@npm:5.3.0" + checksum: 1ff9447b96263dec95d6d67431c5e0771eb9776427421260a3e2f0fdd5d6bd4f8e37a7338f5ad2880c9f143450c9b1e4fc2069060724570a49cf9cf0312bd107 + languageName: node + linkType: hard + +"esutils@npm:^2.0.2": + version: 2.0.3 + resolution: "esutils@npm:2.0.3" + checksum: 9a2fe69a41bfdade834ba7c42de4723c97ec776e40656919c62cbd13607c45e127a003f05f724a1ea55e5029a4cf2de444b13009f2af71271e42d93a637137c7 + languageName: node + linkType: hard + "execa@npm:^5.0.0": version: 5.1.1 resolution: "execa@npm:5.1.1" @@ -2349,6 +2831,17 @@ __metadata: languageName: node linkType: hard +"form-data@npm:^4.0.0": + version: 4.0.0 + resolution: "form-data@npm:4.0.0" + dependencies: + asynckit: "npm:^0.4.0" + combined-stream: "npm:^1.0.8" + mime-types: "npm:^2.1.12" + checksum: cb6f3ac49180be03ff07ba3ff125f9eba2ff0b277fb33c7fc47569fc5e616882c5b1c69b9904c4c4187e97dd0419dd03b134174756f296dec62041e6527e2c6e + languageName: node + linkType: hard + "fs-extra@npm:^7.0.1": version: 7.0.1 resolution: "fs-extra@npm:7.0.1" @@ -2658,6 +3151,15 @@ __metadata: languageName: node linkType: hard +"html-encoding-sniffer@npm:^3.0.0": + version: 3.0.0 + resolution: "html-encoding-sniffer@npm:3.0.0" + dependencies: + whatwg-encoding: "npm:^2.0.0" + checksum: b17b3b0fb5d061d8eb15121c3b0b536376c3e295ecaf09ba48dd69c6b6c957839db124fe1e2b3f11329753a4ee01aa7dedf63b7677999e86da17fbbdd82c5386 + languageName: node + linkType: hard + "html-escaper@npm:^2.0.0": version: 2.0.2 resolution: "html-escaper@npm:2.0.2" @@ -2672,6 +3174,17 @@ __metadata: languageName: node linkType: hard +"http-proxy-agent@npm:^5.0.0": + version: 5.0.0 + resolution: "http-proxy-agent@npm:5.0.0" + dependencies: + "@tootallnate/once": "npm:2" + agent-base: "npm:6" + debug: "npm:4" + checksum: 32a05e413430b2c1e542e5c74b38a9f14865301dd69dff2e53ddb684989440e3d2ce0c4b64d25eb63cf6283e6265ff979a61cf93e3ca3d23047ddfdc8df34a32 + languageName: node + linkType: hard + "http-proxy-agent@npm:^7.0.0": version: 7.0.0 resolution: "http-proxy-agent@npm:7.0.0" @@ -2682,6 +3195,16 @@ __metadata: languageName: node linkType: hard +"https-proxy-agent@npm:^5.0.1": + version: 5.0.1 + resolution: "https-proxy-agent@npm:5.0.1" + dependencies: + agent-base: "npm:6" + debug: "npm:4" + checksum: 6dd639f03434003577c62b27cafdb864784ef19b2de430d8ae2a1d45e31c4fd60719e5637b44db1a88a046934307da7089e03d6089ec3ddacc1189d8de8897d1 + languageName: node + linkType: hard + "https-proxy-agent@npm:^7.0.1": version: 7.0.2 resolution: "https-proxy-agent@npm:7.0.2" @@ -2706,6 +3229,15 @@ __metadata: languageName: node linkType: hard +"iconv-lite@npm:0.6.3, iconv-lite@npm:^0.6.2": + version: 0.6.3 + resolution: "iconv-lite@npm:0.6.3" + dependencies: + safer-buffer: "npm:>= 2.1.2 < 3.0.0" + checksum: 98102bc66b33fcf5ac044099d1257ba0b7ad5e3ccd3221f34dd508ab4070edff183276221684e1e0555b145fce0850c9f7d2b60a9fcac50fbb4ea0d6e845a3b1 + languageName: node + linkType: hard + "iconv-lite@npm:^0.4.24": version: 0.4.24 resolution: "iconv-lite@npm:0.4.24" @@ -2715,15 +3247,6 @@ __metadata: languageName: node linkType: hard -"iconv-lite@npm:^0.6.2": - version: 0.6.3 - resolution: "iconv-lite@npm:0.6.3" - dependencies: - safer-buffer: "npm:>= 2.1.2 < 3.0.0" - checksum: 98102bc66b33fcf5ac044099d1257ba0b7ad5e3ccd3221f34dd508ab4070edff183276221684e1e0555b145fce0850c9f7d2b60a9fcac50fbb4ea0d6e845a3b1 - languageName: node - linkType: hard - "ignore@npm:^5.2.0": version: 5.3.0 resolution: "ignore@npm:5.3.0" @@ -2774,7 +3297,7 @@ __metadata: languageName: node linkType: hard -"internal-slot@npm:^1.0.5": +"internal-slot@npm:^1.0.4, internal-slot@npm:^1.0.5": version: 1.0.6 resolution: "internal-slot@npm:1.0.6" dependencies: @@ -2792,6 +3315,16 @@ __metadata: languageName: node linkType: hard +"is-arguments@npm:^1.1.1": + version: 1.1.1 + resolution: "is-arguments@npm:1.1.1" + dependencies: + call-bind: "npm:^1.0.2" + has-tostringtag: "npm:^1.0.0" + checksum: 5ff1f341ee4475350adfc14b2328b38962564b7c2076be2f5bac7bd9b61779efba99b9f844a7b82ba7654adccf8e8eb19d1bb0cc6d1c1a085e498f6793d4328f + languageName: node + linkType: hard + "is-array-buffer@npm:^3.0.1, is-array-buffer@npm:^3.0.2": version: 3.0.2 resolution: "is-array-buffer@npm:3.0.2" @@ -2845,7 +3378,7 @@ __metadata: languageName: node linkType: hard -"is-date-object@npm:^1.0.1": +"is-date-object@npm:^1.0.1, is-date-object@npm:^1.0.5": version: 1.0.5 resolution: "is-date-object@npm:1.0.5" dependencies: @@ -2891,6 +3424,13 @@ __metadata: languageName: node linkType: hard +"is-map@npm:^2.0.1, is-map@npm:^2.0.2": + version: 2.0.2 + resolution: "is-map@npm:2.0.2" + checksum: 119ff9137a37fd131a72fab3f4ab8c9d6a24b0a1ee26b4eff14dc625900d8675a97785eea5f4174265e2006ed076cc24e89f6e57ebd080a48338d914ec9168a5 + languageName: node + linkType: hard + "is-negative-zero@npm:^2.0.2": version: 2.0.2 resolution: "is-negative-zero@npm:2.0.2" @@ -2921,6 +3461,13 @@ __metadata: languageName: node linkType: hard +"is-potential-custom-element-name@npm:^1.0.1": + version: 1.0.1 + resolution: "is-potential-custom-element-name@npm:1.0.1" + checksum: b73e2f22bc863b0939941d369486d308b43d7aef1f9439705e3582bfccaa4516406865e32c968a35f97a99396dac84e2624e67b0a16b0a15086a785e16ce7db9 + languageName: node + linkType: hard + "is-regex@npm:^1.1.4": version: 1.1.4 resolution: "is-regex@npm:1.1.4" @@ -2931,6 +3478,13 @@ __metadata: languageName: node linkType: hard +"is-set@npm:^2.0.1, is-set@npm:^2.0.2": + version: 2.0.2 + resolution: "is-set@npm:2.0.2" + checksum: 5f8bd1880df8c0004ce694e315e6e1e47a3452014be792880bb274a3b2cdb952fdb60789636ca6e084c7947ca8b7ae03ccaf54c93a7fcfed228af810559e5432 + languageName: node + linkType: hard + "is-shared-array-buffer@npm:^1.0.2": version: 1.0.2 resolution: "is-shared-array-buffer@npm:1.0.2" @@ -2983,6 +3537,13 @@ __metadata: languageName: node linkType: hard +"is-weakmap@npm:^2.0.1": + version: 2.0.1 + resolution: "is-weakmap@npm:2.0.1" + checksum: 9c9fec9efa7bf5030a4a927f33fff2a6976b93646259f92b517d3646c073cc5b98283a162ce75c412b060a46de07032444b530f0a4c9b6e012ef8f1741c3a987 + languageName: node + linkType: hard + "is-weakref@npm:^1.0.2": version: 1.0.2 resolution: "is-weakref@npm:1.0.2" @@ -2992,6 +3553,16 @@ __metadata: languageName: node linkType: hard +"is-weakset@npm:^2.0.1": + version: 2.0.2 + resolution: "is-weakset@npm:2.0.2" + dependencies: + call-bind: "npm:^1.0.2" + get-intrinsic: "npm:^1.1.1" + checksum: ef5136bd446ae4603229b897f73efd0720c6ab3ec6cc05c8d5c4b51aa9f95164713c4cad0a22ff1fedf04865ff86cae4648bc1d5eead4b6388e1150525af1cc1 + languageName: node + linkType: hard + "is-windows@npm:^1.0.0": version: 1.0.2 resolution: "is-windows@npm:1.0.2" @@ -3020,6 +3591,15 @@ __metadata: languageName: node linkType: hard +"isows@npm:1.0.3": + version: 1.0.3 + resolution: "isows@npm:1.0.3" + peerDependencies: + ws: "*" + checksum: adec15db704bb66615dd8ef33f889d41ae2a70866b21fa629855da98cc82a628ae072ee221fe9779a9a19866cad2a3e72593f2d161a0ce0e168b4484c7df9cd2 + languageName: node + linkType: hard + "istanbul-lib-coverage@npm:^3.0.0, istanbul-lib-coverage@npm:^3.2.0": version: 3.2.2 resolution: "istanbul-lib-coverage@npm:3.2.2" @@ -3201,7 +3781,7 @@ __metadata: languageName: node linkType: hard -"jest-diff@npm:^29.7.0": +"jest-diff@npm:^29.0.0, jest-diff@npm:^29.7.0": version: 29.7.0 resolution: "jest-diff@npm:29.7.0" dependencies: @@ -3235,6 +3815,27 @@ __metadata: languageName: node linkType: hard +"jest-environment-jsdom@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-environment-jsdom@npm:29.7.0" + dependencies: + "@jest/environment": "npm:^29.7.0" + "@jest/fake-timers": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + "@types/jsdom": "npm:^20.0.0" + "@types/node": "npm:*" + jest-mock: "npm:^29.7.0" + jest-util: "npm:^29.7.0" + jsdom: "npm:^20.0.0" + peerDependencies: + canvas: ^2.5.0 + peerDependenciesMeta: + canvas: + optional: true + checksum: 139b94e2c8ec1bb5a46ce17df5211da65ce867354b3fd4e00fa6a0d1da95902df4cf7881273fc6ea937e5c325d39d6773f0d41b6c469363334de9d489d2c321f + languageName: node + linkType: hard + "jest-environment-node@npm:^29.7.0": version: 29.7.0 resolution: "jest-environment-node@npm:29.7.0" @@ -3249,7 +3850,22 @@ __metadata: languageName: node linkType: hard -"jest-get-type@npm:^29.6.3": +"jest-extended@npm:^4.0.2": + version: 4.0.2 + resolution: "jest-extended@npm:4.0.2" + dependencies: + jest-diff: "npm:^29.0.0" + jest-get-type: "npm:^29.0.0" + peerDependencies: + jest: ">=27.2.5" + peerDependenciesMeta: + jest: + optional: true + checksum: 305fdb6885ab71755830b70690b8db6ea6fd9adca92360ea1a37c0d2fa6567a68b57178dd7707d112fc57b01ab75b66f28a1c550ed0e6b1b8628600a812c2277 + languageName: node + linkType: hard + +"jest-get-type@npm:^29.0.0, jest-get-type@npm:^29.6.3": version: 29.6.3 resolution: "jest-get-type@npm:29.6.3" checksum: 552e7a97a983d3c2d4e412a44eb7de0430ff773dd99f7500962c268d6dfbfa431d7d08f919c9d960530e5f7f78eb47f267ad9b318265e5092b3ff9ede0db7c2b @@ -3537,7 +4153,7 @@ __metadata: languageName: node linkType: hard -"js-tokens@npm:^4.0.0": +"js-tokens@npm:^3.0.0 || ^4.0.0, js-tokens@npm:^4.0.0": version: 4.0.0 resolution: "js-tokens@npm:4.0.0" checksum: e248708d377aa058eacf2037b07ded847790e6de892bbad3dac0abba2e759cb9f121b00099a65195616badcb6eca8d14d975cb3e89eb1cfda644756402c8aeed @@ -3556,6 +4172,45 @@ __metadata: languageName: node linkType: hard +"jsdom@npm:^20.0.0": + version: 20.0.3 + resolution: "jsdom@npm:20.0.3" + dependencies: + abab: "npm:^2.0.6" + acorn: "npm:^8.8.1" + acorn-globals: "npm:^7.0.0" + cssom: "npm:^0.5.0" + cssstyle: "npm:^2.3.0" + data-urls: "npm:^3.0.2" + decimal.js: "npm:^10.4.2" + domexception: "npm:^4.0.0" + escodegen: "npm:^2.0.0" + form-data: "npm:^4.0.0" + html-encoding-sniffer: "npm:^3.0.0" + http-proxy-agent: "npm:^5.0.0" + https-proxy-agent: "npm:^5.0.1" + is-potential-custom-element-name: "npm:^1.0.1" + nwsapi: "npm:^2.2.2" + parse5: "npm:^7.1.1" + saxes: "npm:^6.0.0" + symbol-tree: "npm:^3.2.4" + tough-cookie: "npm:^4.1.2" + w3c-xmlserializer: "npm:^4.0.0" + webidl-conversions: "npm:^7.0.0" + whatwg-encoding: "npm:^2.0.0" + whatwg-mimetype: "npm:^3.0.0" + whatwg-url: "npm:^11.0.0" + ws: "npm:^8.11.0" + xml-name-validator: "npm:^4.0.0" + peerDependencies: + canvas: ^2.5.0 + peerDependenciesMeta: + canvas: + optional: true + checksum: b109073bb826a966db7828f46cb1d7371abecd30f182b143c52be5fe1ed84513bbbe995eb3d157241681fcd18331381e61e3dc004d4949f3a63bca02f6214902 + languageName: node + linkType: hard + "jsesc@npm:^2.5.1": version: 2.5.2 resolution: "jsesc@npm:2.5.2" @@ -3672,6 +4327,24 @@ __metadata: languageName: node linkType: hard +"lodash@npm:^4.17.15": + version: 4.17.21 + resolution: "lodash@npm:4.17.21" + checksum: d8cbea072bb08655bb4c989da418994b073a608dffa608b09ac04b43a791b12aeae7cd7ad919aa4c925f33b48490b5cfe6c1f71d827956071dae2e7bb3a6b74c + languageName: node + linkType: hard + +"loose-envify@npm:^1.1.0": + version: 1.4.0 + resolution: "loose-envify@npm:1.4.0" + dependencies: + js-tokens: "npm:^3.0.0 || ^4.0.0" + bin: + loose-envify: cli.js + checksum: 655d110220983c1a4b9c0c679a2e8016d4b67f6e9c7b5435ff5979ecdb20d0813f4dec0a08674fcbdd4846a3f07edbb50a36811fd37930b94aaa0d9daceb017e + languageName: node + linkType: hard + "lru-cache@npm:^10.0.1, lru-cache@npm:^9.1.1 || ^10.0.0": version: 10.2.0 resolution: "lru-cache@npm:10.2.0" @@ -3707,6 +4380,15 @@ __metadata: languageName: node linkType: hard +"lz-string@npm:^1.5.0": + version: 1.5.0 + resolution: "lz-string@npm:1.5.0" + bin: + lz-string: bin/bin.js + checksum: 36128e4de34791838abe979b19927c26e67201ca5acf00880377af7d765b38d1c60847e01c5ec61b1a260c48029084ab3893a3925fd6e48a04011364b089991b + languageName: node + linkType: hard + "make-dir@npm:^4.0.0": version: 4.0.0 resolution: "make-dir@npm:4.0.0" @@ -3808,6 +4490,22 @@ __metadata: languageName: node linkType: hard +"mime-db@npm:1.52.0": + version: 1.52.0 + resolution: "mime-db@npm:1.52.0" + checksum: 0557a01deebf45ac5f5777fe7740b2a5c309c6d62d40ceab4e23da9f821899ce7a900b7ac8157d4548ddbb7beffe9abc621250e6d182b0397ec7f10c7b91a5aa + languageName: node + linkType: hard + +"mime-types@npm:^2.1.12": + version: 2.1.35 + resolution: "mime-types@npm:2.1.35" + dependencies: + mime-db: "npm:1.52.0" + checksum: 82fb07ec56d8ff1fc999a84f2f217aa46cb6ed1033fefaabd5785b9a974ed225c90dc72fff460259e66b95b73648596dbcc50d51ed69cdf464af2d237d3149b2 + languageName: node + linkType: hard + "mimic-fn@npm:^2.1.0": version: 2.1.0 resolution: "mimic-fn@npm:2.1.0" @@ -4059,6 +4757,13 @@ __metadata: languageName: node linkType: hard +"nwsapi@npm:^2.2.2": + version: 2.2.7 + resolution: "nwsapi@npm:2.2.7" + checksum: 44be198adae99208487a1c886c0a3712264f7bbafa44368ad96c003512fed2753d4e22890ca1e6edb2690c3456a169f2a3c33bfacde1905cf3bf01c7722464db + languageName: node + linkType: hard + "object-inspect@npm:^1.13.1, object-inspect@npm:^1.9.0": version: 1.13.1 resolution: "object-inspect@npm:1.13.1" @@ -4066,6 +4771,16 @@ __metadata: languageName: node linkType: hard +"object-is@npm:^1.1.5": + version: 1.1.5 + resolution: "object-is@npm:1.1.5" + dependencies: + call-bind: "npm:^1.0.2" + define-properties: "npm:^1.1.3" + checksum: 8c263fb03fc28f1ffb54b44b9147235c5e233dc1ca23768e7d2569740b5d860154d7cc29a30220fe28ed6d8008e2422aefdebfe987c103e1c5d190cf02d9d886 + languageName: node + linkType: hard + "object-keys@npm:^1.1.1": version: 1.1.1 resolution: "object-keys@npm:1.1.1" @@ -4197,6 +4912,15 @@ __metadata: languageName: node linkType: hard +"parse5@npm:^7.0.0, parse5@npm:^7.1.1": + version: 7.1.2 + resolution: "parse5@npm:7.1.2" + dependencies: + entities: "npm:^4.4.0" + checksum: 297d7af8224f4b5cb7f6617ecdae98eeaed7f8cbd78956c42785e230505d5a4f07cef352af10d3006fa5c1544b76b57784d3a22d861ae071bbc460c649482bf4 + languageName: node + linkType: hard + "path-exists@npm:^4.0.0": version: 4.0.0 resolution: "path-exists@npm:4.0.0" @@ -4360,6 +5084,17 @@ __metadata: languageName: node linkType: hard +"pretty-format@npm:^27.0.2": + version: 27.5.1 + resolution: "pretty-format@npm:27.5.1" + dependencies: + ansi-regex: "npm:^5.0.1" + ansi-styles: "npm:^5.0.0" + react-is: "npm:^17.0.1" + checksum: 0cbda1031aa30c659e10921fa94e0dd3f903ecbbbe7184a729ad66f2b6e7f17891e8c7d7654c458fa4ccb1a411ffb695b4f17bbcd3fe075fabe181027c4040ed + languageName: node + linkType: hard + "pretty-format@npm:^29.0.0, pretty-format@npm:^29.7.0": version: 29.7.0 resolution: "pretty-format@npm:29.7.0" @@ -4405,6 +5140,20 @@ __metadata: languageName: node linkType: hard +"psl@npm:^1.1.33": + version: 1.9.0 + resolution: "psl@npm:1.9.0" + checksum: 6a3f805fdab9442f44de4ba23880c4eba26b20c8e8e0830eff1cb31007f6825dace61d17203c58bfe36946842140c97a1ba7f67bc63ca2d88a7ee052b65d97ab + languageName: node + linkType: hard + +"punycode@npm:^2.1.1": + version: 2.3.1 + resolution: "punycode@npm:2.3.1" + checksum: 14f76a8206bc3464f794fb2e3d3cc665ae416c01893ad7a02b23766eb07159144ee612ad67af5e84fa4479ccfe67678c4feb126b0485651b302babf66f04f9e9 + languageName: node + linkType: hard + "pure-rand@npm:^6.0.0": version: 6.0.4 resolution: "pure-rand@npm:6.0.4" @@ -4412,6 +5161,13 @@ __metadata: languageName: node linkType: hard +"querystringify@npm:^2.1.1": + version: 2.2.0 + resolution: "querystringify@npm:2.2.0" + checksum: 3258bc3dbdf322ff2663619afe5947c7926a6ef5fb78ad7d384602974c467fadfc8272af44f5eb8cddd0d011aae8fabf3a929a8eee4b86edcc0a21e6bd10f9aa + languageName: node + linkType: hard + "queue-microtask@npm:^1.2.2": version: 1.2.3 resolution: "queue-microtask@npm:1.2.3" @@ -4426,6 +5182,25 @@ __metadata: languageName: node linkType: hard +"react-dom@npm:^18": + version: 18.2.0 + resolution: "react-dom@npm:18.2.0" + dependencies: + loose-envify: "npm:^1.1.0" + scheduler: "npm:^0.23.0" + peerDependencies: + react: ^18.2.0 + checksum: 66dfc5f93e13d0674e78ef41f92ed21dfb80f9c4ac4ac25a4b51046d41d4d2186abc915b897f69d3d0ebbffe6184e7c5876f2af26bfa956f179225d921be713a + languageName: node + linkType: hard + +"react-is@npm:^17.0.1": + version: 17.0.2 + resolution: "react-is@npm:17.0.2" + checksum: 2bdb6b93fbb1820b024b496042cce405c57e2f85e777c9aabd55f9b26d145408f9f74f5934676ffdc46f3dcff656d78413a6e43968e7b3f92eea35b3052e9053 + languageName: node + linkType: hard + "react-is@npm:^18.0.0": version: 18.2.0 resolution: "react-is@npm:18.2.0" @@ -4433,6 +5208,15 @@ __metadata: languageName: node linkType: hard +"react@npm:^18": + version: 18.2.0 + resolution: "react@npm:18.2.0" + dependencies: + loose-envify: "npm:^1.1.0" + checksum: b562d9b569b0cb315e44b48099f7712283d93df36b19a39a67c254c6686479d3980b7f013dc931f4a5a3ae7645eae6386b4aa5eea933baa54ecd0f9acb0902b8 + languageName: node + linkType: hard + "read-pkg-up@npm:^7.0.1": version: 7.0.1 resolution: "read-pkg-up@npm:7.0.1" @@ -4510,6 +5294,13 @@ __metadata: languageName: node linkType: hard +"requires-port@npm:^1.0.0": + version: 1.0.0 + resolution: "requires-port@npm:1.0.0" + checksum: b2bfdd09db16c082c4326e573a82c0771daaf7b53b9ce8ad60ea46aa6e30aaf475fe9b164800b89f93b748d2c234d8abff945d2551ba47bf5698e04cd7713267 + languageName: node + linkType: hard + "resolve-cwd@npm:^3.0.0": version: 3.0.0 resolution: "resolve-cwd@npm:3.0.0" @@ -4623,6 +5414,24 @@ __metadata: languageName: node linkType: hard +"saxes@npm:^6.0.0": + version: 6.0.0 + resolution: "saxes@npm:6.0.0" + dependencies: + xmlchars: "npm:^2.2.0" + checksum: 3847b839f060ef3476eb8623d099aa502ad658f5c40fd60c105ebce86d244389b0d76fcae30f4d0c728d7705ceb2f7e9b34bb54717b6a7dbedaf5dad2d9a4b74 + languageName: node + linkType: hard + +"scheduler@npm:^0.23.0": + version: 0.23.0 + resolution: "scheduler@npm:0.23.0" + dependencies: + loose-envify: "npm:^1.1.0" + checksum: b777f7ca0115e6d93e126ac490dbd82642d14983b3079f58f35519d992fa46260be7d6e6cede433a92db70306310c6f5f06e144f0e40c484199e09c1f7be53dd + languageName: node + linkType: hard + "semver@npm:2 || 3 || 4 || 5": version: 5.7.2 resolution: "semver@npm:5.7.2" @@ -4808,7 +5617,7 @@ __metadata: languageName: node linkType: hard -"source-map@npm:^0.6.0, source-map@npm:^0.6.1": +"source-map@npm:^0.6.0, source-map@npm:^0.6.1, source-map@npm:~0.6.1": version: 0.6.1 resolution: "source-map@npm:0.6.1" checksum: ab55398007c5e5532957cb0beee2368529618ac0ab372d789806f5718123cc4367d57de3904b4e6a4170eb5a0b0f41373066d02ca0735a0c4d75c7d328d3e011 @@ -4884,6 +5693,15 @@ __metadata: languageName: node linkType: hard +"stop-iteration-iterator@npm:^1.0.0": + version: 1.0.0 + resolution: "stop-iteration-iterator@npm:1.0.0" + dependencies: + internal-slot: "npm:^1.0.4" + checksum: c4158d6188aac510d9e92925b58709207bd94699e9c31186a040c80932a687f84a51356b5895e6dc72710aad83addb9411c22171832c9ae0e6e11b7d61b0dfb9 + languageName: node + linkType: hard + "stream-transform@npm:^2.1.3": version: 2.1.3 resolution: "stream-transform@npm:2.1.3" @@ -5047,6 +5865,13 @@ __metadata: languageName: node linkType: hard +"symbol-tree@npm:^3.2.4": + version: 3.2.4 + resolution: "symbol-tree@npm:3.2.4" + checksum: dfbe201ae09ac6053d163578778c53aa860a784147ecf95705de0cd23f42c851e1be7889241495e95c37cabb058edb1052f141387bef68f705afc8f9dd358509 + languageName: node + linkType: hard + "tar@npm:^6.1.11, tar@npm:^6.1.2": version: 6.2.0 resolution: "tar@npm:6.2.0" @@ -5111,6 +5936,27 @@ __metadata: languageName: node linkType: hard +"tough-cookie@npm:^4.1.2": + version: 4.1.3 + resolution: "tough-cookie@npm:4.1.3" + dependencies: + psl: "npm:^1.1.33" + punycode: "npm:^2.1.1" + universalify: "npm:^0.2.0" + url-parse: "npm:^1.5.3" + checksum: 4fc0433a0cba370d57c4b240f30440c848906dee3180bb6e85033143c2726d322e7e4614abb51d42d111ebec119c4876ed8d7247d4113563033eebbc1739c831 + languageName: node + linkType: hard + +"tr46@npm:^3.0.0": + version: 3.0.0 + resolution: "tr46@npm:3.0.0" + dependencies: + punycode: "npm:^2.1.1" + checksum: cdc47cad3a9d0b6cb293e39ccb1066695ae6fdd39b9e4f351b010835a1f8b4f3a6dc3a55e896b421371187f22b48d7dac1b693de4f6551bdef7b6ab6735dfe3b + languageName: node + linkType: hard + "tr46@npm:~0.0.3": version: 0.0.3 resolution: "tr46@npm:0.0.3" @@ -5321,6 +6167,13 @@ __metadata: languageName: node linkType: hard +"universalify@npm:^0.2.0": + version: 0.2.0 + resolution: "universalify@npm:0.2.0" + checksum: cedbe4d4ca3967edf24c0800cfc161c5a15e240dac28e3ce575c689abc11f2c81ccc6532c8752af3b40f9120fb5e454abecd359e164f4f6aa44c29cd37e194fe + languageName: node + linkType: hard + "update-browserslist-db@npm:^1.0.13": version: 1.0.13 resolution: "update-browserslist-db@npm:1.0.13" @@ -5335,6 +6188,16 @@ __metadata: languageName: node linkType: hard +"url-parse@npm:^1.5.3": + version: 1.5.10 + resolution: "url-parse@npm:1.5.10" + dependencies: + querystringify: "npm:^2.1.1" + requires-port: "npm:^1.0.0" + checksum: bd5aa9389f896974beb851c112f63b466505a04b4807cea2e5a3b7092f6fbb75316f0491ea84e44f66fed55f1b440df5195d7e3a8203f64fcefa19d182f5be87 + languageName: node + linkType: hard + "v8-to-istanbul@npm:^9.0.1": version: 9.2.0 resolution: "v8-to-istanbul@npm:9.2.0" @@ -5356,6 +6219,36 @@ __metadata: languageName: node linkType: hard +"viem@npm:^2.5.0": + version: 2.7.1 + resolution: "viem@npm:2.7.1" + dependencies: + "@adraffy/ens-normalize": "npm:1.10.0" + "@noble/curves": "npm:1.2.0" + "@noble/hashes": "npm:1.3.2" + "@scure/bip32": "npm:1.3.2" + "@scure/bip39": "npm:1.2.1" + abitype: "npm:1.0.0" + isows: "npm:1.0.3" + ws: "npm:8.13.0" + peerDependencies: + typescript: ">=5.0.4" + peerDependenciesMeta: + typescript: + optional: true + checksum: cf2f15b2427c52907f0f002842d16a0663a7193dd1795de8fdc4fe11c9dc2b650e8f220f2f562fb06f5541791d3999e352614794b84c6e12c6fb4613f555f9ec + languageName: node + linkType: hard + +"w3c-xmlserializer@npm:^4.0.0": + version: 4.0.0 + resolution: "w3c-xmlserializer@npm:4.0.0" + dependencies: + xml-name-validator: "npm:^4.0.0" + checksum: 02cc66d6efc590bd630086cd88252444120f5feec5c4043932b0d0f74f8b060512f79dc77eb093a7ad04b4f02f39da79ce4af47ceb600f2bf9eacdc83204b1a8 + languageName: node + linkType: hard + "walker@npm:^1.0.8": version: 1.0.8 resolution: "walker@npm:1.0.8" @@ -5381,6 +6274,39 @@ __metadata: languageName: node linkType: hard +"webidl-conversions@npm:^7.0.0": + version: 7.0.0 + resolution: "webidl-conversions@npm:7.0.0" + checksum: 228d8cb6d270c23b0720cb2d95c579202db3aaf8f633b4e9dd94ec2000a04e7e6e43b76a94509cdb30479bd00ae253ab2371a2da9f81446cc313f89a4213a2c4 + languageName: node + linkType: hard + +"whatwg-encoding@npm:^2.0.0": + version: 2.0.0 + resolution: "whatwg-encoding@npm:2.0.0" + dependencies: + iconv-lite: "npm:0.6.3" + checksum: 91b90a49f312dc751496fd23a7e68981e62f33afe938b97281ad766235c4872fc4e66319f925c5e9001502b3040dd25a33b02a9c693b73a4cbbfdc4ad10c3e3e + languageName: node + linkType: hard + +"whatwg-mimetype@npm:^3.0.0": + version: 3.0.0 + resolution: "whatwg-mimetype@npm:3.0.0" + checksum: 323895a1cda29a5fb0b9ca82831d2c316309fede0365047c4c323073e3239067a304a09a1f4b123b9532641ab604203f33a1403b5ca6a62ef405bcd7a204080f + languageName: node + linkType: hard + +"whatwg-url@npm:^11.0.0": + version: 11.0.0 + resolution: "whatwg-url@npm:11.0.0" + dependencies: + tr46: "npm:^3.0.0" + webidl-conversions: "npm:^7.0.0" + checksum: f7ec264976d7c725e0696fcaf9ebe056e14422eacbf92fdbb4462034609cba7d0c85ffa1aab05e9309d42969bcf04632ba5ed3f3882c516d7b093053315bf4c1 + languageName: node + linkType: hard + "whatwg-url@npm:^5.0.0": version: 5.0.0 resolution: "whatwg-url@npm:5.0.0" @@ -5404,6 +6330,18 @@ __metadata: languageName: node linkType: hard +"which-collection@npm:^1.0.1": + version: 1.0.1 + resolution: "which-collection@npm:1.0.1" + dependencies: + is-map: "npm:^2.0.1" + is-set: "npm:^2.0.1" + is-weakmap: "npm:^2.0.1" + is-weakset: "npm:^2.0.1" + checksum: 249f913e1758ed2f06f00706007d87dc22090a80591a56917376e70ecf8fc9ab6c41d98e1c87208bb9648676f65d4b09c0e4d23c56c7afb0f0a73a27d701df5d + languageName: node + linkType: hard + "which-module@npm:^2.0.0": version: 2.0.1 resolution: "which-module@npm:2.0.1" @@ -5517,6 +6455,50 @@ __metadata: languageName: node linkType: hard +"ws@npm:8.13.0": + version: 8.13.0 + resolution: "ws@npm:8.13.0" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ">=5.0.2" + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 579817dbbab3ee46669129c220cfd81ba6cdb9ab5c3e9a105702dd045743c4ab72e33bb384573827c0c481213417cc880e41bc097e0fc541a0b79fa3eb38207d + languageName: node + linkType: hard + +"ws@npm:^8.11.0": + version: 8.16.0 + resolution: "ws@npm:8.16.0" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ">=5.0.2" + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: a7783bb421c648b1e622b423409cb2a58ac5839521d2f689e84bc9dc41d59379c692dd405b15a997ea1d4c0c2e5314ad707332d0c558f15232d2bc07c0b4618a + languageName: node + linkType: hard + +"xml-name-validator@npm:^4.0.0": + version: 4.0.0 + resolution: "xml-name-validator@npm:4.0.0" + checksum: c1bfa219d64e56fee265b2bd31b2fcecefc063ee802da1e73bad1f21d7afd89b943c9e2c97af2942f60b1ad46f915a4c81e00039c7d398b53cf410e29d3c30bd + languageName: node + linkType: hard + +"xmlchars@npm:^2.2.0": + version: 2.2.0 + resolution: "xmlchars@npm:2.2.0" + checksum: b64b535861a6f310c5d9bfa10834cf49127c71922c297da9d4d1b45eeaae40bf9b4363275876088fbe2667e5db028d2cd4f8ee72eed9bede840a67d57dab7593 + languageName: node + linkType: hard + "y18n@npm:^4.0.0": version: 4.0.3 resolution: "y18n@npm:4.0.3"