From 8d47c91c8f5a79185ba98b74216dfb18b9d19587 Mon Sep 17 00:00:00 2001 From: aelf-lxy Date: Mon, 25 Nov 2024 18:46:06 +0800 Subject: [PATCH 1/4] chore: add UT for package bridge --- packages/bridge/babel.config.cjs | 12 ++ .../bridge/coverage/coverage-summary.json | 7 +- packages/bridge/jest-report.xml | 40 +++- packages/bridge/jest.config.ts | 5 +- packages/bridge/package.json | 9 + .../bridge/src/__tests__/mountApp.test.tsx | 57 ++++++ .../src/__tests__/useLockCallback.test.ts | 89 +++++++++ .../bridge/src/__tests__/useVerifier.test.ts | 178 ++++++++++++++++++ packages/bridge/src/index.ts | 8 +- packages/bridge/src/mountApp.tsx | 38 ---- packages/bridge/src/useWallet.ts | 28 --- 11 files changed, 389 insertions(+), 82 deletions(-) create mode 100644 packages/bridge/babel.config.cjs create mode 100644 packages/bridge/src/__tests__/mountApp.test.tsx create mode 100644 packages/bridge/src/__tests__/useLockCallback.test.ts create mode 100644 packages/bridge/src/__tests__/useVerifier.test.ts delete mode 100644 packages/bridge/src/useWallet.ts diff --git a/packages/bridge/babel.config.cjs b/packages/bridge/babel.config.cjs new file mode 100644 index 00000000..95422c49 --- /dev/null +++ b/packages/bridge/babel.config.cjs @@ -0,0 +1,12 @@ +module.exports = { + presets: [ + ['@babel/preset-env', { modules: 'auto' }], + [ + '@babel/preset-react', + { + runtime: 'automatic', + }, + ], + '@babel/preset-typescript', + ], +}; diff --git a/packages/bridge/coverage/coverage-summary.json b/packages/bridge/coverage/coverage-summary.json index 488ca083..8304acbc 100644 --- a/packages/bridge/coverage/coverage-summary.json +++ b/packages/bridge/coverage/coverage-summary.json @@ -1,3 +1,6 @@ -{"total": {"lines":{"total":22,"covered":20,"skipped":0,"pct":90.9},"statements":{"total":27,"covered":22,"skipped":0,"pct":81.48},"functions":{"total":2,"covered":2,"skipped":0,"pct":100},"branches":{"total":5,"covered":5,"skipped":0,"pct":100},"branchesTrue":{"total":0,"covered":0,"skipped":0,"pct":"Unknown"}} -,"/Users/aelf/Documents/Projects/aelf/aelf-web-login/packages/bridge/src/utils.ts": {"lines":{"total":22,"covered":20,"skipped":0,"pct":90.9},"functions":{"total":2,"covered":2,"skipped":0,"pct":100},"statements":{"total":27,"covered":22,"skipped":0,"pct":81.48},"branches":{"total":5,"covered":5,"skipped":0,"pct":100}} +{"total": {"lines":{"total":56,"covered":54,"skipped":0,"pct":96.42},"statements":{"total":58,"covered":56,"skipped":0,"pct":96.55},"functions":{"total":11,"covered":11,"skipped":0,"pct":100},"branches":{"total":16,"covered":16,"skipped":0,"pct":100},"branchesTrue":{"total":0,"covered":0,"skipped":0,"pct":"Unknown"}} +,"/Users/liuxiyang/work/code/aelf-web-login/packages/bridge/src/mountApp.tsx": {"lines":{"total":3,"covered":3,"skipped":0,"pct":100},"functions":{"total":2,"covered":2,"skipped":0,"pct":100},"statements":{"total":3,"covered":3,"skipped":0,"pct":100},"branches":{"total":0,"covered":0,"skipped":0,"pct":100}} +,"/Users/liuxiyang/work/code/aelf-web-login/packages/bridge/src/useLockCallback.ts": {"lines":{"total":10,"covered":10,"skipped":0,"pct":100},"functions":{"total":2,"covered":2,"skipped":0,"pct":100},"statements":{"total":11,"covered":11,"skipped":0,"pct":100},"branches":{"total":2,"covered":2,"skipped":0,"pct":100}} +,"/Users/liuxiyang/work/code/aelf-web-login/packages/bridge/src/useVerifier.ts": {"lines":{"total":25,"covered":25,"skipped":0,"pct":100},"functions":{"total":5,"covered":5,"skipped":0,"pct":100},"statements":{"total":26,"covered":26,"skipped":0,"pct":100},"branches":{"total":8,"covered":8,"skipped":0,"pct":100}} +,"/Users/liuxiyang/work/code/aelf-web-login/packages/bridge/src/utils.ts": {"lines":{"total":18,"covered":16,"skipped":0,"pct":88.88},"functions":{"total":2,"covered":2,"skipped":0,"pct":100},"statements":{"total":18,"covered":16,"skipped":0,"pct":88.88},"branches":{"total":6,"covered":6,"skipped":0,"pct":100}} } diff --git a/packages/bridge/jest-report.xml b/packages/bridge/jest-report.xml index 685de988..1396760d 100644 --- a/packages/bridge/jest-report.xml +++ b/packages/bridge/jest-report.xml @@ -1,13 +1,45 @@ - - - + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/bridge/jest.config.ts b/packages/bridge/jest.config.ts index e04c7daa..1bf3ec63 100644 --- a/packages/bridge/jest.config.ts +++ b/packages/bridge/jest.config.ts @@ -166,9 +166,8 @@ const config = { // testRunner: "jest-circus/runner", // A map from regular expressions to paths to transformers - transform: { - '^.+\\.(t|j)sx?$': '@swc/jest', - }, + transform: { '^.+\\.(js|jsx|ts|tsx)$': 'babel-jest', '^.+\\.js$': 'babel-jest' }, + // An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation transformIgnorePatterns: [ '.pnpm/node_modules/(?!((jest-)?react-native(-.*)?|@react-native(-community)?|victory(-.*)?|uuid)|react-navigation|@shopify/react-native-skia|@react-navigation/.*/)', diff --git a/packages/bridge/package.json b/packages/bridge/package.json index 65c34310..93ae7009 100755 --- a/packages/bridge/package.json +++ b/packages/bridge/package.json @@ -40,11 +40,20 @@ "react-dom": "^18.0.0" }, "devDependencies": { + "babel-jest": "^29.7.0", "@portkey/did-ui-react": "^2.15.9", "@portkey/types": "^2.15.9", "@portkey/utils": "^2.15.9", + "@babel/core": "^7.24.7", + "@babel/preset-env": "^7.24.7", + "@babel/preset-react": "^7.24.7", + "@babel/preset-typescript": "^7.24.7", "@swc/core": "^1.9.3", "@swc/jest": "^0.2.37", + "@testing-library/jest-dom": "^6.5.0", + "@testing-library/react": "^16.0.1", + "@testing-library/react-hooks": "^8.0.1", + "@types/jest": "^29.5.14", "@types/react": "^18.3.1", "@types/react-dom": "^18.3.0", "antd": "4.24.14", diff --git a/packages/bridge/src/__tests__/mountApp.test.tsx b/packages/bridge/src/__tests__/mountApp.test.tsx new file mode 100644 index 00000000..8341344d --- /dev/null +++ b/packages/bridge/src/__tests__/mountApp.test.tsx @@ -0,0 +1,57 @@ +import { renderHook } from '@testing-library/react-hooks'; +import { render, screen } from '@testing-library/react'; +import { useMountSignIn } from '../mountApp'; +import { Bridge } from '../bridge'; +import { NetworkEnum, WalletAdapter } from '@aelf-web-login/wallet-adapter-base'; +import { IBaseConfig } from '../index'; +import '@testing-library/jest-dom'; + +// Mock components and dependencies +jest.mock('../ui', () => jest.fn(() =>
SignInModal Component
)); + +jest.mock('@portkey/did-ui-react', () => ({ + PortkeyProvider: ({ children }: { children: React.ReactNode }) =>
{children}
, +})); + +describe('useMountSignIn', () => { + let bridgeInstance: Bridge; + let wallets: WalletAdapter[]; + let baseConfig: IBaseConfig; + let children: React.ReactNode; + + beforeEach(() => { + bridgeInstance = {} as Bridge; + wallets = [{} as WalletAdapter]; + baseConfig = { + PortkeyProviderProps: {}, + networkType: NetworkEnum.TESTNET, + } as IBaseConfig; + children =
Child Component
; + }); + + it('should render the SignInModal and children wrapped in PortkeyProvider', () => { + const { result } = renderHook(() => + useMountSignIn(bridgeInstance, wallets, baseConfig, children), + ); + + const SignInNode = result.current; + + render(SignInNode); + + expect(screen.getByText('Child Component')).toBeInTheDocument(); + }); + + it('should memoize the rendered component', () => { + const { result, rerender } = renderHook(() => + useMountSignIn(bridgeInstance, wallets, baseConfig, children), + ); + + const firstRender = result.current; + + rerender(); + + const secondRender = result.current; + + expect(firstRender).toBe(secondRender); + }); +}); diff --git a/packages/bridge/src/__tests__/useLockCallback.test.ts b/packages/bridge/src/__tests__/useLockCallback.test.ts new file mode 100644 index 00000000..598038e2 --- /dev/null +++ b/packages/bridge/src/__tests__/useLockCallback.test.ts @@ -0,0 +1,89 @@ +import { renderHook, act } from '@testing-library/react-hooks'; +import useLockCallback from '../useLockCallback'; + +describe('useLockCallback Hook', () => { + it('should execute function and lock', async () => { + const mockFn = jest.fn(async () => { + await new Promise((res) => setTimeout(res, 100)); + return 'result'; + }); + + const { result } = renderHook(() => useLockCallback(mockFn, [])); + + // First call should execute + let value; + await act(async () => { + value = await result.current(); + }); + + expect(mockFn).toHaveBeenCalledTimes(1); + expect(value).toBe('result'); + }); + + it('should prevent concurrent execution', async () => { + const mockFn = jest.fn(async () => { + await new Promise((res) => setTimeout(res, 100)); + }); + + const { result } = renderHook(() => useLockCallback(mockFn, [])); + + // First call will run + let firstCall; + await act(async () => { + firstCall = result.current(); + await result.current(); + }); + + expect(mockFn).toHaveBeenCalledTimes(1); // Should only run once + + await firstCall; // Resolve first call + }); + + it('should allow another execution after previous is finished', async () => { + const mockFn = jest.fn(async () => { + await new Promise((res) => setTimeout(res, 100)); + return 'success'; + }); + + const { result } = renderHook(() => useLockCallback(mockFn, [])); + + // First call + let firstResult; + await act(async () => { + firstResult = await result.current(); + }); + + expect(firstResult).toBe('success'); + + // Second call, after first one has finished + let secondResult; + await act(async () => { + secondResult = await result.current(); + }); + + expect(secondResult).toBe('success'); + expect(mockFn).toHaveBeenCalledTimes(2); // Second call should now be allowed + }); + + it('should release the lock if the callback throws an error', async () => { + const mockFn = jest.fn(async () => { + throw new Error('Test error'); + }); + + const { result } = renderHook(() => useLockCallback(mockFn, [])); + + const lockedCallback = result.current; + + // First call should execute + const firstPromise = lockedCallback(); + expect(mockFn).toHaveBeenCalledTimes(1); + + // Expect the first call to throw an error + await expect(firstPromise).rejects.toThrow('Test error'); + + // Second call should now execute + const secondPromise = lockedCallback(); + await expect(secondPromise).rejects.toThrow('Test error'); + expect(mockFn).toHaveBeenCalledTimes(2); + }); +}); diff --git a/packages/bridge/src/__tests__/useVerifier.test.ts b/packages/bridge/src/__tests__/useVerifier.test.ts new file mode 100644 index 00000000..6e6d72d5 --- /dev/null +++ b/packages/bridge/src/__tests__/useVerifier.test.ts @@ -0,0 +1,178 @@ +import { renderHook, act } from '@testing-library/react-hooks'; +import useVerifier from '../useVerifier'; +import { did, ConfigProvider, useVerifyToken, IVerifier } from '@portkey/did-ui-react'; +import { TChainId } from '@aelf-web-login/wallet-adapter-base'; +import { OperationTypeEnum } from '@portkey/services'; + +jest.mock('@portkey/did-ui-react', () => ({ + did: { + services: { + getRecommendationVerifier: jest.fn(), + }, + }, + ConfigProvider: { + getSocialLoginConfig: jest.fn(), + }, + useVerifyToken: jest.fn(), +})); + +jest.mock('@aelf-web-login/wallet-adapter-base', () => ({ + TChainId: { + AELF: 'AELF', + }, +})); + +jest.mock('@portkey/services', () => ({ + AccountType: { + Apple: 'Apple', + Google: 'Google', + Telegram: 'Telegram', + }, + OperationTypeEnum: { + Login: 'Login', + }, +})); + +describe('useVerifier', () => { + const mockVerifyToken = jest.fn(); + const mockGetRecommendationVerifier = jest.fn(); + const mockSocialLoginConfig = { + Apple: { + clientId: 'apple-client-id', + redirectURI: 'apple-redirect-uri', + customLoginHandler: jest.fn(), + }, + Google: { + clientId: 'google-client-id', + customLoginHandler: jest.fn(), + }, + Telegram: { + customLoginHandler: jest.fn(), + }, + }; + + beforeEach(() => { + (did.services.getRecommendationVerifier as jest.Mock).mockReturnValue( + mockGetRecommendationVerifier, + ); + (ConfigProvider.getSocialLoginConfig as jest.Mock).mockReturnValue(mockSocialLoginConfig); + (useVerifyToken as jest.Mock).mockReturnValue(mockVerifyToken); + }); + + it('should return getRecommendationVerifier and verifySocialToken functions', () => { + const { result } = renderHook(() => useVerifier()); + + expect(result.current.getRecommendationVerifier).toBeInstanceOf(Function); + expect(result.current.verifySocialToken).toBeInstanceOf(Function); + }); + + it('should call getRecommendationVerifier with correct chainId', async () => { + const chainId: TChainId = 'AELF'; + const { result } = renderHook(() => useVerifier()); + + await act(async () => { + await result.current.getRecommendationVerifier(chainId); + }); + + expect(did.services.getRecommendationVerifier).toHaveBeenCalledWith({ chainId }); + }); + + it('should handle Apple account type correctly', async () => { + const chainId: TChainId = 'AELF'; + const { result } = renderHook(() => useVerifier()); + + await act(async () => { + await result.current.verifySocialToken({ + accountType: 'Apple', + token: 'apple-token', + guardianIdentifier: 'guardian-id', + verifier: { id: 'verifier-id' } as IVerifier, + chainId, + operationType: OperationTypeEnum.register, + operationDetails: 'login-details', + }); + }); + + expect(mockVerifyToken).toHaveBeenCalledWith('Apple', expect.any(Object)); + }); + + it('should handle Google account type correctly', async () => { + const chainId: TChainId = 'AELF'; + const { result } = renderHook(() => useVerifier()); + + await act(async () => { + await result.current.verifySocialToken({ + accountType: 'Google', + token: 'google-token', + guardianIdentifier: 'guardian-id', + verifier: { id: 'verifier-id' } as IVerifier, + chainId, + operationType: OperationTypeEnum.register, + operationDetails: 'login-details', + }); + }); + + expect(mockVerifyToken).toHaveBeenCalledWith('Google', expect.any(Object)); + }); + + it('should handle Telegram account type correctly', async () => { + const chainId: TChainId = 'AELF'; + const { result } = renderHook(() => useVerifier()); + + await act(async () => { + await result.current.verifySocialToken({ + accountType: 'Telegram', + token: 'telegram-token', + guardianIdentifier: 'guardian-id', + verifier: { id: 'verifier-id' } as IVerifier, + chainId, + operationType: OperationTypeEnum.register, + operationDetails: 'login-details', + }); + }); + + expect(mockVerifyToken).toHaveBeenCalledWith('Telegram', expect.any(Object)); + }); + + it('should throw error for unsupported account type', async () => { + const chainId: TChainId = 'AELF'; + const { result } = renderHook(() => useVerifier()); + + await act(async () => { + try { + await result.current.verifySocialToken({ + accountType: 'Unsupported' as any, + token: 'unsupported-token', + guardianIdentifier: 'guardian-id', + verifier: { id: 'verifier-id' } as IVerifier, + chainId, + operationType: OperationTypeEnum.register, + operationDetails: 'login-details', + }); + } catch (error) { + expect(error).toBe('accountType is not supported'); + } + }); + }); + + it('should throw error if verifier is missing', async () => { + const chainId: TChainId = 'AELF'; + const { result } = renderHook(() => useVerifier()); + + await act(async () => { + try { + await result.current.verifySocialToken({ + accountType: 'Apple', + token: 'apple-token', + guardianIdentifier: 'guardian-id', + verifier: { id: '' } as IVerifier, + chainId, + operationType: OperationTypeEnum.register, + operationDetails: 'login-details', + }); + } catch (error) { + expect(error).toBe('Verifier is not missing'); + } + }); + }); +}); diff --git a/packages/bridge/src/index.ts b/packages/bridge/src/index.ts index b9bb9262..42195376 100644 --- a/packages/bridge/src/index.ts +++ b/packages/bridge/src/index.ts @@ -1,4 +1,3 @@ -// export * from './mountApp' import { TChainId, SignInDesignEnum, @@ -6,7 +5,7 @@ import { WalletAdapter, } from '@aelf-web-login/wallet-adapter-base'; import { Bridge } from './bridge'; -import { mountApp, unMountApp, useMountSignIn } from './mountApp'; +import { useMountSignIn } from './mountApp'; import { store, AppStore } from './store'; import { GlobalConfigProps } from '@portkey/did-ui-react/dist/_types/src/components/config-provider/types'; import { ConfigProvider, SignInProps, ISignIn, PortkeyProvider } from '@portkey/did-ui-react'; @@ -41,8 +40,6 @@ export interface IConfigProps { export interface IBridgeAPI { instance: Bridge; store: AppStore; - mountApp: () => void; - unMountApp: () => void; getSignIn: (arg: React.ReactNode) => React.ReactNode; } export function initBridge({ baseConfig, wallets, didConfig }: IConfigProps): IBridgeAPI { @@ -50,12 +47,9 @@ export function initBridge({ baseConfig, wallets, didConfig }: IConfigProps): IB ConfigProvider.setGlobalConfig(didConfig); console.log('init bridge'); - // mountApp(bridgeInstance, wallets, baseConfig); return { instance: bridgeInstance, store, - mountApp: mountApp.bind(null, bridgeInstance, wallets, baseConfig), - unMountApp, getSignIn: useMountSignIn.bind(null, bridgeInstance, wallets, baseConfig), }; } diff --git a/packages/bridge/src/mountApp.tsx b/packages/bridge/src/mountApp.tsx index c649a62a..83aa7c09 100644 --- a/packages/bridge/src/mountApp.tsx +++ b/packages/bridge/src/mountApp.tsx @@ -1,37 +1,10 @@ import { WalletAdapter } from '@aelf-web-login/wallet-adapter-base'; -import { createRoot } from 'react-dom/client'; import SignInModal from './ui'; import { Bridge } from './bridge'; import { IBaseConfig } from '.'; import { PortkeyProvider } from '@portkey/did-ui-react'; import { useMemo } from 'react'; -export function mountApp( - bridgeInstance: Bridge, - wallets: WalletAdapter[], - baseConfig: IBaseConfig, -) { - if (typeof window === 'undefined') { - return; - } - console.log('mountApp--'); - const containerElementQuery = 'body'; - const containerElement = document.querySelector(containerElementQuery); - if (!containerElement) { - throw new Error(`Element with query ${containerElementQuery} does not exist.`); - } - - const SignInWrapperDom = document.createElement('div'); - SignInWrapperDom.setAttribute('id', 'sign-in-wrapper'); - const root = createRoot(SignInWrapperDom); - root.render( - - - , - ); - containerElement.appendChild(SignInWrapperDom); -} - export function useMountSignIn( bridgeInstance: Bridge, wallets: WalletAdapter[], @@ -48,14 +21,3 @@ export function useMountSignIn( }, [baseConfig, bridgeInstance, children, wallets]); return SignInNode; } - -export function unMountApp() { - if (typeof window === 'undefined') { - return; - } - const SignInWrapperDom = document.querySelector('#sign-in-wrapper'); - if (!SignInWrapperDom) { - return; - } - document.body.removeChild(SignInWrapperDom); -} diff --git a/packages/bridge/src/useWallet.ts b/packages/bridge/src/useWallet.ts deleted file mode 100644 index 0af883f9..00000000 --- a/packages/bridge/src/useWallet.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { createContext, useContext } from 'react'; - -export interface WalletContextState { - login(): Promise; -} - -const DEFAULT_CONTEXT: Partial = { - login() { - return Promise.reject(logMissingProviderError('call', 'connect')); - }, -}; - -function logMissingProviderError(action: string, property: string) { - const error = new Error( - `You have tried to ${action} "${property}" on a WalletContext without providing one. ` + - 'Make sure to render a WalletProvider as an ancestor of the component that uses WalletContext.', - ); - console.error(error); - return error; -} - -export const WalletContext: React.Context = createContext( - DEFAULT_CONTEXT as WalletContextState, -); - -export function useWallet(): WalletContextState { - return useContext(WalletContext); -} From f42fa5018d4b567c907acb1e9f4f9d449ea5b6b8 Mon Sep 17 00:00:00 2001 From: aelf-lxy Date: Mon, 25 Nov 2024 18:46:36 +0800 Subject: [PATCH 2/4] chore: add UT for package bridge --- packages/react/jest.setup.ts | 2 - packages/react/src/__tests__/context.test.tsx | 2 - pnpm-lock.yaml | 74 ++++++++++++++++++- 3 files changed, 71 insertions(+), 7 deletions(-) diff --git a/packages/react/jest.setup.ts b/packages/react/jest.setup.ts index 446173b6..8bd80ada 100644 --- a/packages/react/jest.setup.ts +++ b/packages/react/jest.setup.ts @@ -11,8 +11,6 @@ jest.mock('@aelf-web-login/wallet-adapter-bridge', () => ({ subscribe: () => null, }, instance: {} as IBridgeAPI['instance'], - mountApp: () => null, - unMountApp: () => null, }), })); diff --git a/packages/react/src/__tests__/context.test.tsx b/packages/react/src/__tests__/context.test.tsx index 5d12b0e2..63362432 100644 --- a/packages/react/src/__tests__/context.test.tsx +++ b/packages/react/src/__tests__/context.test.tsx @@ -10,8 +10,6 @@ const mockBridgeAPI: IBridgeAPI = { subscribe: () => null as unknown as ReturnType, } as unknown as IBridgeAPI['store'], instance: {} as IBridgeAPI['instance'], - mountApp: () => null, - unMountApp: () => null, }; describe('WebLoginProvider', () => { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 900a1b4f..160a3a80 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -155,6 +155,18 @@ importers: specifier: ^18.0.0 version: 18.3.1(react@18.3.1) devDependencies: + '@babel/core': + specifier: ^7.0.0 + version: 7.25.2 + '@babel/preset-env': + specifier: ^7.24.7 + version: 7.25.4(@babel/core@7.25.2) + '@babel/preset-react': + specifier: ^7.24.7 + version: 7.24.7(@babel/core@7.25.2) + '@babel/preset-typescript': + specifier: ^7.24.7 + version: 7.24.7(@babel/core@7.25.2) '@portkey/did-ui-react': specifier: ^2.15.9 version: 2.15.9(@types/react@18.3.9)(aelf-sdk@3.4.16-alpha.7(@babel/core@7.25.2)(encoding@0.1.13)(eslint@8.57.1))(encoding@0.1.13)(i18next@23.15.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -170,6 +182,18 @@ importers: '@swc/jest': specifier: ^0.2.37 version: 0.2.37(@swc/core@1.9.3(@swc/helpers@0.5.1)) + '@testing-library/jest-dom': + specifier: ^6.5.0 + version: 6.5.0 + '@testing-library/react': + specifier: ^16.0.1 + version: 16.0.1(@testing-library/dom@10.4.0)(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@testing-library/react-hooks': + specifier: ^8.0.1 + version: 8.0.1(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@types/jest': + specifier: ^29.5.14 + version: 29.5.14 '@types/react': specifier: ^18.3.1 version: 18.3.9 @@ -179,15 +203,15 @@ importers: antd: specifier: 4.24.14 version: 4.24.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + babel-jest: + specifier: ^29.7.0 + version: 29.7.0(@babel/core@7.25.2) father: specifier: ^4.3.8 version: 4.5.0(@babel/core@7.25.2)(@types/node@22.7.3)(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(type-fest@0.21.3)(webpack@5.95.0(@swc/core@1.9.3(@swc/helpers@0.5.1))) jest: specifier: ^29.7.0 version: 29.7.0(@types/node@22.7.3)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.1))(@types/node@22.7.3)(typescript@5.6.2)) - jest-canvas-mock: - specifier: ^2.5.2 - version: 2.5.2 typescript: specifier: ^5.3.3 version: 5.6.2 @@ -3489,6 +3513,22 @@ packages: resolution: {integrity: sha512-xGGHpBXYSHUUr6XsKBfs85TWlYKpTc37cSBBVrXcib2MkHLboWlkClhWF37JKlDb9KEq3dHs+f2xR7XJEWGBxA==} engines: {node: '>=14', npm: '>=6', yarn: '>=1'} + '@testing-library/react-hooks@8.0.1': + resolution: {integrity: sha512-Aqhl2IVmLt8IovEVarNDFuJDVWVvhnr9/GCU6UUnrYXwgDFF9h2L2o2P9KBni1AST5sT6riAyoukFLyjQUgD/g==} + engines: {node: '>=12'} + peerDependencies: + '@types/react': ^16.9.0 || ^17.0.0 + react: ^16.9.0 || ^17.0.0 + react-dom: ^16.9.0 || ^17.0.0 + react-test-renderer: ^16.9.0 || ^17.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + react-dom: + optional: true + react-test-renderer: + optional: true + '@testing-library/react@14.3.1': resolution: {integrity: sha512-H99XjUhWQw0lTgyMN05W3xQG1Nh4lq574D8keFf1dDoNTJgp66VbJozRaczoF+wsiaPJNt/TcnfpLGufGxSrZQ==} engines: {node: '>=14'} @@ -3597,6 +3637,9 @@ packages: '@types/jest@29.5.13': resolution: {integrity: sha512-wd+MVEZCHt23V0/L642O5APvspWply/rGY5BcW4SUETo2UzPU3Z26qr8jC2qxpimI2jjx9h7+2cj2FwIr01bXg==} + '@types/jest@29.5.14': + resolution: {integrity: sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==} + '@types/js-cookie@2.2.7': resolution: {integrity: sha512-aLkWa0C0vO5b4Sr798E26QgOkss68Un0bLjs7u9qxzPT5CG+8DuNTffWES58YzJs3hrVAOs1wonycqEBqNJubA==} @@ -9322,6 +9365,12 @@ packages: peerDependencies: react: ^18.3.1 + react-error-boundary@3.1.4: + resolution: {integrity: sha512-uM9uPzZJTF6wRQORmSrvOIgt4lJ9MC1sNgEOj2XGsDTRE4kmpWxg7ENK9EWNKJRMAOY9z0MuF4yIfl6gp4sotA==} + engines: {node: '>=10', npm: '>=6'} + peerDependencies: + react: '>=16.13.1' + react-error-boundary@4.0.13: resolution: {integrity: sha512-b6PwbdSv8XeOSYvjt8LpgpKrZ0yGdtZokYwkwV2wlcZbxgopHX/hgPl5VgpnoVOWd868n1hktM8Qm4b+02MiLQ==} peerDependencies: @@ -15253,6 +15302,15 @@ snapshots: lodash: 4.17.21 redent: 3.0.0 + '@testing-library/react-hooks@8.0.1(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/runtime': 7.25.6 + react: 18.3.1 + react-error-boundary: 3.1.4(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.9 + react-dom: 18.3.1(react@18.3.1) + '@testing-library/react@14.3.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.25.6 @@ -15366,6 +15424,11 @@ snapshots: expect: 29.7.0 pretty-format: 29.7.0 + '@types/jest@29.5.14': + dependencies: + expect: 29.7.0 + pretty-format: 29.7.0 + '@types/js-cookie@2.2.7': {} '@types/jsdom@20.0.1': @@ -23179,6 +23242,11 @@ snapshots: react: 18.3.1 scheduler: 0.23.2 + react-error-boundary@3.1.4(react@18.3.1): + dependencies: + '@babel/runtime': 7.25.6 + react: 18.3.1 + react-error-boundary@4.0.13(react@18.3.1): dependencies: '@babel/runtime': 7.25.6 From abd848212a53c1b58f8729368c61a493096ffbe9 Mon Sep 17 00:00:00 2001 From: aelf-lxy Date: Mon, 2 Dec 2024 18:42:39 +0800 Subject: [PATCH 3/4] chore: update isMobile method --- packages/base/package.json | 2 +- packages/base/src/utils/index.ts | 4 +- packages/base/src/utils/isMobile.ts | 199 ++++++++++++++++-- packages/bridge/package.json | 2 +- packages/bridge/src/ui.tsx | 8 +- packages/react/package.json | 2 +- packages/utils/package.json | 2 +- packages/wallets/night-elf/package.json | 2 +- packages/wallets/night-elf/src/index.ts | 4 +- packages/wallets/night-elf/src/utils.ts | 6 +- packages/wallets/portkey-aa/package.json | 2 +- .../wallets/portkey-discover/package.json | 2 +- .../wallets/portkey-discover/src/index.ts | 4 +- 13 files changed, 202 insertions(+), 37 deletions(-) diff --git a/packages/base/package.json b/packages/base/package.json index f61d3c14..65041983 100644 --- a/packages/base/package.json +++ b/packages/base/package.json @@ -1,6 +1,6 @@ { "name": "@aelf-web-login/wallet-adapter-base", - "version": "0.2.2-alpha.4", + "version": "0.2.2-alpha.5", "type": "module", "main": "dist/esm/index.js", "module": "dist/esm/index.js", diff --git a/packages/base/src/utils/index.ts b/packages/base/src/utils/index.ts index 05731caf..e243fd1a 100644 --- a/packages/base/src/utils/index.ts +++ b/packages/base/src/utils/index.ts @@ -1,9 +1,9 @@ -import { isMobile } from './isMobile'; +import { isMobileDevices } from './isMobile'; import { getOriginalAddress } from './getOriginalAddress'; import { isPortkeyApp } from './isPortkeyApp'; import { sleep } from './sleep'; export default { - isMobile, + isMobileDevices, getOriginalAddress, isPortkeyApp, sleep, diff --git a/packages/base/src/utils/isMobile.ts b/packages/base/src/utils/isMobile.ts index c41ddc73..c37dea46 100644 --- a/packages/base/src/utils/isMobile.ts +++ b/packages/base/src/utils/isMobile.ts @@ -1,26 +1,191 @@ -const mobileRE = - /(android|bb\d+|meego).+mobile|armv7l|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series[46]0|samsungbrowser.*mobile|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i; -const notMobileRE = /CrOS/; +const appleIphone = /iPhone/i; +const appleIpod = /iPod/i; +const appleTablet = /iPad/i; +const appleUniversal = /\biOS-universal(?:.+)Mac\b/i; +const androidPhone = /\bAndroid(?:.+)Mobile\b/i; // Match 'Android' AND 'Mobile' +const androidTablet = /Android/i; +const amazonPhone = /(?:SD4930UR|\bSilk(?:.+)Mobile\b)/i; // Match 'Silk' AND 'Mobile' +const amazonTablet = /Silk/i; +const windowsPhone = /Windows Phone/i; +const windowsTablet = /\bWindows(?:.+)ARM\b/i; // Match 'Windows' AND 'ARM' +const otherBlackBerry = /BlackBerry/i; +const otherBlackBerry10 = /BB10/i; +const otherOpera = /Opera Mini/i; +const otherChrome = /\b(CriOS|Chrome)(?:.+)Mobile/i; +const otherFirefox = /Mobile(?:.+)Firefox\b/i; // Match 'Mobile' AND 'Firefox' -export function isMobile() { - if (typeof navigator === 'undefined') { - return false; +export type UserAgent = string; +export type Navigator = { + userAgent: string; + platform: string; + maxTouchPoints?: number; +}; + +const isAppleTabletOnIos13 = (navigator?: Navigator): boolean => { + return ( + typeof navigator !== 'undefined' && + navigator.platform === 'MacIntel' && + typeof navigator.maxTouchPoints === 'number' && + navigator.maxTouchPoints > 1 + ); +}; + +function createMatch(userAgent: UserAgent): (regex: RegExp) => boolean { + return (regex: RegExp): boolean => regex.test(userAgent); +} + +export type isMobileResult = { + apple: { + phone: boolean; + ipod: boolean; + tablet: boolean; + universal: boolean; + device: boolean; + }; + amazon: { + phone: boolean; + tablet: boolean; + device: boolean; + }; + android: { + phone: boolean; + tablet: boolean; + device: boolean; + }; + windows: { + phone: boolean; + tablet: boolean; + device: boolean; + }; + other: { + blackberry: boolean; + blackberry10: boolean; + opera: boolean; + firefox: boolean; + chrome: boolean; + device: boolean; + }; + phone: boolean; + tablet: boolean; + any: boolean; +}; + +export type IsMobileParameter = UserAgent | Navigator; + +export function isMobile(param?: IsMobileParameter): isMobileResult { + let nav: Navigator = { + userAgent: '', + platform: '', + maxTouchPoints: 0, + }; + + if (!param && typeof navigator !== 'undefined') { + nav = { + userAgent: navigator.userAgent, + platform: navigator.platform, + maxTouchPoints: navigator.maxTouchPoints || 0, + }; + } else if (typeof param === 'string') { + nav.userAgent = param; + } else if (param && param.userAgent) { + nav = { + userAgent: param.userAgent, + platform: param.platform, + maxTouchPoints: param.maxTouchPoints || 0, + }; } - const ua = navigator.userAgent; - if (typeof ua !== 'string') return false; + let userAgent = nav.userAgent; - let result = mobileRE.test(ua) && !notMobileRE.test(ua); + // Facebook mobile app's integrated browser adds a bunch of strings that + // match everything. Strip it out if it exists. + let tmp = userAgent.split('[FBAN'); + if (typeof tmp[1] !== 'undefined') { + userAgent = tmp[0]; + } - if ( - !result && - navigator && - navigator.maxTouchPoints > 1 && - ua.indexOf('Macintosh') !== -1 && - ua.indexOf('Safari') !== -1 - ) { - result = true; + // Twitter mobile app's integrated browser on iPad adds a "Twitter for + // iPhone" string. Same probably happens on other tablet platforms. + // This will confuse detection so strip it out if it exists. + tmp = userAgent.split('Twitter'); + if (typeof tmp[1] !== 'undefined') { + userAgent = tmp[0]; } + const match = createMatch(userAgent); + + const result: isMobileResult = { + apple: { + phone: match(appleIphone) && !match(windowsPhone), + ipod: match(appleIpod), + tablet: + !match(appleIphone) && + (match(appleTablet) || isAppleTabletOnIos13(nav)) && + !match(windowsPhone), + universal: match(appleUniversal), + device: + (match(appleIphone) || + match(appleIpod) || + match(appleTablet) || + match(appleUniversal) || + isAppleTabletOnIos13(nav)) && + !match(windowsPhone), + }, + amazon: { + phone: match(amazonPhone), + tablet: !match(amazonPhone) && match(amazonTablet), + device: match(amazonPhone) || match(amazonTablet), + }, + android: { + phone: + (!match(windowsPhone) && match(amazonPhone)) || + (!match(windowsPhone) && match(androidPhone)), + tablet: + !match(windowsPhone) && + !match(amazonPhone) && + !match(androidPhone) && + (match(amazonTablet) || match(androidTablet)), + device: + (!match(windowsPhone) && + (match(amazonPhone) || + match(amazonTablet) || + match(androidPhone) || + match(androidTablet))) || + match(/\bokhttp\b/i), + }, + windows: { + phone: match(windowsPhone), + tablet: match(windowsTablet), + device: match(windowsPhone) || match(windowsTablet), + }, + other: { + blackberry: match(otherBlackBerry), + blackberry10: match(otherBlackBerry10), + opera: match(otherOpera), + firefox: match(otherFirefox), + chrome: match(otherChrome), + device: + match(otherBlackBerry) || + match(otherBlackBerry10) || + match(otherOpera) || + match(otherFirefox) || + match(otherChrome), + }, + any: false, + phone: false, + tablet: false, + }; + + result.any = + result.apple.device || result.android.device || result.windows.device || result.other.device; + // excludes 'other' devices and ipods, targeting touchscreen phones + result.phone = result.apple.phone || result.android.phone || result.windows.phone; + result.tablet = result.apple.tablet || result.android.tablet || result.windows.tablet; + return result; } + +export function isMobileDevices() { + const isM = isMobile(); + return isM.apple.device || isM.android.device; +} diff --git a/packages/bridge/package.json b/packages/bridge/package.json index 93ae7009..d2aaa161 100755 --- a/packages/bridge/package.json +++ b/packages/bridge/package.json @@ -1,6 +1,6 @@ { "name": "@aelf-web-login/wallet-adapter-bridge", - "version": "0.2.2-alpha.4", + "version": "0.2.2-alpha.5", "type": "module", "main": "dist/esm/index.js", "module": "dist/esm/index.js", diff --git a/packages/bridge/src/ui.tsx b/packages/bridge/src/ui.tsx index 74e1c87a..fe4d63e8 100644 --- a/packages/bridge/src/ui.tsx +++ b/packages/bridge/src/ui.tsx @@ -76,14 +76,14 @@ interface ISignInModalProps { wallets: WalletAdapter[]; baseConfig: IBaseConfig; } -const { isMobile } = utils; +const { isMobileDevices } = utils; const ConfirmLogoutDialog = (props: Partial) => { const { title, subTitle, okTxt, cancelTxt, visible, onOk, onCancel, width, mobileWidth } = { ...defaultProps, ...props, }; - const isMobileDevice = isMobile(); + const isMobileDevice = isMobileDevices(); return ( { - const isMobileDevice = isMobile(); + const isMobileDevice = isMobileDevices(); const isWeb2Design = design === 'Web2Design'; const validWalletList = validWallets.map((wallet) => { @@ -250,7 +250,7 @@ const SignInModal: React.FC = (props: ISignInModalProps) => { const guardianList = JSON.parse(enhancedLocalStorage.getItem(GUARDIAN_LIST_FOR_LOGIN) || '[]'); const filteredWallets = wallets.filter((ele) => ele.name !== PORTKEYAA); - const isMobileDevice = isMobile(); + const isMobileDevice = isMobileDevices(); const { noCommonBaseModal = false, SignInComponent, diff --git a/packages/react/package.json b/packages/react/package.json index 97bc3713..6bbcd9d6 100755 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -1,6 +1,6 @@ { "name": "@aelf-web-login/wallet-adapter-react", - "version": "0.2.2-alpha.4", + "version": "0.2.2-alpha.5", "type": "module", "main": "dist/esm/index.js", "module": "dist/esm/index.js", diff --git a/packages/utils/package.json b/packages/utils/package.json index 0baad385..1a96156e 100755 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -1,6 +1,6 @@ { "name": "@aelf-web-login/utils", - "version": "0.2.2-alpha.4", + "version": "0.2.2-alpha.5", "type": "module", "main": "dist/esm/index.js", "module": "dist/esm/index.js", diff --git a/packages/wallets/night-elf/package.json b/packages/wallets/night-elf/package.json index 654e94ff..9e213821 100755 --- a/packages/wallets/night-elf/package.json +++ b/packages/wallets/night-elf/package.json @@ -1,6 +1,6 @@ { "name": "@aelf-web-login/wallet-adapter-night-elf", - "version": "0.2.2-alpha.4", + "version": "0.2.2-alpha.5", "type": "module", "main": "dist/esm/index.js", "module": "dist/esm/index.js", diff --git a/packages/wallets/night-elf/src/index.ts b/packages/wallets/night-elf/src/index.ts index 24686bfc..f65727c9 100644 --- a/packages/wallets/night-elf/src/index.ts +++ b/packages/wallets/night-elf/src/index.ts @@ -79,7 +79,7 @@ export class NightElfWallet extends BaseWalletAdapter { } async login(): Promise { - const { isMobile } = utils; + const { isMobileDevices } = utils; try { this._loginState = LoginStateEnum.CONNECTING; const nodes = this._config.nodes; @@ -91,7 +91,7 @@ export class NightElfWallet extends BaseWalletAdapter { const result = await bridge.login({ chainId: node.chainId, payload: { method: 'LOGIN' } }); if (result.error) throw result.errorMessage || result; - if (isMobile()) { + if (isMobileDevices()) { bridge?.connect!(); } else { await Promise.all(Object.values(bridges).map((i) => i.chain.getChainStatus())); diff --git a/packages/wallets/night-elf/src/utils.ts b/packages/wallets/night-elf/src/utils.ts index e0fa8997..c659597b 100644 --- a/packages/wallets/night-elf/src/utils.ts +++ b/packages/wallets/night-elf/src/utils.ts @@ -5,11 +5,11 @@ import AelfBridgeCheck from './AelfBridgeCheck'; import NightElfCheck from './NightElfCheck'; export const getBridges = async (nodes: INightElfWalletAdapterConfig['nodes'], appName: string) => { - const { isMobile } = utils; + const { isMobileDevices } = utils; try { - const isAElfBridge = isMobile() && !(window as any)?.NightElf; + const isAElfBridge = isMobileDevices() && !(window as any)?.NightElf; console.log('aelf-wallet-debug----------1'); - console.log(`isMobile(): ${isMobile()}`); + console.log(`isMobileDevices(): ${isMobileDevices()}`); console.log(`(window as any)?.NightElf: ${(window as any)?.NightElf}`); const connector = ( diff --git a/packages/wallets/portkey-aa/package.json b/packages/wallets/portkey-aa/package.json index 5ee7cac6..24d39ae8 100755 --- a/packages/wallets/portkey-aa/package.json +++ b/packages/wallets/portkey-aa/package.json @@ -1,6 +1,6 @@ { "name": "@aelf-web-login/wallet-adapter-portkey-aa", - "version": "0.2.2-alpha.4", + "version": "0.2.2-alpha.5", "type": "module", "main": "dist/esm/index.js", "module": "dist/esm/index.js", diff --git a/packages/wallets/portkey-discover/package.json b/packages/wallets/portkey-discover/package.json index eb7dda91..a7350c2f 100755 --- a/packages/wallets/portkey-discover/package.json +++ b/packages/wallets/portkey-discover/package.json @@ -1,6 +1,6 @@ { "name": "@aelf-web-login/wallet-adapter-portkey-discover", - "version": "0.2.2-alpha.4", + "version": "0.2.2-alpha.5", "type": "module", "main": "dist/esm/index.js", "module": "dist/esm/index.js", diff --git a/packages/wallets/portkey-discover/src/index.ts b/packages/wallets/portkey-discover/src/index.ts index 08b2a121..4e5b0e07 100644 --- a/packages/wallets/portkey-discover/src/index.ts +++ b/packages/wallets/portkey-discover/src/index.ts @@ -29,7 +29,7 @@ import detectDiscoverProvider from './detectProvider'; import checkSignatureParams from './signatureParams'; import { zeroFill, openPageInDiscover } from './utils'; -const { isPortkeyApp, isMobile } = utils; +const { isPortkeyApp, isMobileDevices } = utils; type TDiscoverEventsKeys = Array>; @@ -168,7 +168,7 @@ export class PortkeyDiscoverWallet extends BaseWalletAdapter { } async login(): Promise { - if (isMobile() && !isPortkeyApp()) { + if (isMobileDevices() && !isPortkeyApp()) { openPageInDiscover(undefined, undefined); return; } From 17ec80f1b3d109cb781696a62f26718aef4e97b4 Mon Sep 17 00:00:00 2001 From: aelf-lxy Date: Mon, 2 Dec 2024 21:07:37 +0800 Subject: [PATCH 4/4] chore: delete jest of package bridge and replace vi.Mock with Mock --- .../bridge/coverage/coverage-summary.json | 6 - packages/bridge/jest-report.xml | 45 --- packages/bridge/jest.config.ts | 205 ---------- packages/bridge/package.json | 1 - .../bridge/src/__tests__/useVerifier.test.ts | 9 +- pnpm-lock.yaml | 363 +++++++++--------- 6 files changed, 176 insertions(+), 453 deletions(-) delete mode 100644 packages/bridge/coverage/coverage-summary.json delete mode 100644 packages/bridge/jest-report.xml delete mode 100644 packages/bridge/jest.config.ts diff --git a/packages/bridge/coverage/coverage-summary.json b/packages/bridge/coverage/coverage-summary.json deleted file mode 100644 index 8304acbc..00000000 --- a/packages/bridge/coverage/coverage-summary.json +++ /dev/null @@ -1,6 +0,0 @@ -{"total": {"lines":{"total":56,"covered":54,"skipped":0,"pct":96.42},"statements":{"total":58,"covered":56,"skipped":0,"pct":96.55},"functions":{"total":11,"covered":11,"skipped":0,"pct":100},"branches":{"total":16,"covered":16,"skipped":0,"pct":100},"branchesTrue":{"total":0,"covered":0,"skipped":0,"pct":"Unknown"}} -,"/Users/liuxiyang/work/code/aelf-web-login/packages/bridge/src/mountApp.tsx": {"lines":{"total":3,"covered":3,"skipped":0,"pct":100},"functions":{"total":2,"covered":2,"skipped":0,"pct":100},"statements":{"total":3,"covered":3,"skipped":0,"pct":100},"branches":{"total":0,"covered":0,"skipped":0,"pct":100}} -,"/Users/liuxiyang/work/code/aelf-web-login/packages/bridge/src/useLockCallback.ts": {"lines":{"total":10,"covered":10,"skipped":0,"pct":100},"functions":{"total":2,"covered":2,"skipped":0,"pct":100},"statements":{"total":11,"covered":11,"skipped":0,"pct":100},"branches":{"total":2,"covered":2,"skipped":0,"pct":100}} -,"/Users/liuxiyang/work/code/aelf-web-login/packages/bridge/src/useVerifier.ts": {"lines":{"total":25,"covered":25,"skipped":0,"pct":100},"functions":{"total":5,"covered":5,"skipped":0,"pct":100},"statements":{"total":26,"covered":26,"skipped":0,"pct":100},"branches":{"total":8,"covered":8,"skipped":0,"pct":100}} -,"/Users/liuxiyang/work/code/aelf-web-login/packages/bridge/src/utils.ts": {"lines":{"total":18,"covered":16,"skipped":0,"pct":88.88},"functions":{"total":2,"covered":2,"skipped":0,"pct":100},"statements":{"total":18,"covered":16,"skipped":0,"pct":88.88},"branches":{"total":6,"covered":6,"skipped":0,"pct":100}} -} diff --git a/packages/bridge/jest-report.xml b/packages/bridge/jest-report.xml deleted file mode 100644 index 1396760d..00000000 --- a/packages/bridge/jest-report.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/packages/bridge/jest.config.ts b/packages/bridge/jest.config.ts deleted file mode 100644 index 1bf3ec63..00000000 --- a/packages/bridge/jest.config.ts +++ /dev/null @@ -1,205 +0,0 @@ -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-nocheck skip tsc for jest -/** - * For a detailed explanation regarding each configuration property, visit: - * https://jestjs.io/docs/configuration - */ - -import { compilerOptions } from '../../tsconfig.base.json'; -import path from 'path'; -const config = { - // All imported modules in your tests should be mocked automatically - // automock: false, - - // Stop running tests after `n` failures - // bail: 0, - - // The directory where Jest should store its cached dependency information - // cacheDirectory: "/private/var/folders/46/f0k6l2594mg21yh77r2msl8w0000gn/T/jest_dx", - - // Automatically clear mock calls, instances, contexts and results before every test - clearMocks: true, - - // Indicates whether the coverage information should be collected while executing the test - collectCoverage: true, - - // An array of glob patterns indicating a set of files for which coverage information should be collected - // collectCoverageFrom: undefined, - - // The directory where Jest should output its coverage files - coverageDirectory: 'coverage', - - // An array of regexp pattern strings used to skip coverage collection - // coveragePathIgnorePatterns: [ - // "/node_modules/" - // ], - - // Indicates which provider should be used to instrument code for coverage - // coverageProvider: "babel", - - // A list of reporter names that Jest uses when writing coverage reports - coverageReporters: ['json-summary', 'text'], - - // An object that configures minimum threshold enforcement for coverage results - // coverageThreshold: undefined, - - // A path to a custom dependency extractor - // dependencyExtractor: undefined, - - // Make calling deprecated APIs throw helpful error messages - // errorOnDeprecated: false, - - // The default configuration for fake timers - // fakeTimers: { - // "enableGlobally": false - // }, - - // Force coverage collection from ignored files using an array of glob patterns - // forceCoverageMatch: [], - - // A path to a module which exports an async function that is triggered once before all test suites - // globalSetup: undefined, - - // A path to a module which exports an async function that is triggered once after all test suites - // globalTeardown: undefined, - - // A set of global variables that need to be available in all test environments - - // The maximum amount of workers used to run your tests. Can be specified as % or a number. E.g. maxWorkers: 10% will use 10% of your CPU amount + 1 as the maximum worker number. maxWorkers: 2 will use a maximum of 2 workers. - // maxWorkers: "50%", - - // An array of directory names to be searched recursively up from the requiring module's location - // moduleDirectories: [ - // "node_modules" - // ], - - // An array of file extensions your modules use - moduleFileExtensions: ['js', 'jsx', 'ts', 'tsx'], - - // A map from regular expressions to module names or to arrays of module names that allow to stub out resources with a single module - // moduleNameMapper: {}, - - // An array of regexp pattern strings, matched against all module paths before considered 'visible' to the module loader - // modulePathIgnorePatterns: [], - - // Activates notifications for test results - // notify: false, - - // An enum that specifies notification mode. Requires { notify: true } - // notifyMode: "failure-change", - - // A preset that is used as a base for Jest's configuration - // preset: 'babel-jest', - - // Run tests from one or more projects - // projects: undefined, - - // Use this configuration option to add custom reporters to Jest - reporters: [ - 'default', - [ - 'jest-junit', - { - outputDirectory: '.', - outputName: 'jest-report.xml', - }, - ], - ], - - // Automatically reset mock state before every test - // resetMocks: false, - - // Reset the module registry before running each individual test - // resetModules: false, - - // A path to a custom resolver - // resolver: undefined, - - // Automatically restore mock state and implementation before every test - // restoreMocks: false, - - // The root directory that Jest should scan for tests and modules within - // rootDir: './', - - // A list of paths to directories that Jest should use to search for files in - // roots: [ - // "" - // ], - - // Allows you to use a custom runner instead of Jest's default test runner - // runner: "jest-runner", - - // The paths to modules that run some code to configure or set up the testing environment before each test - // setupFiles: [], - - // A list of paths to modules that run some code to configure or set up the testing framework before each test - - // The number of seconds after which a test is considered as slow and reported as such in the results. - // slowTestThreshold: 5, - - // A list of paths to snapshot serializer modules Jest should use for snapshot testing - // snapshotSerializers: [], - - // The test environment that will be used for testing - - // Options that will be passed to the testEnvironment - // testEnvironmentOptions: {}, - - // Adds a location field to test results - // testLocationInResults: false, - - // The glob patterns Jest uses to detect test files - // testMatch: ['**/__tests__/**/*.[jt]s?(x)', '**/?(*.)+(spec|test).[tj]s?(x)'], - - // An array of regexp pattern strings that are matched against all test paths, matched tests are skipped - // testPathIgnorePatterns: [ - // "/node_modules/" - // ], - - // The regexp pattern or array of patterns that Jest uses to detect test files - // testRegex: [], - - // This option allows the use of a custom results processor - // testResultsProcessor: undefined, - - // This option allows use of a custom test runner - // testRunner: "jest-circus/runner", - - // A map from regular expressions to paths to transformers - transform: { '^.+\\.(js|jsx|ts|tsx)$': 'babel-jest', '^.+\\.js$': 'babel-jest' }, - - // An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation - transformIgnorePatterns: [ - '.pnpm/node_modules/(?!((jest-)?react-native(-.*)?|@react-native(-community)?|victory(-.*)?|uuid)|react-navigation|@shopify/react-native-skia|@react-navigation/.*/)', - ], - - // An array of regexp pattern strings that are matched against all modules before the module loader will automatically return a mock for them - // unmockedModulePathPatterns: undefined, - - // Indicates whether each individual test should be reported during the run - // verbose: undefined, - - // An array of regexp patterns that are matched against all source file paths before re-running tests in watch mode - // watchPathIgnorePatterns: [], - - // Whether to use watchman for file crawling - // watchman: true, - roots: [''], - testEnvironment: 'jsdom', - setupFilesAfterEnv: ['/jest.setup.ts'], - modulePaths: ['./', compilerOptions.baseUrl], - moduleDirectories: ['node_modules', 'src'], - moduleNameMapper: { - '\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga|css|less|scss|sass)$': - 'jest-transform-stub', - ...Object.keys(compilerOptions.paths).reduce( - (prev, k) => ({ - ...prev, - [k]: path.resolve(__dirname, `../../${compilerOptions.paths[k][0]}`), - }), - {}, - ), - }, -}; - -export default config; diff --git a/packages/bridge/package.json b/packages/bridge/package.json index 2991d4e0..8bc10eed 100755 --- a/packages/bridge/package.json +++ b/packages/bridge/package.json @@ -33,7 +33,6 @@ }, "dependencies": { "@aelf-web-login/wallet-adapter-base": "workspace:*", - "@aelf-web-login/tools": "workspace:*", "@portkey/contracts": "^2.15.9", "@portkey/services": "^2.15.9", "@reduxjs/toolkit": "^2.2.3", diff --git a/packages/bridge/src/__tests__/useVerifier.test.ts b/packages/bridge/src/__tests__/useVerifier.test.ts index 95d94060..bdc84b3c 100644 --- a/packages/bridge/src/__tests__/useVerifier.test.ts +++ b/packages/bridge/src/__tests__/useVerifier.test.ts @@ -3,6 +3,7 @@ import useVerifier from '../useVerifier'; import { did, ConfigProvider, useVerifyToken, IVerifier } from '@portkey/did-ui-react'; import { TChainId } from '@aelf-web-login/wallet-adapter-base'; import { OperationTypeEnum } from '@portkey/services'; +import type { Mock } from 'vitest'; vi.mock('@portkey/did-ui-react', () => ({ did: { @@ -52,11 +53,9 @@ describe('useVerifier', () => { }; beforeEach(() => { - (did.services.getRecommendationVerifier as vi.Mock).mockReturnValue( - mockGetRecommendationVerifier, - ); - (ConfigProvider.getSocialLoginConfig as vi.Mock).mockReturnValue(mockSocialLoginConfig); - (useVerifyToken as vi.Mock).mockReturnValue(mockVerifyToken); + (did.services.getRecommendationVerifier as Mock).mockReturnValue(mockGetRecommendationVerifier); + (ConfigProvider.getSocialLoginConfig as Mock).mockReturnValue(mockSocialLoginConfig); + (useVerifyToken as Mock).mockReturnValue(mockVerifyToken); }); it('should return getRecommendationVerifier and verifySocialToken functions', () => { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 05be1fdb..5b713474 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -50,7 +50,7 @@ importers: version: 8.0.1(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/node': specifier: ^22.9.3 - version: 22.9.3 + version: 22.10.1 '@types/react': specifier: ^18.3.1 version: 18.3.9 @@ -65,10 +65,10 @@ importers: version: 7.18.0(eslint@8.57.1)(typescript@5.6.2) '@vitest/coverage-v8': specifier: ^2.1.5 - version: 2.1.5(vitest@2.1.5) + version: 2.1.7(vitest@2.1.7(@types/node@22.10.1)(@vitest/ui@2.1.7)(happy-dom@15.11.7)(jsdom@23.2.0)(less@4.2.0)(lightningcss@1.22.1)(sass@1.79.3)(terser@5.34.0)) '@vitest/ui': specifier: ^2.1.5 - version: 2.1.5(vitest@2.1.5) + version: 2.1.7(vitest@2.1.7) babel-plugin-transform-remove-console: specifier: ^6.9.4 version: 6.9.4 @@ -92,10 +92,10 @@ importers: version: 3.2.0(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1) father: specifier: ^4.3.8 - version: 4.5.0(@babel/core@7.25.2)(@types/node@22.9.3)(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(type-fest@0.21.3)(webpack@5.95.0) + version: 4.5.0(@babel/core@7.25.2)(@types/node@22.10.1)(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(type-fest@0.21.3)(webpack@5.95.0) happy-dom: specifier: ^15.11.6 - version: 15.11.6 + version: 15.11.7 husky: specifier: ^8.0.3 version: 8.0.3 @@ -116,10 +116,10 @@ importers: version: 5.6.2 vite-tsconfig-paths: specifier: ^5.1.3 - version: 5.1.3(typescript@5.6.2)(vite@5.4.8(@types/node@22.9.3)(less@4.2.0)(lightningcss@1.22.1)(sass@1.79.3)(terser@5.34.0)) + version: 5.1.3(typescript@5.6.2)(vite@5.4.8(@types/node@22.10.1)(less@4.2.0)(lightningcss@1.22.1)(sass@1.79.3)(terser@5.34.0)) vitest: specifier: ^2.1.5 - version: 2.1.5(@types/node@22.9.3)(@vitest/ui@2.1.5)(happy-dom@15.11.6)(jsdom@23.2.0)(less@4.2.0)(lightningcss@1.22.1)(sass@1.79.3)(terser@5.34.0) + version: 2.1.7(@types/node@22.10.1)(@vitest/ui@2.1.7)(happy-dom@15.11.7)(jsdom@23.2.0)(less@4.2.0)(lightningcss@1.22.1)(sass@1.79.3)(terser@5.34.0) packages/base: dependencies: @@ -167,18 +167,6 @@ importers: specifier: ^18.0.0 version: 18.3.1(react@18.3.1) devDependencies: - '@babel/core': - specifier: ^7.0.0 - version: 7.25.2 - '@babel/preset-env': - specifier: ^7.24.7 - version: 7.25.4(@babel/core@7.25.2) - '@babel/preset-react': - specifier: ^7.24.7 - version: 7.24.7(@babel/core@7.25.2) - '@babel/preset-typescript': - specifier: ^7.24.7 - version: 7.24.7(@babel/core@7.25.2) '@portkey/did-ui-react': specifier: ^2.15.9 version: 2.15.9(@types/react@18.3.9)(aelf-sdk@3.4.16-alpha.7(@babel/core@7.25.2)(encoding@0.1.13)(eslint@8.57.1))(encoding@0.1.13)(i18next@23.15.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -202,7 +190,7 @@ importers: version: 29.7.0(@babel/core@7.25.2) father: specifier: ^4.3.8 - version: 4.5.0(@babel/core@7.25.2)(@types/node@22.9.3)(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(type-fest@0.21.3)(webpack@5.95.0) + version: 4.5.0(@babel/core@7.25.2)(@types/node@22.10.1)(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(type-fest@0.21.3)(webpack@5.95.0) packages/react: dependencies: @@ -242,7 +230,7 @@ importers: version: 18.3.0 father: specifier: ^4.3.8 - version: 4.5.0(@babel/core@7.25.2)(@types/node@22.9.3)(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(type-fest@0.21.3)(webpack@5.95.0) + version: 4.5.0(@babel/core@7.25.2)(@types/node@22.10.1)(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(type-fest@0.21.3)(webpack@5.95.0) packages/starter: dependencies: @@ -291,7 +279,7 @@ importers: version: 18.3.0 '@umijs/lint': specifier: ^4.0.0 - version: 4.3.24(eslint@8.57.1)(jest@29.7.0(@types/node@22.9.3)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.1))(@types/node@22.9.3)(typescript@5.6.2)))(stylelint@14.16.1)(typescript@5.6.2) + version: 4.3.24(eslint@8.57.1)(jest@29.7.0(@types/node@22.10.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.1))(@types/node@22.10.1)(typescript@5.6.2)))(stylelint@14.16.1)(typescript@5.6.2) aelf-design: specifier: ^1.1.1 version: 1.1.1(@types/react@18.3.9)(antd@5.18.0(date-fns@2.30.0)(moment@2.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -300,13 +288,13 @@ importers: version: 5.18.0(date-fns@2.30.0)(moment@2.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) dumi: specifier: 2.2.17 - version: 2.2.17(@babel/core@7.25.2)(@swc/helpers@0.5.1)(@types/node@22.9.3)(@types/react@18.3.9)(eslint@8.57.1)(jest@29.7.0(@types/node@22.9.3)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.1))(@types/node@22.9.3)(typescript@5.6.2)))(lightningcss@1.22.1)(prettier@3.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@3.29.5)(stylelint@14.16.1)(terser@5.34.0)(type-fest@0.21.3)(typescript@5.6.2)(webpack@5.95.0(@swc/core@1.9.3(@swc/helpers@0.5.1))) + version: 2.2.17(@babel/core@7.25.2)(@swc/helpers@0.5.1)(@types/node@22.10.1)(@types/react@18.3.9)(eslint@8.57.1)(jest@29.7.0(@types/node@22.10.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.1))(@types/node@22.10.1)(typescript@5.6.2)))(lightningcss@1.22.1)(prettier@3.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@3.29.5)(stylelint@14.16.1)(terser@5.34.0)(type-fest@0.21.3)(typescript@5.6.2)(webpack@5.95.0(@swc/core@1.9.3(@swc/helpers@0.5.1))) eslint: specifier: ^8.23.0 version: 8.57.1 father: specifier: ^4.1.0 - version: 4.5.0(@babel/core@7.25.2)(@types/node@22.9.3)(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(type-fest@0.21.3)(webpack@5.95.0(@swc/core@1.9.3(@swc/helpers@0.5.1))) + version: 4.5.0(@babel/core@7.25.2)(@types/node@22.10.1)(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(type-fest@0.21.3)(webpack@5.95.0(@swc/core@1.9.3(@swc/helpers@0.5.1))) glob: specifier: ^10.3.12 version: 10.4.5 @@ -372,7 +360,7 @@ importers: version: 3.4.15(@babel/core@7.25.2)(encoding@0.1.13)(eslint@8.57.1) father: specifier: ^4.3.8 - version: 4.5.0(@babel/core@7.25.2)(@types/node@22.9.3)(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(type-fest@0.21.3)(webpack@5.95.0) + version: 4.5.0(@babel/core@7.25.2)(@types/node@22.10.1)(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(type-fest@0.21.3)(webpack@5.95.0) identity-obj-proxy: specifier: ^3.0.0 version: 3.0.0 @@ -403,7 +391,7 @@ importers: version: 5.1.6 father: specifier: ^4.3.8 - version: 4.5.0(@babel/core@7.25.2)(@types/node@22.9.3)(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(type-fest@0.21.3)(webpack@5.95.0) + version: 4.5.0(@babel/core@7.25.2)(@types/node@22.10.1)(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(type-fest@0.21.3)(webpack@5.95.0) typescript: specifier: ^5.3.3 version: 5.6.2 @@ -428,7 +416,7 @@ importers: version: 2.15.9 father: specifier: ^4.3.8 - version: 4.5.0(@babel/core@7.25.2)(@types/node@22.9.3)(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(type-fest@0.21.3)(webpack@5.95.0) + version: 4.5.0(@babel/core@7.25.2)(@types/node@22.10.1)(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(type-fest@0.21.3)(webpack@5.95.0) typescript: specifier: ^5.3.3 version: 5.6.2 @@ -462,7 +450,7 @@ importers: version: 5.1.6 father: specifier: ^4.3.8 - version: 4.5.0(@babel/core@7.25.2)(@types/node@22.9.3)(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(type-fest@0.21.3)(webpack@5.95.0) + version: 4.5.0(@babel/core@7.25.2)(@types/node@22.10.1)(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(type-fest@0.21.3)(webpack@5.95.0) typescript: specifier: ^5.3.3 version: 5.6.2 @@ -3573,11 +3561,8 @@ packages: '@types/node@17.0.45': resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==} - '@types/node@22.7.3': - resolution: {integrity: sha512-qXKfhXXqGTyBskvWEzJZPUxSslAiLaB6JGP1ic/XTH9ctGgzdgYguuLP1C601aRTSDNlLb0jbKqXjZ48GNraSA==} - - '@types/node@22.9.3': - resolution: {integrity: sha512-F3u1fs/fce3FFk+DAxbxc78DF8x0cY09RRL8GnXLmkJ1jvx3TtPdWoTT5/NiYfI5ASqXBmfqJi9dZ3gxMx4lzw==} + '@types/node@22.10.1': + resolution: {integrity: sha512-qKgsUwfHZV2WCWLAnVP1JqnpE6Im6h3Y0+fYgMTasNQ7V++CBX5OT1as0g0f+OyubbFqhf6XVNIsmN4IIhEgGQ==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -3982,20 +3967,20 @@ packages: peerDependencies: vite: ^4.2.0 - '@vitest/coverage-v8@2.1.5': - resolution: {integrity: sha512-/RoopB7XGW7UEkUndRXF87A9CwkoZAJW01pj8/3pgmDVsjMH2IKy6H1A38po9tmUlwhSyYs0az82rbKd9Yaynw==} + '@vitest/coverage-v8@2.1.7': + resolution: {integrity: sha512-deQ4J+yu6nEjmEfcBndbgrRM95IZoRpV1dDVRbZhjUcgYVZz/Wc4YaLiDDt9Sy5qcikrJUZMlrUxDy7dBojebg==} peerDependencies: - '@vitest/browser': 2.1.5 - vitest: 2.1.5 + '@vitest/browser': 2.1.7 + vitest: 2.1.7 peerDependenciesMeta: '@vitest/browser': optional: true - '@vitest/expect@2.1.5': - resolution: {integrity: sha512-nZSBTW1XIdpZvEJyoP/Sy8fUg0b8od7ZpGDkTUcfJ7wz/VoZAFzFfLyxVxGFhUjJzhYqSbIpfMtl/+k/dpWa3Q==} + '@vitest/expect@2.1.7': + resolution: {integrity: sha512-folWk4qQDEedgUyvaZw94LIJuNLoDtY+rhKhhNy0csdwifn/pQz8EWVRnyrW3j0wMpy+xwJT8WiwiYxk+i+s7w==} - '@vitest/mocker@2.1.5': - resolution: {integrity: sha512-XYW6l3UuBmitWqSUXTNXcVBUCRytDogBsWuNXQijc00dtnU/9OqpXWp4OJroVrad/gLIomAq9aW8yWDBtMthhQ==} + '@vitest/mocker@2.1.7': + resolution: {integrity: sha512-nKMTnuJrarFH+7llWxeLmYRldIwTY3OM1DzdytHj0f2+fah6Cyk4XbswhjOiTCnAvXsZAEoo1OaD6rneSSU+3Q==} peerDependencies: msw: ^2.4.9 vite: ^5.0.0 @@ -4005,25 +3990,25 @@ packages: vite: optional: true - '@vitest/pretty-format@2.1.5': - resolution: {integrity: sha512-4ZOwtk2bqG5Y6xRGHcveZVr+6txkH7M2e+nPFd6guSoN638v/1XQ0K06eOpi0ptVU/2tW/pIU4IoPotY/GZ9fw==} + '@vitest/pretty-format@2.1.7': + resolution: {integrity: sha512-HoqRIyfQlXPrRDB43h0lC8eHPUDPwFweMaD6t+psOvwClCC+oZZim6wPMjuoMnRdiFxXqbybg/QbuewgTwK1vA==} - '@vitest/runner@2.1.5': - resolution: {integrity: sha512-pKHKy3uaUdh7X6p1pxOkgkVAFW7r2I818vHDthYLvUyjRfkKOU6P45PztOch4DZarWQne+VOaIMwA/erSSpB9g==} + '@vitest/runner@2.1.7': + resolution: {integrity: sha512-MrDNpXUIXksR57qipYh068SOX4N1hVw6oVILlTlfeTyA1rp0asuljyp15IZwKqhjpWLObFj+tiNrOM4R8UnSqg==} - '@vitest/snapshot@2.1.5': - resolution: {integrity: sha512-zmYw47mhfdfnYbuhkQvkkzYroXUumrwWDGlMjpdUr4jBd3HZiV2w7CQHj+z7AAS4VOtWxI4Zt4bWt4/sKcoIjg==} + '@vitest/snapshot@2.1.7': + resolution: {integrity: sha512-OioIxV/xS393DKdlkRNhmtY0K37qVdCv8w1M2SlLTBSX+fNK6zgcd01VlT1nXdbKVDaB8Zb6BOfQYYoGeGTEGg==} - '@vitest/spy@2.1.5': - resolution: {integrity: sha512-aWZF3P0r3w6DiYTVskOYuhBc7EMc3jvn1TkBg8ttylFFRqNN2XGD7V5a4aQdk6QiUzZQ4klNBSpCLJgWNdIiNw==} + '@vitest/spy@2.1.7': + resolution: {integrity: sha512-e5pzIaIC0LBrb/j1FaF7HXlPJLGtltiAkwXTMqNEHALJc7USSLEwziJ+aIWTmjsWNg89zazg37h7oZITnublsQ==} - '@vitest/ui@2.1.5': - resolution: {integrity: sha512-ERgKkDMTfngrZip6VG5h8L9B5D0AH/4+bga4yR1UzGH7c2cxv3LWogw2Dvuwr9cP3/iKDHYys7kIFLDKpxORTg==} + '@vitest/ui@2.1.7': + resolution: {integrity: sha512-0QUttW85GkdG9d11sEa3HHtNiKLYNMl9YXaho33W6lAy9Pu0n1U6BU09aZmxez/b6YzX9GXHF0MuhvMZl2tjdw==} peerDependencies: - vitest: 2.1.5 + vitest: 2.1.7 - '@vitest/utils@2.1.5': - resolution: {integrity: sha512-yfj6Yrp0Vesw2cwJbP+cl04OC+IHFsuQsrsJBL9pyGeQXE56v1UAOQco+SR55Vf1nQzfV0QJg1Qum7AaWUwwYg==} + '@vitest/utils@2.1.7': + resolution: {integrity: sha512-7gUdvIzCCuIrMZu0WHTvDJo8C1NsUtOqmwmcS3bRHUcfHemj29wmkzLVNuWQD7WHoBD/+I7WIgrnzt7kxR54ow==} '@webassemblyjs/ast@1.12.1': resolution: {integrity: sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==} @@ -6235,8 +6220,8 @@ packages: handle-thing@2.0.1: resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==} - happy-dom@15.11.6: - resolution: {integrity: sha512-elX7iUTu+5+3b2+NGQc0L3eWyq9jKhuJJ4GpOMxxT/c2pg9O3L5H3ty2VECX0XXZgRmmRqXyOK8brA2hDI6LsQ==} + happy-dom@15.11.7: + resolution: {integrity: sha512-KyrFvnl+J9US63TEzwoiJOQzZBJY7KgBushJA8X61DMbNsH+2ONkDuLDnCnwUiPTF42tLoEmrPyoqbenVA5zrg==} engines: {node: '>=18.0.0'} hard-rejection@2.1.0: @@ -7409,8 +7394,8 @@ packages: resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} hasBin: true - magic-string@0.30.13: - resolution: {integrity: sha512-8rYBO+MsWkgjDSOvLomYnzhdwEG51olQ4zL5KXnNJWV5MNmrb4rTZdrtkhxjnD/QyZUqR/Z/XDsUs/4ej2nx0g==} + magic-string@0.30.14: + resolution: {integrity: sha512-5c99P1WKTed11ZC0HMJOj6CDIue6F8ySu+bJL+85q1zBEIY8IklrJ1eiKC2NDRh3Ct3FcvmJPyQHb9erXMTJNw==} magicast@0.3.5: resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==} @@ -10474,8 +10459,8 @@ packages: unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} - undici-types@6.19.8: - resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + undici-types@6.20.0: + resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} unfetch@5.0.0: resolution: {integrity: sha512-3xM2c89siXg0nHvlmYsQ2zkLASvVMBisZm5lF3gFDqfF2xonNStDJyMpvaOBe0a1Edxmqrf2E0HBdmy9QyZaeg==} @@ -10691,9 +10676,9 @@ packages: vfile@5.3.7: resolution: {integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==} - vite-node@2.1.5: - resolution: {integrity: sha512-rd0QIgx74q4S1Rd56XIiL2cYEdyWn13cunYBIuqh9mpmQr7gGS0IxXoP8R6OaZtNQQLyXSWbd4rXKYUbhFpK5w==} - engines: {node: ^18.0.0 || >=20.0.0} + vite-node@2.1.7: + resolution: {integrity: sha512-b/5MxSWd0ftWt1B1LHfzCw0ASzaxHztUwP0rcsBhkDSGy9ZDEDieSIjFG3I78nI9dUN0eSeD6LtuKPZGjwwpZQ==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true vite-tsconfig-paths@5.1.3: @@ -10763,15 +10748,15 @@ packages: terser: optional: true - vitest@2.1.5: - resolution: {integrity: sha512-P4ljsdpuzRTPI/kbND2sDZ4VmieerR2c9szEZpjc+98Z9ebvnXmM5+0tHEKqYZumXqlvnmfWsjeFOjXVriDG7A==} - engines: {node: ^18.0.0 || >=20.0.0} + vitest@2.1.7: + resolution: {integrity: sha512-wzJ7Wri44ufkzTZbI1lHsdHfiGdFRmnJ9qIudDQ6tknjJeHhF5QgNSSjk7KRZUU535qEiEXFJ7tSHqyzyIv0jQ==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' - '@types/node': ^18.0.0 || >=20.0.0 - '@vitest/browser': 2.1.5 - '@vitest/ui': 2.1.5 + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + '@vitest/browser': 2.1.7 + '@vitest/ui': 2.1.7 happy-dom: '*' jsdom: '*' peerDependenciesMeta: @@ -13510,28 +13495,28 @@ snapshots: '@jest/console@29.7.0': dependencies: '@jest/types': 29.6.3 - '@types/node': 22.9.3 + '@types/node': 22.10.1 chalk: 4.1.2 jest-message-util: 29.7.0 jest-util: 29.7.0 slash: 3.0.0 optional: true - '@jest/core@29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.1))(@types/node@22.9.3)(typescript@5.6.2))': + '@jest/core@29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.1))(@types/node@22.10.1)(typescript@5.6.2))': dependencies: '@jest/console': 29.7.0 '@jest/reporters': 29.7.0 '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.9.3 + '@types/node': 22.10.1 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.9.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@22.9.3)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.1))(@types/node@22.9.3)(typescript@5.6.2)) + jest-config: 29.7.0(@types/node@22.10.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.1))(@types/node@22.10.1)(typescript@5.6.2)) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -13557,7 +13542,7 @@ snapshots: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.9.3 + '@types/node': 22.10.1 jest-mock: 29.7.0 optional: true @@ -13578,7 +13563,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 22.9.3 + '@types/node': 22.10.1 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -13602,7 +13587,7 @@ snapshots: '@jest/transform': 29.7.0 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.25 - '@types/node': 22.9.3 + '@types/node': 22.10.1 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 @@ -13681,7 +13666,7 @@ snapshots: dependencies: '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 22.9.3 + '@types/node': 22.10.1 '@types/yargs': 16.0.9 chalk: 4.1.2 @@ -13690,7 +13675,7 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 22.9.3 + '@types/node': 22.10.1 '@types/yargs': 17.0.33 chalk: 4.1.2 @@ -13754,20 +13739,20 @@ snapshots: nanoid: 5.0.7 react: 18.3.1 - '@microsoft/api-extractor-model@7.28.4(@types/node@22.9.3)': + '@microsoft/api-extractor-model@7.28.4(@types/node@22.10.1)': dependencies: '@microsoft/tsdoc': 0.14.2 '@microsoft/tsdoc-config': 0.16.2 - '@rushstack/node-core-library': 3.63.0(@types/node@22.9.3) + '@rushstack/node-core-library': 3.63.0(@types/node@22.10.1) transitivePeerDependencies: - '@types/node' - '@microsoft/api-extractor@7.39.1(@types/node@22.9.3)': + '@microsoft/api-extractor@7.39.1(@types/node@22.10.1)': dependencies: - '@microsoft/api-extractor-model': 7.28.4(@types/node@22.9.3) + '@microsoft/api-extractor-model': 7.28.4(@types/node@22.10.1) '@microsoft/tsdoc': 0.14.2 '@microsoft/tsdoc-config': 0.16.2 - '@rushstack/node-core-library': 3.63.0(@types/node@22.9.3) + '@rushstack/node-core-library': 3.63.0(@types/node@22.10.1) '@rushstack/rig-package': 0.5.1 '@rushstack/ts-command-line': 4.17.1 colors: 1.2.5 @@ -14506,7 +14491,7 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.22.4': optional: true - '@rushstack/node-core-library@3.63.0(@types/node@22.9.3)': + '@rushstack/node-core-library@3.63.0(@types/node@22.10.1)': dependencies: colors: 1.2.5 fs-extra: 7.0.1 @@ -14516,7 +14501,7 @@ snapshots: semver: 7.5.4 z-schema: 5.0.5 optionalDependencies: - '@types/node': 22.9.3 + '@types/node': 22.10.1 '@rushstack/rig-package@0.5.1': dependencies: @@ -15153,7 +15138,7 @@ snapshots: '@types/bn.js@5.1.6': dependencies: - '@types/node': 22.7.3 + '@types/node': 22.10.1 '@types/debug@4.1.12': dependencies: @@ -15170,11 +15155,11 @@ snapshots: '@types/fs-extra@11.0.1': dependencies: '@types/jsonfile': 6.1.4 - '@types/node': 22.9.3 + '@types/node': 22.10.1 '@types/graceful-fs@4.1.9': dependencies: - '@types/node': 22.9.3 + '@types/node': 22.10.1 '@types/hapi__joi@17.1.9': {} @@ -15210,11 +15195,11 @@ snapshots: '@types/jsonfile@6.1.4': dependencies: - '@types/node': 22.9.3 + '@types/node': 22.10.1 '@types/keyv@3.1.4': dependencies: - '@types/node': 22.9.3 + '@types/node': 22.10.1 '@types/long@4.0.2': {} @@ -15232,13 +15217,9 @@ snapshots: '@types/node@17.0.45': {} - '@types/node@22.7.3': - dependencies: - undici-types: 6.19.8 - - '@types/node@22.9.3': + '@types/node@22.10.1': dependencies: - undici-types: 6.19.8 + undici-types: 6.20.0 '@types/normalize-package-data@2.4.4': {} @@ -15265,18 +15246,18 @@ snapshots: '@types/readable-stream@2.3.15': dependencies: - '@types/node': 22.9.3 + '@types/node': 22.10.1 safe-buffer: 5.1.2 '@types/resolve@1.20.6': {} '@types/responselike@1.0.3': dependencies: - '@types/node': 22.9.3 + '@types/node': 22.10.1 '@types/sax@1.2.7': dependencies: - '@types/node': 22.9.3 + '@types/node': 22.10.1 '@types/semver@7.5.8': {} @@ -15520,18 +15501,18 @@ snapshots: transitivePeerDependencies: - supports-color - '@umijs/bundler-vite@4.3.24(@types/node@22.9.3)(lightningcss@1.22.1)(postcss@8.4.47)(rollup@3.29.5)(sass@1.79.3)(terser@5.34.0)': + '@umijs/bundler-vite@4.3.24(@types/node@22.10.1)(lightningcss@1.22.1)(postcss@8.4.47)(rollup@3.29.5)(sass@1.79.3)(terser@5.34.0)': dependencies: '@svgr/core': 6.5.1 '@umijs/bundler-utils': 4.3.24 '@umijs/utils': 4.3.24 - '@vitejs/plugin-react': 4.0.0(vite@4.5.2(@types/node@22.9.3)(less@4.1.3)(lightningcss@1.22.1)(sass@1.79.3)(terser@5.34.0)) + '@vitejs/plugin-react': 4.0.0(vite@4.5.2(@types/node@22.10.1)(less@4.1.3)(lightningcss@1.22.1)(sass@1.79.3)(terser@5.34.0)) core-js: 3.34.0 less: 4.1.3 postcss-preset-env: 7.5.0(postcss@8.4.47) rollup-plugin-visualizer: 5.9.0(rollup@3.29.5) systemjs: 6.15.1 - vite: 4.5.2(@types/node@22.9.3)(less@4.1.3)(lightningcss@1.22.1)(sass@1.79.3)(terser@5.34.0) + vite: 4.5.2(@types/node@22.10.1)(less@4.1.3)(lightningcss@1.22.1)(sass@1.79.3)(terser@5.34.0) transitivePeerDependencies: - '@types/node' - lightningcss @@ -15700,7 +15681,7 @@ snapshots: '@babel/runtime': 7.25.6 query-string: 6.14.1 - '@umijs/lint@4.3.24(eslint@8.57.1)(jest@29.7.0(@types/node@22.9.3)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.1))(@types/node@22.9.3)(typescript@5.6.2)))(stylelint@14.16.1)(typescript@5.6.2)': + '@umijs/lint@4.3.24(eslint@8.57.1)(jest@29.7.0(@types/node@22.10.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.1))(@types/node@22.10.1)(typescript@5.6.2)))(stylelint@14.16.1)(typescript@5.6.2)': dependencies: '@babel/core': 7.25.2 '@babel/eslint-parser': 7.23.3(@babel/core@7.25.2)(eslint@8.57.1) @@ -15708,7 +15689,7 @@ snapshots: '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2) '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.6.2) '@umijs/babel-preset-umi': 4.3.24 - eslint-plugin-jest: 27.2.3(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(jest@29.7.0(@types/node@22.9.3)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.1))(@types/node@22.9.3)(typescript@5.6.2)))(typescript@5.6.2) + eslint-plugin-jest: 27.2.3(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(jest@29.7.0(@types/node@22.10.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.1))(@types/node@22.10.1)(typescript@5.6.2)))(typescript@5.6.2) eslint-plugin-react: 7.33.2(eslint@8.57.1) eslint-plugin-react-hooks: 4.6.0(eslint@8.57.1) postcss: 8.4.47 @@ -15789,7 +15770,7 @@ snapshots: dependencies: tsx: 3.12.2 - '@umijs/preset-umi@4.3.24(@types/node@22.9.3)(@types/react@18.3.9)(lightningcss@1.22.1)(rollup@3.29.5)(sass@1.79.3)(terser@5.34.0)(type-fest@0.21.3)(typescript@5.6.2)(webpack@5.95.0(@swc/core@1.9.3(@swc/helpers@0.5.1)))': + '@umijs/preset-umi@4.3.24(@types/node@22.10.1)(@types/react@18.3.9)(lightningcss@1.22.1)(rollup@3.29.5)(sass@1.79.3)(terser@5.34.0)(type-fest@0.21.3)(typescript@5.6.2)(webpack@5.95.0(@swc/core@1.9.3(@swc/helpers@0.5.1)))': dependencies: '@iconify/utils': 2.1.1 '@svgr/core': 6.5.1 @@ -15798,7 +15779,7 @@ snapshots: '@umijs/bundler-esbuild': 4.3.24 '@umijs/bundler-mako': 0.8.14 '@umijs/bundler-utils': 4.3.24 - '@umijs/bundler-vite': 4.3.24(@types/node@22.9.3)(lightningcss@1.22.1)(postcss@8.4.47)(rollup@3.29.5)(sass@1.79.3)(terser@5.34.0) + '@umijs/bundler-vite': 4.3.24(@types/node@22.10.1)(lightningcss@1.22.1)(postcss@8.4.47)(rollup@3.29.5)(sass@1.79.3)(terser@5.34.0) '@umijs/bundler-webpack': 4.3.24(type-fest@0.21.3)(typescript@5.6.2)(webpack@5.95.0(@swc/core@1.9.3(@swc/helpers@0.5.1))) '@umijs/core': 4.3.24 '@umijs/did-you-know': 1.0.3 @@ -15933,17 +15914,17 @@ snapshots: '@vercel/ncc@0.33.3': {} - '@vitejs/plugin-react@4.0.0(vite@4.5.2(@types/node@22.9.3)(less@4.1.3)(lightningcss@1.22.1)(sass@1.79.3)(terser@5.34.0))': + '@vitejs/plugin-react@4.0.0(vite@4.5.2(@types/node@22.10.1)(less@4.1.3)(lightningcss@1.22.1)(sass@1.79.3)(terser@5.34.0))': dependencies: '@babel/core': 7.25.2 '@babel/plugin-transform-react-jsx-self': 7.24.7(@babel/core@7.25.2) '@babel/plugin-transform-react-jsx-source': 7.24.7(@babel/core@7.25.2) react-refresh: 0.14.2 - vite: 4.5.2(@types/node@22.9.3)(less@4.1.3)(lightningcss@1.22.1)(sass@1.79.3)(terser@5.34.0) + vite: 4.5.2(@types/node@22.10.1)(less@4.1.3)(lightningcss@1.22.1)(sass@1.79.3)(terser@5.34.0) transitivePeerDependencies: - supports-color - '@vitest/coverage-v8@2.1.5(vitest@2.1.5)': + '@vitest/coverage-v8@2.1.7(vitest@2.1.7(@types/node@22.10.1)(@vitest/ui@2.1.7)(happy-dom@15.11.7)(jsdom@23.2.0)(less@4.2.0)(lightningcss@1.22.1)(sass@1.79.3)(terser@5.34.0))': dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 0.2.3 @@ -15952,63 +15933,63 @@ snapshots: istanbul-lib-report: 3.0.1 istanbul-lib-source-maps: 5.0.6 istanbul-reports: 3.1.7 - magic-string: 0.30.13 + magic-string: 0.30.14 magicast: 0.3.5 std-env: 3.8.0 test-exclude: 7.0.1 tinyrainbow: 1.2.0 - vitest: 2.1.5(@types/node@22.9.3)(@vitest/ui@2.1.5)(happy-dom@15.11.6)(jsdom@23.2.0)(less@4.2.0)(lightningcss@1.22.1)(sass@1.79.3)(terser@5.34.0) + vitest: 2.1.7(@types/node@22.10.1)(@vitest/ui@2.1.7)(happy-dom@15.11.7)(jsdom@23.2.0)(less@4.2.0)(lightningcss@1.22.1)(sass@1.79.3)(terser@5.34.0) transitivePeerDependencies: - supports-color - '@vitest/expect@2.1.5': + '@vitest/expect@2.1.7': dependencies: - '@vitest/spy': 2.1.5 - '@vitest/utils': 2.1.5 + '@vitest/spy': 2.1.7 + '@vitest/utils': 2.1.7 chai: 5.1.2 tinyrainbow: 1.2.0 - '@vitest/mocker@2.1.5(vite@5.4.8(@types/node@22.9.3)(less@4.2.0)(lightningcss@1.22.1)(sass@1.79.3)(terser@5.34.0))': + '@vitest/mocker@2.1.7(vite@5.4.8(@types/node@22.10.1)(less@4.2.0)(lightningcss@1.22.1)(sass@1.79.3)(terser@5.34.0))': dependencies: - '@vitest/spy': 2.1.5 + '@vitest/spy': 2.1.7 estree-walker: 3.0.3 - magic-string: 0.30.13 + magic-string: 0.30.14 optionalDependencies: - vite: 5.4.8(@types/node@22.9.3)(less@4.2.0)(lightningcss@1.22.1)(sass@1.79.3)(terser@5.34.0) + vite: 5.4.8(@types/node@22.10.1)(less@4.2.0)(lightningcss@1.22.1)(sass@1.79.3)(terser@5.34.0) - '@vitest/pretty-format@2.1.5': + '@vitest/pretty-format@2.1.7': dependencies: tinyrainbow: 1.2.0 - '@vitest/runner@2.1.5': + '@vitest/runner@2.1.7': dependencies: - '@vitest/utils': 2.1.5 + '@vitest/utils': 2.1.7 pathe: 1.1.2 - '@vitest/snapshot@2.1.5': + '@vitest/snapshot@2.1.7': dependencies: - '@vitest/pretty-format': 2.1.5 - magic-string: 0.30.13 + '@vitest/pretty-format': 2.1.7 + magic-string: 0.30.14 pathe: 1.1.2 - '@vitest/spy@2.1.5': + '@vitest/spy@2.1.7': dependencies: tinyspy: 3.0.2 - '@vitest/ui@2.1.5(vitest@2.1.5)': + '@vitest/ui@2.1.7(vitest@2.1.7)': dependencies: - '@vitest/utils': 2.1.5 + '@vitest/utils': 2.1.7 fflate: 0.8.2 flatted: 3.3.1 pathe: 1.1.2 sirv: 3.0.0 tinyglobby: 0.2.10 tinyrainbow: 1.2.0 - vitest: 2.1.5(@types/node@22.9.3)(@vitest/ui@2.1.5)(happy-dom@15.11.6)(jsdom@23.2.0)(less@4.2.0)(lightningcss@1.22.1)(sass@1.79.3)(terser@5.34.0) + vitest: 2.1.7(@types/node@22.10.1)(@vitest/ui@2.1.7)(happy-dom@15.11.7)(jsdom@23.2.0)(less@4.2.0)(lightningcss@1.22.1)(sass@1.79.3)(terser@5.34.0) - '@vitest/utils@2.1.5': + '@vitest/utils@2.1.7': dependencies: - '@vitest/pretty-format': 2.1.5 + '@vitest/pretty-format': 2.1.7 loupe: 3.1.2 tinyrainbow: 1.2.0 @@ -17424,13 +17405,13 @@ snapshots: safe-buffer: 5.2.1 sha.js: 2.4.11 - create-jest@29.7.0(@types/node@22.9.3)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.1))(@types/node@22.9.3)(typescript@5.6.2)): + create-jest@29.7.0(@types/node@22.10.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.1))(@types/node@22.10.1)(typescript@5.6.2)): dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@22.9.3)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.1))(@types/node@22.9.3)(typescript@5.6.2)) + jest-config: 29.7.0(@types/node@22.10.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.1))(@types/node@22.10.1)(typescript@5.6.2)) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -17840,7 +17821,7 @@ snapshots: dumi-assets-types@2.0.0-alpha.0: {} - dumi@2.2.17(@babel/core@7.25.2)(@swc/helpers@0.5.1)(@types/node@22.9.3)(@types/react@18.3.9)(eslint@8.57.1)(jest@29.7.0(@types/node@22.9.3)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.1))(@types/node@22.9.3)(typescript@5.6.2)))(lightningcss@1.22.1)(prettier@3.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@3.29.5)(stylelint@14.16.1)(terser@5.34.0)(type-fest@0.21.3)(typescript@5.6.2)(webpack@5.95.0(@swc/core@1.9.3(@swc/helpers@0.5.1))): + dumi@2.2.17(@babel/core@7.25.2)(@swc/helpers@0.5.1)(@types/node@22.10.1)(@types/react@18.3.9)(eslint@8.57.1)(jest@29.7.0(@types/node@22.10.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.1))(@types/node@22.10.1)(typescript@5.6.2)))(lightningcss@1.22.1)(prettier@3.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@3.29.5)(stylelint@14.16.1)(terser@5.34.0)(type-fest@0.21.3)(typescript@5.6.2)(webpack@5.95.0(@swc/core@1.9.3(@swc/helpers@0.5.1))): dependencies: '@ant-design/icons-svg': 4.4.2 '@makotot/ghostui': 2.0.0(react@18.3.1) @@ -17899,7 +17880,7 @@ snapshots: remark-rehype: 10.1.0 sass: 1.79.3 sitemap: 7.1.2 - umi: 4.3.24(@babel/core@7.25.2)(@types/node@22.9.3)(@types/react@18.3.9)(eslint@8.57.1)(jest@29.7.0(@types/node@22.9.3)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.1))(@types/node@22.9.3)(typescript@5.6.2)))(lightningcss@1.22.1)(prettier@3.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@3.29.5)(sass@1.79.3)(stylelint@14.16.1)(terser@5.34.0)(type-fest@0.21.3)(typescript@5.6.2)(webpack@5.95.0(@swc/core@1.9.3(@swc/helpers@0.5.1))) + umi: 4.3.24(@babel/core@7.25.2)(@types/node@22.10.1)(@types/react@18.3.9)(eslint@8.57.1)(jest@29.7.0(@types/node@22.10.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.1))(@types/node@22.10.1)(typescript@5.6.2)))(lightningcss@1.22.1)(prettier@3.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@3.29.5)(sass@1.79.3)(stylelint@14.16.1)(terser@5.34.0)(type-fest@0.21.3)(typescript@5.6.2)(webpack@5.95.0(@swc/core@1.9.3(@swc/helpers@0.5.1))) unified: 10.1.2 unist-util-visit: 4.1.2 unist-util-visit-parents: 5.1.3 @@ -18288,13 +18269,13 @@ snapshots: dependencies: eslint: 8.57.1 - eslint-plugin-jest@27.2.3(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(jest@29.7.0(@types/node@22.9.3)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.1))(@types/node@22.9.3)(typescript@5.6.2)))(typescript@5.6.2): + eslint-plugin-jest@27.2.3(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(jest@29.7.0(@types/node@22.10.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.1))(@types/node@22.10.1)(typescript@5.6.2)))(typescript@5.6.2): dependencies: '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.6.2) eslint: 8.57.1 optionalDependencies: '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2) - jest: 29.7.0(@types/node@22.9.3)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.1))(@types/node@22.9.3)(typescript@5.6.2)) + jest: 29.7.0(@types/node@22.10.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.1))(@types/node@22.10.1)(typescript@5.6.2)) transitivePeerDependencies: - supports-color - typescript @@ -18652,9 +18633,9 @@ snapshots: dependencies: reusify: 1.0.4 - father@4.5.0(@babel/core@7.25.2)(@types/node@22.9.3)(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(type-fest@0.21.3)(webpack@5.95.0(@swc/core@1.9.3(@swc/helpers@0.5.1))): + father@4.5.0(@babel/core@7.25.2)(@types/node@22.10.1)(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(type-fest@0.21.3)(webpack@5.95.0(@swc/core@1.9.3(@swc/helpers@0.5.1))): dependencies: - '@microsoft/api-extractor': 7.39.1(@types/node@22.9.3) + '@microsoft/api-extractor': 7.39.1(@types/node@22.10.1) '@umijs/babel-preset-umi': 4.3.24 '@umijs/bundler-utils': 4.3.24 '@umijs/bundler-webpack': 4.3.24(type-fest@0.21.3)(typescript@5.3.3)(webpack@5.95.0(@swc/core@1.9.3(@swc/helpers@0.5.1))) @@ -18690,9 +18671,9 @@ snapshots: - webpack-hot-middleware - webpack-plugin-serve - father@4.5.0(@babel/core@7.25.2)(@types/node@22.9.3)(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(type-fest@0.21.3)(webpack@5.95.0): + father@4.5.0(@babel/core@7.25.2)(@types/node@22.10.1)(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(type-fest@0.21.3)(webpack@5.95.0): dependencies: - '@microsoft/api-extractor': 7.39.1(@types/node@22.9.3) + '@microsoft/api-extractor': 7.39.1(@types/node@22.10.1) '@umijs/babel-preset-umi': 4.3.24 '@umijs/bundler-utils': 4.3.24 '@umijs/bundler-webpack': 4.3.24(type-fest@0.21.3)(typescript@5.3.3)(webpack@5.95.0) @@ -19173,7 +19154,7 @@ snapshots: handle-thing@2.0.1: {} - happy-dom@15.11.6: + happy-dom@15.11.7: dependencies: entities: 4.5.0 webidl-conversions: 7.0.0 @@ -19995,7 +19976,7 @@ snapshots: '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.9.3 + '@types/node': 22.10.1 chalk: 4.1.2 co: 4.6.0 dedent: 1.5.3(babel-plugin-macros@3.1.0) @@ -20016,16 +19997,16 @@ snapshots: - supports-color optional: true - jest-cli@29.7.0(@types/node@22.9.3)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.1))(@types/node@22.9.3)(typescript@5.6.2)): + jest-cli@29.7.0(@types/node@22.10.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.1))(@types/node@22.10.1)(typescript@5.6.2)): dependencies: - '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.1))(@types/node@22.9.3)(typescript@5.6.2)) + '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.1))(@types/node@22.10.1)(typescript@5.6.2)) '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@22.9.3)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.1))(@types/node@22.9.3)(typescript@5.6.2)) + create-jest: 29.7.0(@types/node@22.10.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.1))(@types/node@22.10.1)(typescript@5.6.2)) exit: 0.1.2 import-local: 3.2.0 - jest-config: 29.7.0(@types/node@22.9.3)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.1))(@types/node@22.9.3)(typescript@5.6.2)) + jest-config: 29.7.0(@types/node@22.10.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.1))(@types/node@22.10.1)(typescript@5.6.2)) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -20036,7 +20017,7 @@ snapshots: - ts-node optional: true - jest-config@29.7.0(@types/node@22.9.3)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.1))(@types/node@22.9.3)(typescript@5.6.2)): + jest-config@29.7.0(@types/node@22.10.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.1))(@types/node@22.10.1)(typescript@5.6.2)): dependencies: '@babel/core': 7.25.2 '@jest/test-sequencer': 29.7.0 @@ -20061,8 +20042,8 @@ snapshots: slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - '@types/node': 22.9.3 - ts-node: 10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.1))(@types/node@22.9.3)(typescript@5.6.2) + '@types/node': 22.10.1 + ts-node: 10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.1))(@types/node@22.10.1)(typescript@5.6.2) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -20095,7 +20076,7 @@ snapshots: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.9.3 + '@types/node': 22.10.1 jest-mock: 29.7.0 jest-util: 29.7.0 optional: true @@ -20107,7 +20088,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 - '@types/node': 22.9.3 + '@types/node': 22.10.1 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -20149,7 +20130,7 @@ snapshots: jest-mock@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 22.9.3 + '@types/node': 22.10.1 jest-util: 29.7.0 optional: true @@ -20188,7 +20169,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.9.3 + '@types/node': 22.10.1 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -20217,7 +20198,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.9.3 + '@types/node': 22.10.1 chalk: 4.1.2 cjs-module-lexer: 1.4.1 collect-v8-coverage: 1.0.2 @@ -20265,7 +20246,7 @@ snapshots: jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 22.9.3 + '@types/node': 22.10.1 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -20285,7 +20266,7 @@ snapshots: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.9.3 + '@types/node': 22.10.1 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -20295,30 +20276,30 @@ snapshots: jest-worker@27.5.1: dependencies: - '@types/node': 22.9.3 + '@types/node': 22.10.1 merge-stream: 2.0.0 supports-color: 8.1.1 jest-worker@29.4.3: dependencies: - '@types/node': 22.9.3 + '@types/node': 22.10.1 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 jest-worker@29.7.0: dependencies: - '@types/node': 22.9.3 + '@types/node': 22.10.1 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 - jest@29.7.0(@types/node@22.9.3)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.1))(@types/node@22.9.3)(typescript@5.6.2)): + jest@29.7.0(@types/node@22.10.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.1))(@types/node@22.10.1)(typescript@5.6.2)): dependencies: - '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.1))(@types/node@22.9.3)(typescript@5.6.2)) + '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.1))(@types/node@22.10.1)(typescript@5.6.2)) '@jest/types': 29.6.3 import-local: 3.2.0 - jest-cli: 29.7.0(@types/node@22.9.3)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.1))(@types/node@22.9.3)(typescript@5.6.2)) + jest-cli: 29.7.0(@types/node@22.10.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.1))(@types/node@22.10.1)(typescript@5.6.2)) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -20657,7 +20638,7 @@ snapshots: lz-string@1.5.0: {} - magic-string@0.30.13: + magic-string@0.30.14: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 @@ -24291,14 +24272,14 @@ snapshots: dependencies: tslib: 2.7.0 - ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.1))(@types/node@22.9.3)(typescript@5.6.2): + ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.1))(@types/node@22.10.1)(typescript@5.6.2): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 22.9.3 + '@types/node': 22.10.1 acorn: 8.12.1 acorn-walk: 8.3.4 arg: 4.1.3 @@ -24415,14 +24396,14 @@ snapshots: typescript@5.6.2: {} - umi@4.3.24(@babel/core@7.25.2)(@types/node@22.9.3)(@types/react@18.3.9)(eslint@8.57.1)(jest@29.7.0(@types/node@22.9.3)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.1))(@types/node@22.9.3)(typescript@5.6.2)))(lightningcss@1.22.1)(prettier@3.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@3.29.5)(sass@1.79.3)(stylelint@14.16.1)(terser@5.34.0)(type-fest@0.21.3)(typescript@5.6.2)(webpack@5.95.0(@swc/core@1.9.3(@swc/helpers@0.5.1))): + umi@4.3.24(@babel/core@7.25.2)(@types/node@22.10.1)(@types/react@18.3.9)(eslint@8.57.1)(jest@29.7.0(@types/node@22.10.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.1))(@types/node@22.10.1)(typescript@5.6.2)))(lightningcss@1.22.1)(prettier@3.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@3.29.5)(sass@1.79.3)(stylelint@14.16.1)(terser@5.34.0)(type-fest@0.21.3)(typescript@5.6.2)(webpack@5.95.0(@swc/core@1.9.3(@swc/helpers@0.5.1))): dependencies: '@babel/runtime': 7.23.6 '@umijs/bundler-utils': 4.3.24 '@umijs/bundler-webpack': 4.3.24(type-fest@0.21.3)(typescript@5.6.2)(webpack@5.95.0(@swc/core@1.9.3(@swc/helpers@0.5.1))) '@umijs/core': 4.3.24 - '@umijs/lint': 4.3.24(eslint@8.57.1)(jest@29.7.0(@types/node@22.9.3)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.1))(@types/node@22.9.3)(typescript@5.6.2)))(stylelint@14.16.1)(typescript@5.6.2) - '@umijs/preset-umi': 4.3.24(@types/node@22.9.3)(@types/react@18.3.9)(lightningcss@1.22.1)(rollup@3.29.5)(sass@1.79.3)(terser@5.34.0)(type-fest@0.21.3)(typescript@5.6.2)(webpack@5.95.0(@swc/core@1.9.3(@swc/helpers@0.5.1))) + '@umijs/lint': 4.3.24(eslint@8.57.1)(jest@29.7.0(@types/node@22.10.1)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.9.3(@swc/helpers@0.5.1))(@types/node@22.10.1)(typescript@5.6.2)))(stylelint@14.16.1)(typescript@5.6.2) + '@umijs/preset-umi': 4.3.24(@types/node@22.10.1)(@types/react@18.3.9)(lightningcss@1.22.1)(rollup@3.29.5)(sass@1.79.3)(terser@5.34.0)(type-fest@0.21.3)(typescript@5.6.2)(webpack@5.95.0(@swc/core@1.9.3(@swc/helpers@0.5.1))) '@umijs/renderer-react': 4.3.24(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@umijs/server': 4.3.24 '@umijs/test': 4.3.24(@babel/core@7.25.2) @@ -24469,7 +24450,7 @@ snapshots: has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 - undici-types@6.19.8: {} + undici-types@6.20.0: {} unfetch@5.0.0: {} @@ -24713,13 +24694,13 @@ snapshots: unist-util-stringify-position: 3.0.3 vfile-message: 3.1.4 - vite-node@2.1.5(@types/node@22.9.3)(less@4.2.0)(lightningcss@1.22.1)(sass@1.79.3)(terser@5.34.0): + vite-node@2.1.7(@types/node@22.10.1)(less@4.2.0)(lightningcss@1.22.1)(sass@1.79.3)(terser@5.34.0): dependencies: cac: 6.7.14 debug: 4.3.7 es-module-lexer: 1.5.4 pathe: 1.1.2 - vite: 5.4.8(@types/node@22.9.3)(less@4.2.0)(lightningcss@1.22.1)(sass@1.79.3)(terser@5.34.0) + vite: 5.4.8(@types/node@22.10.1)(less@4.2.0)(lightningcss@1.22.1)(sass@1.79.3)(terser@5.34.0) transitivePeerDependencies: - '@types/node' - less @@ -24731,69 +24712,69 @@ snapshots: - supports-color - terser - vite-tsconfig-paths@5.1.3(typescript@5.6.2)(vite@5.4.8(@types/node@22.9.3)(less@4.2.0)(lightningcss@1.22.1)(sass@1.79.3)(terser@5.34.0)): + vite-tsconfig-paths@5.1.3(typescript@5.6.2)(vite@5.4.8(@types/node@22.10.1)(less@4.2.0)(lightningcss@1.22.1)(sass@1.79.3)(terser@5.34.0)): dependencies: debug: 4.3.7 globrex: 0.1.2 tsconfck: 3.1.4(typescript@5.6.2) optionalDependencies: - vite: 5.4.8(@types/node@22.9.3)(less@4.2.0)(lightningcss@1.22.1)(sass@1.79.3)(terser@5.34.0) + vite: 5.4.8(@types/node@22.10.1)(less@4.2.0)(lightningcss@1.22.1)(sass@1.79.3)(terser@5.34.0) transitivePeerDependencies: - supports-color - typescript - vite@4.5.2(@types/node@22.9.3)(less@4.1.3)(lightningcss@1.22.1)(sass@1.79.3)(terser@5.34.0): + vite@4.5.2(@types/node@22.10.1)(less@4.1.3)(lightningcss@1.22.1)(sass@1.79.3)(terser@5.34.0): dependencies: esbuild: 0.18.20 postcss: 8.4.47 rollup: 3.29.5 optionalDependencies: - '@types/node': 22.9.3 + '@types/node': 22.10.1 fsevents: 2.3.3 less: 4.1.3 lightningcss: 1.22.1 sass: 1.79.3 terser: 5.34.0 - vite@5.4.8(@types/node@22.9.3)(less@4.2.0)(lightningcss@1.22.1)(sass@1.79.3)(terser@5.34.0): + vite@5.4.8(@types/node@22.10.1)(less@4.2.0)(lightningcss@1.22.1)(sass@1.79.3)(terser@5.34.0): dependencies: esbuild: 0.21.5 postcss: 8.4.47 rollup: 4.22.4 optionalDependencies: - '@types/node': 22.9.3 + '@types/node': 22.10.1 fsevents: 2.3.3 less: 4.2.0 lightningcss: 1.22.1 sass: 1.79.3 terser: 5.34.0 - vitest@2.1.5(@types/node@22.9.3)(@vitest/ui@2.1.5)(happy-dom@15.11.6)(jsdom@23.2.0)(less@4.2.0)(lightningcss@1.22.1)(sass@1.79.3)(terser@5.34.0): + vitest@2.1.7(@types/node@22.10.1)(@vitest/ui@2.1.7)(happy-dom@15.11.7)(jsdom@23.2.0)(less@4.2.0)(lightningcss@1.22.1)(sass@1.79.3)(terser@5.34.0): dependencies: - '@vitest/expect': 2.1.5 - '@vitest/mocker': 2.1.5(vite@5.4.8(@types/node@22.9.3)(less@4.2.0)(lightningcss@1.22.1)(sass@1.79.3)(terser@5.34.0)) - '@vitest/pretty-format': 2.1.5 - '@vitest/runner': 2.1.5 - '@vitest/snapshot': 2.1.5 - '@vitest/spy': 2.1.5 - '@vitest/utils': 2.1.5 + '@vitest/expect': 2.1.7 + '@vitest/mocker': 2.1.7(vite@5.4.8(@types/node@22.10.1)(less@4.2.0)(lightningcss@1.22.1)(sass@1.79.3)(terser@5.34.0)) + '@vitest/pretty-format': 2.1.7 + '@vitest/runner': 2.1.7 + '@vitest/snapshot': 2.1.7 + '@vitest/spy': 2.1.7 + '@vitest/utils': 2.1.7 chai: 5.1.2 debug: 4.3.7 expect-type: 1.1.0 - magic-string: 0.30.13 + magic-string: 0.30.14 pathe: 1.1.2 std-env: 3.8.0 tinybench: 2.9.0 tinyexec: 0.3.1 tinypool: 1.0.2 tinyrainbow: 1.2.0 - vite: 5.4.8(@types/node@22.9.3)(less@4.2.0)(lightningcss@1.22.1)(sass@1.79.3)(terser@5.34.0) - vite-node: 2.1.5(@types/node@22.9.3)(less@4.2.0)(lightningcss@1.22.1)(sass@1.79.3)(terser@5.34.0) + vite: 5.4.8(@types/node@22.10.1)(less@4.2.0)(lightningcss@1.22.1)(sass@1.79.3)(terser@5.34.0) + vite-node: 2.1.7(@types/node@22.10.1)(less@4.2.0)(lightningcss@1.22.1)(sass@1.79.3)(terser@5.34.0) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 22.9.3 - '@vitest/ui': 2.1.5(vitest@2.1.5) - happy-dom: 15.11.6 + '@types/node': 22.10.1 + '@vitest/ui': 2.1.7(vitest@2.1.7) + happy-dom: 15.11.7 jsdom: 23.2.0 transitivePeerDependencies: - less