From 0f0c8695d0afce2f0eb96c34f3af0bdbf5bcf1a8 Mon Sep 17 00:00:00 2001 From: Steven Date: Fri, 10 Jan 2025 09:52:32 +0100 Subject: [PATCH] chore(rwa): unit tests (#2780) --- packages/apps/rwa-demo/package.json | 5 +- .../components/DragNDropCSV/DragNDropCSV.tsx | 4 +- packages/apps/rwa-demo/src/constants.ts | 2 + .../togglePartiallyFreezeTokens.test.ts | 254 ++++++++++ .../src/hooks/__tests__/togglePause.test.ts | 144 ++++++ .../hooks/__tests__/transferTokens.test.ts | 180 +++++++ .../__tests__/checkAllowedFileTypes.test.ts | 58 +++ .../src/utils/__tests__/checkNetwork.test.ts | 23 + .../src/utils/__tests__/client.test.ts | 83 ++++ .../utils/__tests__/csvFileToArray.test.ts | 20 + .../__tests__/filterRemovedRecords.test.ts | 107 +++++ .../__tests__/getAccountCookieName.test.ts | 43 ++ .../src/utils/__tests__/getAsset.test.ts | 115 +++++ .../__tests__/getLocalStorageKey.test.ts | 35 ++ .../src/utils/__tests__/getPubKey.test.ts | 40 ++ .../src/utils/__tests__/loadingData.test.ts | 9 + .../utils/__tests__/objectValidSchema.test.ts | 29 ++ .../__tests__/setAliasesToAccounts.test.ts | 66 +++ .../src/utils/checkAllowedFileTypes.ts | 6 +- packages/apps/rwa-demo/src/utils/getPubKey.ts | 5 - ...NotValidSchema.ts => objectValidSchema.ts} | 4 +- .../src/utils/setAliasesToAccounts.ts | 5 +- packages/apps/rwa-demo/tsconfig.json | 2 +- packages/apps/rwa-demo/vitest.config.ts | 7 + pnpm-lock.yaml | 444 +++++++++--------- 25 files changed, 1462 insertions(+), 228 deletions(-) create mode 100644 packages/apps/rwa-demo/src/hooks/__tests__/togglePartiallyFreezeTokens.test.ts create mode 100644 packages/apps/rwa-demo/src/hooks/__tests__/togglePause.test.ts create mode 100644 packages/apps/rwa-demo/src/hooks/__tests__/transferTokens.test.ts create mode 100644 packages/apps/rwa-demo/src/utils/__tests__/checkAllowedFileTypes.test.ts create mode 100644 packages/apps/rwa-demo/src/utils/__tests__/checkNetwork.test.ts create mode 100644 packages/apps/rwa-demo/src/utils/__tests__/client.test.ts create mode 100644 packages/apps/rwa-demo/src/utils/__tests__/csvFileToArray.test.ts create mode 100644 packages/apps/rwa-demo/src/utils/__tests__/filterRemovedRecords.test.ts create mode 100644 packages/apps/rwa-demo/src/utils/__tests__/getAccountCookieName.test.ts create mode 100644 packages/apps/rwa-demo/src/utils/__tests__/getAsset.test.ts create mode 100644 packages/apps/rwa-demo/src/utils/__tests__/getLocalStorageKey.test.ts create mode 100644 packages/apps/rwa-demo/src/utils/__tests__/getPubKey.test.ts create mode 100644 packages/apps/rwa-demo/src/utils/__tests__/loadingData.test.ts create mode 100644 packages/apps/rwa-demo/src/utils/__tests__/objectValidSchema.test.ts create mode 100644 packages/apps/rwa-demo/src/utils/__tests__/setAliasesToAccounts.test.ts rename packages/apps/rwa-demo/src/utils/{objectNotValidSchema.ts => objectValidSchema.ts} (78%) diff --git a/packages/apps/rwa-demo/package.json b/packages/apps/rwa-demo/package.json index 287d4cdc1f..a631ac2752 100644 --- a/packages/apps/rwa-demo/package.json +++ b/packages/apps/rwa-demo/package.json @@ -11,9 +11,9 @@ "lint:fmt": "prettier . --cache --check", "lint:src": "eslint src", "start": "next start", - "test": "echo ''", + "test": "vitest run", "test:coverage": "vitest run --coverage", - "test:watch": "vitest --coverage" + "test:watch": "vitest" }, "dependencies": { "@apollo/client": "~3.9.11", @@ -51,6 +51,7 @@ "@kadena/pactjs": "workspace:*", "@kadena/pactjs-cli": "workspace:*", "@kadena/pactjs-generator": "workspace:*", + "@testing-library/react-hooks": "^8.0.1", "@types/node": "^20.12.7", "@types/react": "^18.2.79", "@types/react-dom": "^18.2.25", diff --git a/packages/apps/rwa-demo/src/components/DragNDropCSV/DragNDropCSV.tsx b/packages/apps/rwa-demo/src/components/DragNDropCSV/DragNDropCSV.tsx index 5a3ccb3662..56cc7b3a0b 100644 --- a/packages/apps/rwa-demo/src/components/DragNDropCSV/DragNDropCSV.tsx +++ b/packages/apps/rwa-demo/src/components/DragNDropCSV/DragNDropCSV.tsx @@ -1,7 +1,7 @@ import type { ICSVAccount } from '@/services/batchRegisterIdentity'; import { checkAllowedFileTypes } from '@/utils/checkAllowedFileTypes'; import { csvFileToArray } from '@/utils/csvFileToArray'; -import { objectNotValidSchema } from '@/utils/objectNotValidSchema'; +import { objectValidSchema } from '@/utils/objectValidSchema'; import { Stack } from '@kadena/kode-ui'; import { useNotifications } from '@kadena/kode-ui/patterns'; import type { DragEventHandler, FC } from 'react'; @@ -31,7 +31,7 @@ export const DragNDropCSV: FC = ({ onResult, resultSchema }) => { fileReader.onload = function () { const arr = csvFileToArray(fileReader.result as string); - if (!arr.find(objectNotValidSchema(resultSchema))) { + if (!arr.find(objectValidSchema(resultSchema))) { addNotification({ intent: 'negative', label: 'the CSV has the wrong schema', diff --git a/packages/apps/rwa-demo/src/constants.ts b/packages/apps/rwa-demo/src/constants.ts index 275952ce3c..529ffb687d 100644 --- a/packages/apps/rwa-demo/src/constants.ts +++ b/packages/apps/rwa-demo/src/constants.ts @@ -9,3 +9,5 @@ export const ADMIN = { account: 'k:a56eb32f7860bfc4e19ec4d4ac0b2dd6c9a96f3c72d607847416253422a2b1b7', publicKey: 'a56eb32f7860bfc4e19ec4d4ac0b2dd6c9a96f3c72d607847416253422a2b1b7', }; + +export const ALLOWEDFILETYPES = () => ['text/csv']; diff --git a/packages/apps/rwa-demo/src/hooks/__tests__/togglePartiallyFreezeTokens.test.ts b/packages/apps/rwa-demo/src/hooks/__tests__/togglePartiallyFreezeTokens.test.ts new file mode 100644 index 0000000000..40427e7c62 --- /dev/null +++ b/packages/apps/rwa-demo/src/hooks/__tests__/togglePartiallyFreezeTokens.test.ts @@ -0,0 +1,254 @@ +import { renderHook } from '@testing-library/react-hooks'; +import { useTogglePartiallyFreezeTokens } from '../togglePartiallyFreezeTokens'; + +describe('togglePause hook', () => { + const mocksHook = vi.hoisted(() => { + return { + useAccount: vi.fn().mockReturnValue({ + account: { + address: 'k:1', + }, + sign: vi.fn(), + isMounted: true, + accountRoles: { + isFreezer: vi.fn().mockReturnValue(false), + }, + }), + useAsset: vi.fn().mockReturnValue({ + paused: true, + }), + useFreeze: vi.fn().mockReturnValue({ + frozen: true, + }), + useTransactions: vi.fn().mockReturnValue({ + addTransaction: vi.fn(), + isActiveAccountChangeTx: false, + }), + useNotifications: vi.fn().mockReturnValue({ + addNotification: vi.fn(), + }), + }; + }); + + beforeEach(async () => { + vi.mock('./../account', async () => { + const actual = await vi.importActual('./../account'); + return { + ...actual, + useAccount: mocksHook.useAccount, + }; + }); + + vi.mock('./../freeze', async () => { + const actual = await vi.importActual('./../freeze'); + return { + ...actual, + useFreeze: mocksHook.useFreeze, + }; + }); + + vi.mock('./../asset', async () => { + const actual = await vi.importActual('./../asset'); + return { + ...actual, + useAsset: mocksHook.useAsset, + }; + }); + + vi.mock('./../transactions', async () => { + const actual = await vi.importActual('./../transactions'); + return { + ...actual, + useTransactions: mocksHook.useTransactions, + }; + }); + + vi.mock('@kadena/kode-ui/patterns', async () => { + const actual = await vi.importActual('@kadena/kode-ui/patterns'); + return { + ...actual, + useNotifications: mocksHook.useNotifications, + }; + }); + }); + + afterEach(() => { + vi.clearAllMocks(); + }); + + it('should return the correct properties', async () => { + const { result } = renderHook(() => + useTogglePartiallyFreezeTokens({ investorAccount: 'k:1' }), + ); + expect(result.current.hasOwnProperty('isAllowed')).toBe(true); + expect(result.current.hasOwnProperty('submit')).toBe(true); + }); + + describe('isAllowed', () => { + it('should return true, when account is mounted, when account is NOT frozen, when contract is NOT paused, when account has role FREEZER, when no activeAccountTx busy', () => { + mocksHook.useAccount.mockImplementation(() => ({ + account: { + address: 'k:1', + }, + isMounted: true, + accountRoles: { + isFreezer: vi.fn().mockReturnValue(true), + }, + })); + mocksHook.useFreeze.mockImplementation(() => ({ + ...mocksHook.useFreeze.getMockImplementation(), + frozen: false, + })); + mocksHook.useAsset.mockImplementation(() => ({ + ...mocksHook.useAsset.getMockImplementation(), + paused: false, + })); + mocksHook.useTransactions.mockImplementation(() => ({ + ...mocksHook.useTransactions.getMockImplementation(), + isActiveAccountChangeTx: false, + })); + + const { result } = renderHook(() => + useTogglePartiallyFreezeTokens({ investorAccount: 'k:1' }), + ); + + expect(result.current.isAllowed).toBe(true); + }); + }); + + it('should return false, when account NOT is mounted', () => { + mocksHook.useAccount.mockImplementation(() => ({ + account: undefined, + isMounted: false, + accountRoles: { + isFreezer: vi.fn().mockReturnValue(true), + }, + })); + + const { result } = renderHook(() => + useTogglePartiallyFreezeTokens({ investorAccount: 'k:1' }), + ); + + expect(result.current.isAllowed).toBe(false); + }); + + it('should return false, when account is mounted, when account is frozen, when contract is NOT paused, when account has role FREEZER, when no activeAccountTx busy', () => { + mocksHook.useAccount.mockImplementation(() => ({ + account: { + address: 'k:1', + }, + isMounted: true, + accountRoles: { + isFreezer: vi.fn().mockReturnValue(true), + }, + })); + mocksHook.useFreeze.mockImplementation(() => ({ + ...mocksHook.useFreeze.getMockImplementation(), + frozen: true, + })); + mocksHook.useAsset.mockImplementation(() => ({ + ...mocksHook.useAsset.getMockImplementation(), + paused: false, + })); + mocksHook.useTransactions.mockImplementation(() => ({ + ...mocksHook.useTransactions.getMockImplementation(), + isActiveAccountChangeTx: false, + })); + + const { result } = renderHook(() => + useTogglePartiallyFreezeTokens({ investorAccount: 'k:1' }), + ); + + expect(result.current.isAllowed).toBe(false); + }); + + it('should return false, when account is mounted, when account is NOT frozen, when contract is paused, when account has role FREEZER, when no activeAccountTx busy', () => { + mocksHook.useAccount.mockImplementation(() => ({ + account: { + address: 'k:1', + }, + isMounted: true, + accountRoles: { + isFreezer: vi.fn().mockReturnValue(true), + }, + })); + mocksHook.useFreeze.mockImplementation(() => ({ + ...mocksHook.useFreeze.getMockImplementation(), + frozen: false, + })); + mocksHook.useAsset.mockImplementation(() => ({ + ...mocksHook.useAsset.getMockImplementation(), + paused: true, + })); + mocksHook.useTransactions.mockImplementation(() => ({ + ...mocksHook.useTransactions.getMockImplementation(), + isActiveAccountChangeTx: false, + })); + + const { result } = renderHook(() => + useTogglePartiallyFreezeTokens({ investorAccount: 'k:1' }), + ); + + expect(result.current.isAllowed).toBe(false); + }); + + it('should return false, when account is mounted, when account is NOT frozen, when contract is NOT paused, when account has NOT role FREEZER, when no activeAccountTx busy', () => { + mocksHook.useAccount.mockImplementation(() => ({ + account: { + address: 'k:1', + }, + isMounted: true, + accountRoles: { + isFreezer: vi.fn().mockReturnValue(false), + }, + })); + mocksHook.useFreeze.mockImplementation(() => ({ + ...mocksHook.useFreeze.getMockImplementation(), + frozen: false, + })); + mocksHook.useAsset.mockImplementation(() => ({ + ...mocksHook.useAsset.getMockImplementation(), + paused: false, + })); + mocksHook.useTransactions.mockImplementation(() => ({ + ...mocksHook.useTransactions.getMockImplementation(), + isActiveAccountChangeTx: false, + })); + + const { result } = renderHook(() => + useTogglePartiallyFreezeTokens({ investorAccount: 'k:1' }), + ); + + expect(result.current.isAllowed).toBe(false); + }); + + it('should return false, when account is mounted, when account is NOT frozen, when contract is NOT paused, when account has role FREEZER, when activeAccountTx IS busy', () => { + mocksHook.useAccount.mockImplementation(() => ({ + account: { + address: 'k:1', + }, + isMounted: true, + accountRoles: { + isFreezer: vi.fn().mockReturnValue(true), + }, + })); + mocksHook.useFreeze.mockImplementation(() => ({ + ...mocksHook.useFreeze.getMockImplementation(), + frozen: false, + })); + mocksHook.useAsset.mockImplementation(() => ({ + ...mocksHook.useAsset.getMockImplementation(), + paused: false, + })); + mocksHook.useTransactions.mockImplementation(() => ({ + ...mocksHook.useTransactions.getMockImplementation(), + isActiveAccountChangeTx: true, + })); + + const { result } = renderHook(() => + useTogglePartiallyFreezeTokens({ investorAccount: 'k:1' }), + ); + + expect(result.current.isAllowed).toBe(false); + }); +}); diff --git a/packages/apps/rwa-demo/src/hooks/__tests__/togglePause.test.ts b/packages/apps/rwa-demo/src/hooks/__tests__/togglePause.test.ts new file mode 100644 index 0000000000..23dc351f17 --- /dev/null +++ b/packages/apps/rwa-demo/src/hooks/__tests__/togglePause.test.ts @@ -0,0 +1,144 @@ +import { renderHook } from '@testing-library/react-hooks'; +import { useTogglePause } from '../togglePause'; + +describe('togglePause hook', () => { + const mocksHook = vi.hoisted(() => { + return { + useAccount: vi.fn().mockReturnValue({ + account: { + address: 'k:1', + }, + sign: vi.fn(), + isMounted: true, + accountRoles: { + isFreezer: vi.fn().mockReturnValue(false), + }, + }), + useTransactions: vi.fn().mockReturnValue({ + addTransaction: vi.fn(), + isActiveAccountChangeTx: false, + }), + useNotifications: vi.fn().mockReturnValue({ + addNotification: vi.fn(), + }), + }; + }); + + beforeEach(async () => { + vi.mock('./../account', async () => { + const actual = await vi.importActual('./../account'); + return { + ...actual, + useAccount: mocksHook.useAccount, + }; + }); + + vi.mock('./../transactions', async () => { + const actual = await vi.importActual('./../transactions'); + return { + ...actual, + useTransactions: mocksHook.useTransactions, + }; + }); + + vi.mock('@kadena/kode-ui/patterns', async () => { + const actual = await vi.importActual('@kadena/kode-ui/patterns'); + return { + ...actual, + useNotifications: mocksHook.useNotifications, + }; + }); + }); + + afterEach(() => { + vi.clearAllMocks(); + }); + + it('should return the correct properties', async () => { + const { result } = renderHook(() => useTogglePause()); + expect(result.current.hasOwnProperty('isAllowed')).toBe(true); + expect(result.current.hasOwnProperty('submit')).toBe(true); + }); + + describe('isAllowed', () => { + it('should return true, when account is mounted, when account has role FREEZER, when no activeAccountTx busy', () => { + mocksHook.useAccount.mockImplementation(() => ({ + account: { + address: 'k:1', + }, + isMounted: true, + accountRoles: { + isFreezer: vi.fn().mockReturnValue(true), + }, + })); + mocksHook.useTransactions.mockImplementation(() => ({ + ...mocksHook.useTransactions.getMockImplementation(), + isActiveAccountChangeTx: false, + })); + + const { result } = renderHook(() => useTogglePause()); + + expect(result.current.isAllowed).toBe(true); + }); + + it('should return false, when account is NOT mounted', () => { + mocksHook.useAccount.mockImplementation(() => ({ + account: { + address: 'k:1', + }, + isMounted: false, + accountRoles: { + isFreezer: vi.fn().mockReturnValue(true), + }, + })); + mocksHook.useTransactions.mockImplementation(() => ({ + ...mocksHook.useTransactions.getMockImplementation(), + isActiveAccountChangeTx: false, + })); + + const { result } = renderHook(() => useTogglePause()); + + expect(result.current.isAllowed).toBe(false); + }); + + it('should return false, when account is mounted, when account has role FREEZER, when activeAccountTx busy', () => { + mocksHook.useAccount.mockImplementation(() => ({ + account: { + address: 'k:1', + }, + isMounted: true, + accountRoles: { + isFreezer: vi.fn().mockReturnValue(true), + }, + })); + mocksHook.useTransactions.mockImplementation(() => ({ + ...mocksHook.useTransactions.getMockImplementation(), + isActiveAccountChangeTx: true, + })); + + const { result } = renderHook(() => useTogglePause()); + + expect(result.current.isAllowed).toBe(false); + }); + + it('should return false, when account is mounted, when account does NOT have role FREEZER, when activeAccountTx is NOT busy', () => { + mocksHook.useAccount.mockImplementation(() => ({ + account: { + address: 'k:1', + }, + isMounted: true, + accountRoles: { + isFreezer: vi.fn().mockReturnValue(false), + }, + })); + mocksHook.useTransactions.mockImplementation(() => ({ + ...mocksHook.useTransactions.getMockImplementation(), + isActiveAccountChangeTx: false, + })); + + const { result } = renderHook(() => useTogglePause()); + + expect(result.current.isAllowed).toBe(false); + }); + }); +}); diff --git a/packages/apps/rwa-demo/src/hooks/__tests__/transferTokens.test.ts b/packages/apps/rwa-demo/src/hooks/__tests__/transferTokens.test.ts new file mode 100644 index 0000000000..ef065fb9c7 --- /dev/null +++ b/packages/apps/rwa-demo/src/hooks/__tests__/transferTokens.test.ts @@ -0,0 +1,180 @@ +import { renderHook } from '@testing-library/react-hooks'; +import { useTransferTokens } from '../transferTokens'; + +describe('transferTokens hook', () => { + const mocksHook = vi.hoisted(() => { + return { + useAccount: vi.fn().mockReturnValue({ + account: {}, + sign: vi.fn(), + isMounted: true, + isInvestor: true, + }), + useFreeze: vi.fn().mockReturnValue({ + frozen: true, + }), + useAsset: vi.fn().mockReturnValue({ + paused: true, + }), + useTransactions: vi.fn().mockReturnValue({ + addTransaction: vi.fn(), + }), + useNotifications: vi.fn().mockReturnValue({ + addNotification: vi.fn(), + }), + }; + }); + + beforeEach(async () => { + vi.mock('./../account', async () => { + const actual = await vi.importActual('./../account'); + return { + ...actual, + useAccount: mocksHook.useAccount, + }; + }); + + vi.mock('./../freeze', async () => { + const actual = await vi.importActual('./../freeze'); + return { + ...actual, + useFreeze: mocksHook.useFreeze, + }; + }); + + vi.mock('./../asset', async () => { + const actual = await vi.importActual('./../asset'); + return { + ...actual, + useAsset: mocksHook.useAsset, + }; + }); + + vi.mock('./../transactions', async () => { + const actual = await vi.importActual('./../transactions'); + return { + ...actual, + useTransactions: mocksHook.useTransactions, + }; + }); + + vi.mock('@kadena/kode-ui/patterns', async () => { + const actual = await vi.importActual('@kadena/kode-ui/patterns'); + return { + ...actual, + useNotifications: mocksHook.useNotifications, + }; + }); + }); + + afterEach(() => { + vi.clearAllMocks(); + }); + + it('should return the correct properties', async () => { + const { result } = renderHook(() => useTransferTokens()); + expect(result.current.hasOwnProperty('isAllowed')).toBe(true); + expect(result.current.hasOwnProperty('submit')).toBe(true); + }); + + describe('isAllowed', () => { + it('should return true, when the contract is active, when account is investor, when account is not frozen, when account is mounted', () => { + mocksHook.useAccount.mockImplementation(() => ({ + ...mocksHook.useAccount.getMockImplementation(), + isMounted: true, + isInvestor: true, + })); + + mocksHook.useFreeze.mockImplementation(() => ({ + ...mocksHook.useFreeze.getMockImplementation(), + frozen: false, + })); + + mocksHook.useAsset.mockImplementation(() => ({ + ...mocksHook.useAsset.getMockImplementation(), + paused: false, + })); + + const { result } = renderHook(() => useTransferTokens()); + + expect(result.current.isAllowed).toBe(true); + }); + + it('should return false when the account is not Mounted', () => { + mocksHook.useAccount.mockImplementation(() => ({ + ...mocksHook.useAccount.getMockImplementation(), + isMounted: false, + })); + + const { result } = renderHook(() => useTransferTokens()); + + expect(result.current.isAllowed).toBe(false); + }); + + it('should return false, when the contract is paused', () => { + mocksHook.useAccount.mockImplementation(() => ({ + ...mocksHook.useAccount.getMockImplementation(), + isMounted: true, + isInvestor: true, + })); + + mocksHook.useFreeze.mockImplementation(() => ({ + ...mocksHook.useFreeze.getMockImplementation(), + frozen: false, + })); + + mocksHook.useAsset.mockImplementation(() => ({ + ...mocksHook.useAsset.getMockImplementation(), + paused: true, + })); + + const { result } = renderHook(() => useTransferTokens()); + + expect(result.current.isAllowed).toBe(false); + }); + + it('should return false, when the account is not an investor', () => { + mocksHook.useAccount.mockImplementation(() => ({ + ...mocksHook.useAccount.getMockImplementation(), + isMounted: true, + isInvestor: false, + })); + + mocksHook.useFreeze.mockImplementation(() => ({ + ...mocksHook.useFreeze.getMockImplementation(), + frozen: false, + })); + + mocksHook.useAsset.mockImplementation(() => ({ + ...mocksHook.useAsset.getMockImplementation(), + paused: false, + })); + + const { result } = renderHook(() => useTransferTokens()); + + expect(result.current.isAllowed).toBe(false); + }); + + it('should return false, when the account is frozen', () => { + mocksHook.useAccount.mockImplementation(() => ({ + ...mocksHook.useAccount.getMockImplementation(), + isMounted: true, + isInvestor: true, + })); + + mocksHook.useFreeze.mockImplementation(() => ({ + ...mocksHook.useFreeze.getMockImplementation(), + frozen: true, + })); + + mocksHook.useAsset.mockImplementation(() => ({ + ...mocksHook.useAsset.getMockImplementation(), + paused: false, + })); + + const { result } = renderHook(() => useTransferTokens()); + + expect(result.current.isAllowed).toBe(false); + }); + }); +}); diff --git a/packages/apps/rwa-demo/src/utils/__tests__/checkAllowedFileTypes.test.ts b/packages/apps/rwa-demo/src/utils/__tests__/checkAllowedFileTypes.test.ts new file mode 100644 index 0000000000..6c639c8edc --- /dev/null +++ b/packages/apps/rwa-demo/src/utils/__tests__/checkAllowedFileTypes.test.ts @@ -0,0 +1,58 @@ +import { + checkAllowedFileTypes, + checkNotAllowedFileTypes, +} from '../checkAllowedFileTypes'; + +describe('checkAllowedFileTypes utils', () => { + const mocks = vi.hoisted(() => { + return { + ALLOWEDFILETYPES: vi.fn(), + }; + }); + + beforeEach(() => { + vi.mock('@/constants', async (importOriginal) => { + const actual = (await importOriginal()) as {}; + return { + ...actual, + ALLOWEDFILETYPES: mocks.ALLOWEDFILETYPES, + }; + }); + }); + + afterEach(() => { + vi.resetAllMocks(); + }); + + describe('checkAllowedFileTypes', () => { + it('should return true when you give a correct File', () => { + mocks.ALLOWEDFILETYPES.mockReturnValue(['text/csv']); + const file = new File(['test'], 'test.csv', { type: 'text/csv' }); + const result = checkAllowedFileTypes(file); + expect(result).toBe(true); + }); + + it('should return false when you give a incorrect File', () => { + mocks.ALLOWEDFILETYPES.mockReturnValue(['text/not correct']); + const file = new File(['test'], 'test.csv', { type: 'text/csv' }); + const result = checkAllowedFileTypes(file); + expect(result).toBe(false); + }); + }); + + describe('checkNotAllowedFileTypes', () => { + it('should return true when you give an INcorrect File', () => { + mocks.ALLOWEDFILETYPES.mockReturnValue(['text/notvalid']); + const file = new File(['test'], 'test.csv', { type: 'text/csv' }); + const result = checkNotAllowedFileTypes(file); + expect(result).toBe(true); + }); + + it('should return false when you give an correct File', () => { + mocks.ALLOWEDFILETYPES.mockReturnValue(['text/invalid', 'text/csv']); + const file = new File(['test'], 'test.csv', { type: 'text/csv' }); + const result = checkNotAllowedFileTypes(file); + expect(result).toBe(false); + }); + }); +}); diff --git a/packages/apps/rwa-demo/src/utils/__tests__/checkNetwork.test.ts b/packages/apps/rwa-demo/src/utils/__tests__/checkNetwork.test.ts new file mode 100644 index 0000000000..0058157316 --- /dev/null +++ b/packages/apps/rwa-demo/src/utils/__tests__/checkNetwork.test.ts @@ -0,0 +1,23 @@ +import { checkNetwork } from '../checkNetwork'; + +const mocks = vi.hoisted(() => { + return { + fetch: vi.fn(), + }; +}); + +describe('checkNetwork', () => { + beforeEach(() => { + global.fetch = mocks.fetch; + }); + afterEach(() => { + vi.resetAllMocks(); + }); + + it('should do a fetch with the correct props and return response', async () => { + mocks.fetch.mockResolvedValue('called'); + const result = await checkNetwork('https://kadena.io'); + expect(mocks.fetch).toBeCalledTimes(1); + expect(result).toEqual('called'); + }); +}); diff --git a/packages/apps/rwa-demo/src/utils/__tests__/client.test.ts b/packages/apps/rwa-demo/src/utils/__tests__/client.test.ts new file mode 100644 index 0000000000..7588486ad9 --- /dev/null +++ b/packages/apps/rwa-demo/src/utils/__tests__/client.test.ts @@ -0,0 +1,83 @@ +import { getClient, getNetwork } from '../client'; + +const mocks = vi.hoisted(() => { + return { + fetch: vi.fn(), + CHAINWEBAPIURL: 'https://kadena.io', + CHAINID: '1', + NETWORKNAME: 'he-man', + GRAPHURL: 'https://graph.kadena.io', + NETWORKHOST: 'https://kadena.io', + NETWORKID: 'development', + }; +}); + +describe('client utils', () => { + beforeEach(() => { + global.fetch = mocks.fetch; + vi.mock('./../env', async (importOriginal) => { + const actual = (await importOriginal()) as {}; + + return { + ...actual, + env: { + CHAINWEBAPIURL: mocks.CHAINWEBAPIURL, + CHAINID: mocks.CHAINID, + NETWORKNAME: mocks.NETWORKNAME, + NETWORKID: mocks.NETWORKID, + GRAPHURL: mocks.GRAPHURL, + NETWORKHOST: mocks.NETWORKHOST, + }, + }; + }); + }); + afterEach(() => { + vi.resetAllMocks(); + }); + describe('getNetwork', () => { + it('should return the network with the correct env variables', () => { + const result = getNetwork(); + expect(result).toEqual({ + name: 'he-man', + networkId: 'development', + host: 'https://kadena.io', + chainId: '1', + graphUrl: 'https://graph.kadena.io', + }); + }); + }); + describe('getClient', () => { + it('should return the client with the given url, when url is given as prop', async () => { + mocks.fetch.mockResolvedValue('123'); + const client = getClient('https://kadena.io'); + + await client.getStatus([ + { requestKey: '1234', chainId: '1', networkId: 'development' }, + ]); + expect(mocks.fetch).toBeCalledTimes(1); + expect(mocks.fetch).toBeCalledWith('https://kadena.io/api/v1/poll', { + body: '{"requestKeys":["1234"]}', + headers: { + 'Content-Type': 'application/json', + }, + method: 'POST', + }); + }); + it('should return the client with the env variable CHAINWEBAPIURL, when NO url is given as prop', async () => { + mocks.fetch.mockResolvedValue('123'); + const client = getClient(); + + await client.getStatus([ + { requestKey: '1234', chainId: '1', networkId: 'development' }, + ]); + expect(mocks.fetch).toBeCalledTimes(1); + expect(mocks.fetch).toBeCalledWith('https://kadena.io/api/v1/poll', { + body: '{"requestKeys":["1234"]}', + headers: { + 'Content-Type': 'application/json', + }, + method: 'POST', + }); + }); + }); +}); diff --git a/packages/apps/rwa-demo/src/utils/__tests__/csvFileToArray.test.ts b/packages/apps/rwa-demo/src/utils/__tests__/csvFileToArray.test.ts new file mode 100644 index 0000000000..4e54901950 --- /dev/null +++ b/packages/apps/rwa-demo/src/utils/__tests__/csvFileToArray.test.ts @@ -0,0 +1,20 @@ +import { csvFileToArray } from '../csvFileToArray'; + +describe('csvFileToArray utils', () => { + it('should return an array from the csv string with the correct attributes', () => { + const csv = `account,alias +k:a57ac28aa3a80ad84908c4f7c00d91b95b9da335a623bd941e8c41897d275377,he-man +k:5132ac0629ab78326614879b62521b8f71a4eadf4eb2826d5e9757c832785782,skeletor +k:5132ac0629ab78326614879b62521b8f71a4eadf4eb2826d5e9757c832785785,cringer +k:5132ac0629ab78326614879b62521b8f71a4eadf4eb2826d5e9757c832785786,greyskull +k:5132ac0629ab78326614879b62521b8f71a4eadf4eb2826d5e9757c832785787,teela-na`; + + const result = csvFileToArray(csv); + expect(result.length).toEqual(5); + expect(result[0]).toEqual({ + account: + 'k:a57ac28aa3a80ad84908c4f7c00d91b95b9da335a623bd941e8c41897d275377', + alias: 'he-man', + }); + }); +}); diff --git a/packages/apps/rwa-demo/src/utils/__tests__/filterRemovedRecords.test.ts b/packages/apps/rwa-demo/src/utils/__tests__/filterRemovedRecords.test.ts new file mode 100644 index 0000000000..d7fe3a9a21 --- /dev/null +++ b/packages/apps/rwa-demo/src/utils/__tests__/filterRemovedRecords.test.ts @@ -0,0 +1,107 @@ +import type { IRecord } from '../filterRemovedRecords'; +import { filterRemovedRecords } from '../filterRemovedRecords'; + +describe('filterRemovedRecords utils', () => { + describe('filterRemovedRecords', () => { + it('should remove all records which have the isRemoved prop', () => { + const accounts = [ + { + requestKey: '1', + accountName: 'k:he-man', + creationTime: 0, + }, + { + requestKey: '2', + accountName: 'skeletor', + creationTime: 1, + }, + { + requestKey: '3', + accountName: 'k:cringer', + creationTime: 2, + isRemoved: true, + }, + { + requestKey: '4', + accountName: 'k:greyskull', + creationTime: 3, + }, + ] as IRecord[]; + + const result = filterRemovedRecords(accounts); + const expectedResult = [...accounts].toSpliced(2, 1); + expect(result).toEqual(expectedResult); + expect(result.length).toEqual(3); + }); + it('should remove all double accounts from array', () => { + const accounts = [ + { + requestKey: '1', + accountName: 'k:he-man', + creationTime: 0, + }, + { + requestKey: '2', + accountName: 'skeletor', + creationTime: 1, + }, + { + requestKey: '3', + accountName: 'k:cringer', + creationTime: 2, + }, + { + requestKey: '4', + accountName: 'k:he-man', + creationTime: 3, + }, + ] as IRecord[]; + + const result = filterRemovedRecords(accounts); + const expectedResult = [...accounts].toSpliced(3, 1); + expect(result).toEqual(expectedResult); + expect(result.length).toEqual(3); + }); + it('should return the array when empty', () => { + const result = filterRemovedRecords([]); + expect(result).toEqual([]); + expect(result.length).toEqual(0); + }); + + it('should sort the array on creationTime', () => { + const accounts = [ + { + requestKey: '1', + accountName: 'k:he-man', + creationTime: 0, + }, + { + requestKey: '2', + accountName: 'skeletor', + creationTime: 1, + }, + { + requestKey: '3', + accountName: 'k:cringer', + creationTime: 2, + }, + { + requestKey: '4', + accountName: 'k:greyskull', + creationTime: 1, + }, + ] as IRecord[]; + + const expectedResult = [ + accounts[0], + accounts[1], + accounts[3], + accounts[2], + ]; + + const result = filterRemovedRecords(accounts); + expect(result).toEqual(expectedResult); + expect(result.length).toEqual(4); + }); + }); +}); diff --git a/packages/apps/rwa-demo/src/utils/__tests__/getAccountCookieName.test.ts b/packages/apps/rwa-demo/src/utils/__tests__/getAccountCookieName.test.ts new file mode 100644 index 0000000000..57611d369b --- /dev/null +++ b/packages/apps/rwa-demo/src/utils/__tests__/getAccountCookieName.test.ts @@ -0,0 +1,43 @@ +import { getAccountCookieName } from '../getAccountCookieName'; + +describe('getAccountCookieName utils', () => { + describe('getAccountCookieName', () => { + const mocks = vi.hoisted(() => { + return { + NETWORKID: 'test', + CHAINID: '9', + ACCOUNT_COOKIE_NAME: 'he-man', + }; + }); + + beforeEach(() => { + vi.mock('@/constants', async (importOriginal) => { + const actual = (await importOriginal()) as {}; + + return { + ...actual, + ACCOUNT_COOKIE_NAME: mocks.ACCOUNT_COOKIE_NAME, + }; + }); + vi.mock('./../env', async (importOriginal) => { + const actual = (await importOriginal()) as {}; + + return { + ...actual, + env: { + NETWORKID: mocks.NETWORKID, + CHAINID: mocks.CHAINID, + }, + }; + }); + }); + + afterEach(() => { + vi.resetAllMocks(); + }); + + it('should use the correct env variables when returning the cookie name', () => { + expect(getAccountCookieName()).toBe('he-man_test_9'); + }); + }); +}); diff --git a/packages/apps/rwa-demo/src/utils/__tests__/getAsset.test.ts b/packages/apps/rwa-demo/src/utils/__tests__/getAsset.test.ts new file mode 100644 index 0000000000..ff6e231d73 --- /dev/null +++ b/packages/apps/rwa-demo/src/utils/__tests__/getAsset.test.ts @@ -0,0 +1,115 @@ +import { + LOCALSTORAGE_ASSETS_KEY, + LOCALSTORAGE_ASSETS_SELECTED_KEY, +} from '@/constants'; +import { getAsset, getFullAsset } from '../getAsset'; +import { getLocalStorageKey } from '../getLocalStorageKey'; + +describe('getAsset utils', () => { + describe('getFullAsset', () => { + beforeEach(() => {}); + + afterEach(() => { + localStorage.clear(); + vi.resetAllMocks(); + }); + + it('should return undefined when no asset is in localstorage', () => { + const result = getFullAsset(); + expect(result).toEqual(undefined); + }); + it('should return asset when asset is in LOCALSTORAGE_ASSETS_SELECTED_KEY in localstorage', () => { + const asset = { + uuid: 'b5db08d1-8cc2-4ea2-b4bc-52195762e778', + supply: -1, + maxSupply: -1, + maxBalance: -1, + maxInvestors: -1, + investorCount: 0, + contractName: 'he-man', + namespace: 'n_baf204eb384dc42edf3c542eeeb6039f41ce5e86', + }; + localStorage.setItem( + getLocalStorageKey(LOCALSTORAGE_ASSETS_SELECTED_KEY), + JSON.stringify(asset), + ); + + const result = getFullAsset(); + expect(result).toEqual(asset); + }); + it('should return the first asset from LOCALSTORAGE_ASSETS_KEY when asset is NOT in LOCALSTORAGE_ASSETS_SELECTED_KEY in localstorage', () => { + const assets = [ + { + uuid: 'b5db08d1-8cc2-4ea2-b4bc-52195762e778', + supply: -1, + maxSupply: -1, + maxBalance: -1, + maxInvestors: -1, + investorCount: 0, + contractName: 'he-man', + namespace: 'n_baf204eb384dc42edf3c542eeeb6039f41ce5e86', + }, + { + uuid: '', + supply: -1, + maxSupply: -1, + maxBalance: -1, + maxInvestors: -1, + investorCount: 0, + contractName: 'greyskull', + namespace: 'n_baf204eb384dc42edf3c542eeeb6039f41ce5e86', + }, + { + uuid: '', + supply: -1, + maxSupply: -1, + maxBalance: -1, + maxInvestors: -1, + investorCount: 0, + contractName: 'skeletor', + namespace: 'n_baf204eb384dc42edf3c542eeeb6039f41ce5e86', + }, + ]; + localStorage.setItem( + getLocalStorageKey(LOCALSTORAGE_ASSETS_KEY), + JSON.stringify(assets), + ); + + const result = getFullAsset(); + expect(result).toEqual(assets[0]); + }); + }); + + describe('getAsset', () => { + beforeEach(() => {}); + + afterEach(() => { + localStorage.clear(); + vi.resetAllMocks(); + }); + it('should return the asset string from the found asset', () => { + localStorage.setItem( + getLocalStorageKey(LOCALSTORAGE_ASSETS_SELECTED_KEY), + JSON.stringify({ + uuid: 'b5db08d1-8cc2-4ea2-b4bc-52195762e778', + supply: -1, + maxSupply: -1, + maxBalance: -1, + maxInvestors: -1, + investorCount: 0, + contractName: 'he-man', + namespace: 'n_baf204eb384dc42edf3c542eeeb6039f41ce5e86', + }), + ); + + const result = getAsset(); + expect(result).toEqual( + 'n_baf204eb384dc42edf3c542eeeb6039f41ce5e86.he-man', + ); + }); + it('should return empty string when there is no asset in localstorage', () => { + const result = getAsset(); + expect(result).toEqual(''); + }); + }); +}); diff --git a/packages/apps/rwa-demo/src/utils/__tests__/getLocalStorageKey.test.ts b/packages/apps/rwa-demo/src/utils/__tests__/getLocalStorageKey.test.ts new file mode 100644 index 0000000000..b502a8d1ac --- /dev/null +++ b/packages/apps/rwa-demo/src/utils/__tests__/getLocalStorageKey.test.ts @@ -0,0 +1,35 @@ +import { getLocalStorageKey } from '../getLocalStorageKey'; + +describe('getLocalStorageKey utils', () => { + describe('getLocalStorageKey', () => { + const mocks = vi.hoisted(() => { + return { + NETWORKID: 'test', + }; + }); + + beforeEach(() => { + vi.stubEnv('NEXT_PUBLIC_NETWORKID', 'production'); + + vi.mock('./../env', async (importOriginal) => { + const actual = (await importOriginal()) as {}; + + return { + ...actual, + env: { + NETWORKID: mocks.NETWORKID, + }, + }; + }); + }); + + afterEach(() => { + vi.resetAllMocks(); + }); + + it('should return the correct key with the env variable', () => { + const result = getLocalStorageKey('skeletor'); + expect(result).toEqual('test-skeletor'); + }); + }); +}); diff --git a/packages/apps/rwa-demo/src/utils/__tests__/getPubKey.test.ts b/packages/apps/rwa-demo/src/utils/__tests__/getPubKey.test.ts new file mode 100644 index 0000000000..65c6ca8140 --- /dev/null +++ b/packages/apps/rwa-demo/src/utils/__tests__/getPubKey.test.ts @@ -0,0 +1,40 @@ +import type { IWalletAccount } from '@/components/AccountProvider/AccountType'; +import { getPubkeyFromAccount } from '../getPubKey'; + +describe('getPubKey utils', () => { + describe('getPubkeyFromAccount', () => { + it('should return the correct pubkey from the object', () => { + const result = getPubkeyFromAccount({ + alias: 'Account 1', + address: + 'k:cd75b4afbb3e8e2fd14c5fbd7b4bfb96384f60708a6a45f82e0ffebb570e79e1', + guard: { + keys: [ + 'cd75b4afbb3e8e2fd14c5fbd7b4bfb96384f60708a6a45f82e0ffebb570e79e1', + ], + pred: 'keys-all', + }, + contract: 'coin', + chains: [], + overallBalance: '0', + }); + + expect(result).toEqual( + 'cd75b4afbb3e8e2fd14c5fbd7b4bfb96384f60708a6a45f82e0ffebb570e79e1', + ); + }); + it('should return empty string when the pupkey is not there', () => { + const result = getPubkeyFromAccount({ + alias: 'Account 1', + address: + 'k:cd75b4afbb3e8e2fd14c5fbd7b4bfb96384f60708a6a45f82e0ffebb570e79e1', + + contract: 'coin', + chains: [], + overallBalance: '0', + } as any as IWalletAccount); + + expect(result).toEqual(''); + }); + }); +}); diff --git a/packages/apps/rwa-demo/src/utils/__tests__/loadingData.test.ts b/packages/apps/rwa-demo/src/utils/__tests__/loadingData.test.ts new file mode 100644 index 0000000000..d41ded2472 --- /dev/null +++ b/packages/apps/rwa-demo/src/utils/__tests__/loadingData.test.ts @@ -0,0 +1,9 @@ +import { loadingData } from '../loadingData'; + +describe('loadingData utils', () => { + describe('loadingData', () => { + it('should return an empty array of 5', () => { + expect(loadingData.length).toBe(5); + }); + }); +}); diff --git a/packages/apps/rwa-demo/src/utils/__tests__/objectValidSchema.test.ts b/packages/apps/rwa-demo/src/utils/__tests__/objectValidSchema.test.ts new file mode 100644 index 0000000000..0971a2b7c6 --- /dev/null +++ b/packages/apps/rwa-demo/src/utils/__tests__/objectValidSchema.test.ts @@ -0,0 +1,29 @@ +import { objectValidSchema } from '../objectValidSchema'; + +describe('objectValidSchema utils', () => { + describe('objectValidSchema', () => { + it('should return false when the schema is has 1 invalid prop', () => { + const schema = { alias: 'string', account: 'string' }; + const obj = { + alias: 'heman', + falseName: 'k:1', + }; + + const result = objectValidSchema(schema)(obj); + + expect(result).toEqual(false); + }); + + it('should return true when the schema is correct', () => { + const schema = { alias: 'string', account: 'string' }; + const obj = { + alias: 'heman', + account: 'k:1', + }; + + const result = objectValidSchema(schema)(obj); + + expect(result).toEqual(true); + }); + }); +}); diff --git a/packages/apps/rwa-demo/src/utils/__tests__/setAliasesToAccounts.test.ts b/packages/apps/rwa-demo/src/utils/__tests__/setAliasesToAccounts.test.ts new file mode 100644 index 0000000000..8f3a983abc --- /dev/null +++ b/packages/apps/rwa-demo/src/utils/__tests__/setAliasesToAccounts.test.ts @@ -0,0 +1,66 @@ +import { setAliasesToAccounts } from '../setAliasesToAccounts'; + +describe('setAliasesToAccounts utils', () => { + describe('setAliasesToAccounts', () => { + const aliases: any[] = [ + { + accountName: 'k:1', + alias: 'he-man', + }, + { + accountName: 'k:2', + alias: 'skeletor', + }, + { + accountName: 'k:4', + alias: 'greyskull', + }, + { + accountName: 'k:5', + alias: 'cringer', + }, + ]; + + it('should return an empty array, when the accounts array is empty', () => { + const accounts: any[] = []; + const aliases: any[] = [{ accountName: 'test' }]; + const result = setAliasesToAccounts(accounts, aliases); + + const expectedResult: any[] = []; + + expect(result).toEqual(expectedResult); + }); + + it('should return an array where the accounts have an alias, when available in the alias array', () => { + const accounts: any[] = [ + { + accountName: 'k:1', + }, + { + accountName: 'k:3', + }, + { + accountName: 'k:4', + }, + ]; + + const result = setAliasesToAccounts(accounts, aliases); + + const expectedResult: any[] = [ + { + accountName: 'k:1', + alias: 'he-man', + }, + { + accountName: 'k:3', + }, + { + accountName: 'k:4', + alias: 'greyskull', + }, + ]; + + expect(result).toEqual(expectedResult); + }); + }); +}); diff --git a/packages/apps/rwa-demo/src/utils/checkAllowedFileTypes.ts b/packages/apps/rwa-demo/src/utils/checkAllowedFileTypes.ts index 5e327ace97..dfe0061468 100644 --- a/packages/apps/rwa-demo/src/utils/checkAllowedFileTypes.ts +++ b/packages/apps/rwa-demo/src/utils/checkAllowedFileTypes.ts @@ -1,9 +1,9 @@ -const ALLOWEDFILETYPES = ['text/csv']; +import { ALLOWEDFILETYPES } from '@/constants'; export const checkAllowedFileTypes = (file: File): boolean => { - return ALLOWEDFILETYPES.indexOf(file.type) >= 0; + return ALLOWEDFILETYPES().indexOf(file.type) >= 0; }; export const checkNotAllowedFileTypes = (file: File): boolean => { - return ALLOWEDFILETYPES.indexOf(file.type) < 0; + return ALLOWEDFILETYPES().indexOf(file.type) < 0; }; diff --git a/packages/apps/rwa-demo/src/utils/getPubKey.ts b/packages/apps/rwa-demo/src/utils/getPubKey.ts index c7c687efbd..20cb104e97 100644 --- a/packages/apps/rwa-demo/src/utils/getPubKey.ts +++ b/packages/apps/rwa-demo/src/utils/getPubKey.ts @@ -1,10 +1,5 @@ import type { IWalletAccount } from '@/components/AccountProvider/AccountType'; import { isKeysetGuard } from '@/components/AccountProvider/AccountType'; -import type { ConnectedAccount } from '@kadena/spirekey-sdk'; - -export const getPubKey = (account: ConnectedAccount) => { - return account.keyset?.keys.find((key) => key.includes('WEBAUTHN-')) ?? ''; -}; export const getPubkeyFromAccount = (account: IWalletAccount): string => { if (isKeysetGuard(account.guard)) { diff --git a/packages/apps/rwa-demo/src/utils/objectNotValidSchema.ts b/packages/apps/rwa-demo/src/utils/objectValidSchema.ts similarity index 78% rename from packages/apps/rwa-demo/src/utils/objectNotValidSchema.ts rename to packages/apps/rwa-demo/src/utils/objectValidSchema.ts index 60a86f0945..ff0eecb0fe 100644 --- a/packages/apps/rwa-demo/src/utils/objectNotValidSchema.ts +++ b/packages/apps/rwa-demo/src/utils/objectValidSchema.ts @@ -1,10 +1,8 @@ -export const objectNotValidSchema = +export const objectValidSchema = (schema: Record) => (input: any) => { const missingProperties = Object.keys(schema) .filter((key) => input[key] === undefined) .map((key) => new Error(`Document is missing ${key} ${schema[key]}`)); - // throw the errors if you choose - return missingProperties.length === 0; }; diff --git a/packages/apps/rwa-demo/src/utils/setAliasesToAccounts.ts b/packages/apps/rwa-demo/src/utils/setAliasesToAccounts.ts index bc198b9044..03129ca789 100644 --- a/packages/apps/rwa-demo/src/utils/setAliasesToAccounts.ts +++ b/packages/apps/rwa-demo/src/utils/setAliasesToAccounts.ts @@ -1,4 +1,7 @@ -export const setAliasesToAccounts = (accounts: any[], aliases: any[]) => { +export const setAliasesToAccounts = ( + accounts: any[], + aliases: any[], +): any[] => { return accounts.map((account) => { const alias = aliases.find( ({ accountName }) => accountName === account.accountName, diff --git a/packages/apps/rwa-demo/tsconfig.json b/packages/apps/rwa-demo/tsconfig.json index 12e345f7b4..9777395e45 100644 --- a/packages/apps/rwa-demo/tsconfig.json +++ b/packages/apps/rwa-demo/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "./node_modules/@kadena-dev/shared-config/tsconfig-base.json", "compilerOptions": { - "types": ["node"], + "types": ["node", "vitest/globals"], "rootDir": ".", "baseUrl": ".", "target": "ES2020", diff --git a/packages/apps/rwa-demo/vitest.config.ts b/packages/apps/rwa-demo/vitest.config.ts index 492834269b..e02726ef61 100644 --- a/packages/apps/rwa-demo/vitest.config.ts +++ b/packages/apps/rwa-demo/vitest.config.ts @@ -20,6 +20,12 @@ export default mergeConfig( environment: 'happy-dom', coverage: { provider: 'v8', + thresholds: { + lines: 3, + functions: 3, + branches: 3, + statements: 3, + }, exclude: [ 'src/**/*.tsx', 'src/**/*.d.ts', @@ -30,6 +36,7 @@ export default mergeConfig( 'src/__mocks__/**/*.ts', 'src/config/**/*', 'src/constants/**/*', + 'src/services/**/*', 'src/components/**/index.ts', 'src/**/*.css.ts', 'src/**/*.md', diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 19dabddc34..a34a216a26 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -208,7 +208,7 @@ importers: version: 4.3.2(typescript@5.4.5)(vite@5.4.9(@types/node@22.9.1)(lightningcss@1.25.1)(terser@5.31.1)) vitest: specifier: ^1.6.0 - version: 1.6.0(@types/node@22.9.1)(@vitest/ui@1.6.0)(happy-dom@12.10.3)(jsdom@22.1.0)(lightningcss@1.25.1)(terser@5.31.1) + version: 1.6.0(@types/node@22.9.1)(@vitest/ui@1.6.0)(happy-dom@12.10.3)(jsdom@22.1.0(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.25.1)(terser@5.31.1) packages/apps/dev-wallet-desktop: dependencies: @@ -258,7 +258,7 @@ importers: version: 8.4.31 tailwindcss: specifier: ^3.4.1 - version: 3.4.4(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.4.5)) + version: 3.4.4(ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.11))(@types/node@20.14.9)(typescript@5.4.5)) typescript: specifier: 5.4.5 version: 5.4.5 @@ -520,7 +520,7 @@ importers: version: 1.6.0(@types/node@20.14.9)(@vitest/ui@1.6.0)(happy-dom@12.10.3)(jsdom@22.1.0(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.25.1)(terser@5.31.1) vitest-dom: specifier: ^0.1.1 - version: 0.1.1(vitest@1.6.0(@types/node@20.14.9)(@vitest/ui@1.6.0)(happy-dom@12.10.3)(jsdom@22.1.0)(lightningcss@1.25.1)(terser@5.31.1)) + version: 0.1.1(vitest@1.6.0(@types/node@20.14.9)(@vitest/ui@1.6.0)(happy-dom@12.10.3)(jsdom@22.1.0(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.25.1)(terser@5.31.1)) xml2js: specifier: ^0.6.2 version: 0.6.2 @@ -665,7 +665,7 @@ importers: version: 1.6.0(@types/node@20.14.9)(@vitest/ui@1.6.0)(happy-dom@12.10.3)(jsdom@22.1.0(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.25.1)(terser@5.31.1) vitest-dom: specifier: ^0.1.1 - version: 0.1.1(vitest@1.6.0(@types/node@20.14.9)(@vitest/ui@1.6.0)(happy-dom@12.10.3)(jsdom@22.1.0)(lightningcss@1.25.1)(terser@5.31.1)) + version: 0.1.1(vitest@1.6.0(@types/node@20.14.9)(@vitest/ui@1.6.0)(happy-dom@12.10.3)(jsdom@22.1.0(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.25.1)(terser@5.31.1)) packages/apps/graph: dependencies: @@ -728,7 +728,7 @@ importers: version: 2.2.2 debug: specifier: 4.3.4 - version: 4.3.4 + version: 4.3.4(supports-color@5.5.0) dotenv: specifier: ~16.4.5 version: 16.4.5 @@ -819,7 +819,7 @@ importers: version: 3.2.5 ts-node: specifier: ~10.9.2 - version: 10.9.2(@swc/core@1.9.2)(@types/node@20.14.9)(typescript@5.4.5) + version: 10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.11))(@types/node@20.14.9)(typescript@5.4.5) typescript: specifier: 5.4.5 version: 5.4.5 @@ -904,7 +904,7 @@ importers: version: 1.14.2 '@vanilla-extract/next-plugin': specifier: 2.4.0 - version: 2.4.0(@types/node@20.14.9)(next@14.2.2(@opentelemetry/api@1.9.0)(@playwright/test@1.46.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(webpack@5.88.2) + version: 2.4.0(@types/node@20.14.9)(next@14.2.2(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.46.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(webpack@5.88.2) concurrently: specifier: ^8.2.2 version: 8.2.2 @@ -1022,7 +1022,7 @@ importers: version: 1.14.2 '@vanilla-extract/next-plugin': specifier: 2.4.0 - version: 2.4.0(@types/node@20.14.9)(lightningcss@1.25.1)(next@14.2.2(@opentelemetry/api@1.9.0)(@playwright/test@1.46.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(terser@5.31.1)(webpack@5.88.2(@swc/core@1.9.2)) + version: 2.4.0(@types/node@20.14.9)(lightningcss@1.25.1)(next@14.2.2(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.46.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(terser@5.31.1)(webpack@5.88.2(@swc/core@1.9.2(@swc/helpers@0.5.11))) '@vanilla-extract/vite-plugin': specifier: 4.0.17 version: 4.0.17(@types/node@20.14.9)(lightningcss@1.25.1)(terser@5.31.1)(vite@5.4.9(@types/node@20.14.9)(lightningcss@1.25.1)(terser@5.31.1)) @@ -1061,13 +1061,13 @@ importers: version: 3.2.5 ts-node: specifier: ~10.9.2 - version: 10.9.2(@swc/core@1.9.2)(@types/node@20.14.9)(typescript@5.6.3) + version: 10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.11))(@types/node@20.14.9)(typescript@5.6.3) vitest: specifier: ^1.6.0 version: 1.6.0(@types/node@20.14.9)(@vitest/ui@1.6.0)(happy-dom@12.10.3)(jsdom@22.1.0(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.25.1)(terser@5.31.1) vitest-dom: specifier: ^0.1.1 - version: 0.1.1(vitest@1.6.0(@types/node@20.14.9)(@vitest/ui@1.6.0)(happy-dom@12.10.3)(jsdom@22.1.0)(lightningcss@1.25.1)(terser@5.31.1)) + version: 0.1.1(vitest@1.6.0(@types/node@20.14.9)(@vitest/ui@1.6.0)(happy-dom@12.10.3)(jsdom@22.1.0(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.25.1)(terser@5.31.1)) packages/apps/proof-of-us: dependencies: @@ -1209,13 +1209,13 @@ importers: version: 9.0.8 '@vanilla-extract/next-plugin': specifier: 2.4.0 - version: 2.4.0(@types/node@20.14.9)(lightningcss@1.25.1)(next@14.2.2(@opentelemetry/api@1.9.0)(@playwright/test@1.46.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(terser@5.31.1)(webpack@5.88.2(@swc/core@1.9.2)) + version: 2.4.0(@types/node@20.14.9)(lightningcss@1.25.1)(next@14.2.2(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.46.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(terser@5.31.1)(webpack@5.88.2(@swc/core@1.9.2(@swc/helpers@0.5.11))) '@vanilla-extract/vite-plugin': specifier: 4.0.17 version: 4.0.17(@types/node@20.14.9)(lightningcss@1.25.1)(terser@5.31.1)(vite@5.4.9(@types/node@20.14.9)(lightningcss@1.25.1)(terser@5.31.1)) '@vanilla-extract/webpack-plugin': specifier: 2.3.7 - version: 2.3.7(@types/node@20.14.9)(lightningcss@1.25.1)(terser@5.31.1)(webpack@5.88.2(@swc/core@1.9.2)) + version: 2.3.7(@types/node@20.14.9)(lightningcss@1.25.1)(terser@5.31.1)(webpack@5.88.2(@swc/core@1.9.2(@swc/helpers@0.5.11))) '@vitest/coverage-v8': specifier: ^1.6.0 version: 1.6.0(vitest@1.6.0(@types/node@20.14.9)(@vitest/ui@1.6.0)(happy-dom@12.10.3)(jsdom@22.1.0(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.25.1)(terser@5.31.1)) @@ -1248,7 +1248,7 @@ importers: version: 12.10.3 mini-css-extract-plugin: specifier: 2.7.6 - version: 2.7.6(webpack@5.88.2(@swc/core@1.9.2)) + version: 2.7.6(webpack@5.88.2(@swc/core@1.9.2(@swc/helpers@0.5.11))) next-router-mock: specifier: ^0.9.10 version: 0.9.13(next@14.2.2(@opentelemetry/api@1.9.0)(@playwright/test@1.46.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) @@ -1257,7 +1257,7 @@ importers: version: 3.2.5 ts-node: specifier: ~10.9.2 - version: 10.9.2(@swc/core@1.9.2)(@types/node@20.14.9)(typescript@5.4.5) + version: 10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.11))(@types/node@20.14.9)(typescript@5.4.5) typescript: specifier: 5.4.5 version: 5.4.5 @@ -1266,7 +1266,7 @@ importers: version: 1.6.0(@types/node@20.14.9)(@vitest/ui@1.6.0)(happy-dom@12.10.3)(jsdom@22.1.0(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.25.1)(terser@5.31.1) vitest-dom: specifier: ^0.1.1 - version: 0.1.1(vitest@1.6.0(@types/node@20.14.9)(@vitest/ui@1.6.0)(happy-dom@12.10.3)(jsdom@22.1.0)(lightningcss@1.25.1)(terser@5.31.1)) + version: 0.1.1(vitest@1.6.0(@types/node@20.14.9)(@vitest/ui@1.6.0)(happy-dom@12.10.3)(jsdom@22.1.0(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.25.1)(terser@5.31.1)) packages/apps/rwa-demo: dependencies: @@ -1308,7 +1308,7 @@ importers: version: 0.1.4 '@vanilla-extract/next-plugin': specifier: 2.4.0 - version: 2.4.0(@types/node@20.16.5)(lightningcss@1.25.1)(next@14.2.2(@opentelemetry/api@1.9.0)(@playwright/test@1.46.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(terser@5.31.1)(webpack@5.88.2) + version: 2.4.0(@types/node@20.16.5)(lightningcss@1.25.1)(next@14.2.2(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.46.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(terser@5.31.1)(webpack@5.88.2) '@vanilla-extract/recipes': specifier: 0.5.1 version: 0.5.1(@vanilla-extract/css@1.14.2) @@ -1367,6 +1367,9 @@ importers: '@kadena/pactjs-generator': specifier: workspace:* version: link:../../libs/pactjs-generator + '@testing-library/react-hooks': + specifier: ^8.0.1 + version: 8.0.1(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/node': specifier: ^20.12.7 version: 20.16.5 @@ -1387,7 +1390,7 @@ importers: version: 4.3.1(vite@5.4.9(@types/node@20.16.5)(lightningcss@1.25.1)(terser@5.31.1)) '@vitest/coverage-v8': specifier: ^1.6.0 - version: 1.6.0(vitest@1.6.0(@types/node@20.16.5)(@vitest/ui@1.6.0)(happy-dom@12.10.3)(jsdom@22.1.0)(lightningcss@1.25.1)(terser@5.31.1)) + version: 1.6.0(vitest@1.6.0(@types/node@20.16.5)(@vitest/ui@1.6.0)(happy-dom@12.10.3)(jsdom@22.1.0(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.25.1)(terser@5.31.1)) eslint: specifier: ^8.45.0 version: 8.57.0 @@ -1408,10 +1411,10 @@ importers: version: 5.4.5 vitest: specifier: ^1.6.0 - version: 1.6.0(@types/node@20.16.5)(@vitest/ui@1.6.0)(happy-dom@12.10.3)(jsdom@22.1.0)(lightningcss@1.25.1)(terser@5.31.1) + version: 1.6.0(@types/node@20.16.5)(@vitest/ui@1.6.0)(happy-dom@12.10.3)(jsdom@22.1.0(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.25.1)(terser@5.31.1) vitest-dom: specifier: ^0.1.1 - version: 0.1.1(vitest@1.6.0(@types/node@20.16.5)(@vitest/ui@1.6.0)(happy-dom@12.10.3)(jsdom@22.1.0)(lightningcss@1.25.1)(terser@5.31.1)) + version: 0.1.1(vitest@1.6.0(@types/node@20.16.5)(@vitest/ui@1.6.0)(happy-dom@12.10.3)(jsdom@22.1.0(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.25.1)(terser@5.31.1)) packages/apps/spirekey-example: dependencies: @@ -1626,7 +1629,7 @@ importers: version: 1.6.0(@types/node@20.14.9)(@vitest/ui@1.6.0)(happy-dom@12.10.3)(jsdom@22.1.0(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.25.1)(terser@5.31.1) vitest-dom: specifier: ^0.1.1 - version: 0.1.1(vitest@1.6.0(@types/node@20.14.9)(@vitest/ui@1.6.0)(happy-dom@12.10.3)(jsdom@22.1.0)(lightningcss@1.25.1)(terser@5.31.1)) + version: 0.1.1(vitest@1.6.0(@types/node@20.14.9)(@vitest/ui@1.6.0)(happy-dom@12.10.3)(jsdom@22.1.0(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.25.1)(terser@5.31.1)) packages/apps/wallet-sdk-example: dependencies: @@ -1732,7 +1735,7 @@ importers: version: 8.4.47 tailwindcss: specifier: ^3.4.1 - version: 3.4.4(ts-node@10.9.2(@types/node@22.9.1)(typescript@5.4.5)) + version: 3.4.4(ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.11))(@types/node@22.9.1)(typescript@5.4.5)) typescript: specifier: 5.4.5 version: 5.4.5 @@ -2318,7 +2321,7 @@ importers: version: 3.2.5 ts-node: specifier: ~10.9.2 - version: 10.9.2(@swc/core@1.9.2)(@types/node@20.14.9)(typescript@5.4.5) + version: 10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.11))(@types/node@20.14.9)(typescript@5.4.5) typescript: specifier: 5.4.5 version: 5.4.5 @@ -2373,7 +2376,7 @@ importers: version: 3.2.5 ts-node: specifier: ~10.9.2 - version: 10.9.2(@swc/core@1.9.2)(@types/node@20.14.9)(typescript@5.4.5) + version: 10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.11))(@types/node@20.14.9)(typescript@5.4.5) typescript: specifier: 5.4.5 version: 5.4.5 @@ -2455,7 +2458,7 @@ importers: version: 3.2.5 ts-node: specifier: ~10.9.2 - version: 10.9.2(@swc/core@1.9.2)(@types/node@20.14.9)(typescript@5.4.5) + version: 10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.11))(@types/node@20.14.9)(typescript@5.4.5) typescript: specifier: 5.4.5 version: 5.4.5 @@ -2583,7 +2586,7 @@ importers: version: 3.2.5 ts-node: specifier: ~10.9.2 - version: 10.9.2(@swc/core@1.9.2)(@types/node@20.14.9)(typescript@5.4.5) + version: 10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.11))(@types/node@20.14.9)(typescript@5.4.5) typescript: specifier: 5.4.5 version: 5.4.5 @@ -2906,7 +2909,7 @@ importers: version: 1.6.0(@types/node@20.14.9)(@vitest/ui@1.6.0)(happy-dom@12.10.3)(jsdom@22.1.0(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.25.1)(terser@5.31.1) vitest-dom: specifier: ^0.1.1 - version: 0.1.1(vitest@1.6.0(@types/node@20.14.9)(@vitest/ui@1.6.0)(happy-dom@12.10.3)(jsdom@22.1.0)(lightningcss@1.25.1)(terser@5.31.1)) + version: 0.1.1(vitest@1.6.0(@types/node@20.14.9)(@vitest/ui@1.6.0)(happy-dom@12.10.3)(jsdom@22.1.0(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.25.1)(terser@5.31.1)) packages/libs/pactjs: dependencies: @@ -3010,7 +3013,7 @@ importers: version: 3.2.5 ts-node: specifier: ~10.9.2 - version: 10.9.2(@swc/core@1.9.2)(@types/node@20.14.9)(typescript@5.4.5) + version: 10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.11))(@types/node@20.14.9)(typescript@5.4.5) typescript: specifier: 5.4.5 version: 5.4.5 @@ -3246,7 +3249,7 @@ importers: version: 20.16.5 '@vitest/coverage-v8': specifier: ^1.6.0 - version: 1.6.0(vitest@1.6.0(@types/node@20.16.5)(@vitest/ui@1.6.0)(happy-dom@12.10.3)(jsdom@22.1.0)(lightningcss@1.25.1)(terser@5.31.1)) + version: 1.6.0(vitest@1.6.0(@types/node@20.16.5)(@vitest/ui@1.6.0)(happy-dom@12.10.3)(jsdom@22.1.0(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.25.1)(terser@5.31.1)) cpy-cli: specifier: ^5.0.0 version: 5.0.0 @@ -3267,13 +3270,13 @@ importers: version: 0.13.0(rollup@4.24.0) ts-node: specifier: ~10.9.2 - version: 10.9.2(@swc/core@1.9.2)(@types/node@20.16.5)(typescript@5.4.5) + version: 10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.11))(@types/node@20.16.5)(typescript@5.4.5) typescript: specifier: 5.4.5 version: 5.4.5 vitest: specifier: ^1.6.0 - version: 1.6.0(@types/node@20.16.5)(@vitest/ui@1.6.0)(happy-dom@12.10.3)(jsdom@22.1.0)(lightningcss@1.25.1)(terser@5.31.1) + version: 1.6.0(@types/node@20.16.5)(@vitest/ui@1.6.0)(happy-dom@12.10.3)(jsdom@22.1.0(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.25.1)(terser@5.31.1) packages/tools/create-kadena-app: dependencies: @@ -3337,7 +3340,7 @@ importers: version: 5.0.7 ts-node: specifier: ~10.9.2 - version: 10.9.2(@swc/core@1.9.2)(@types/node@20.14.9)(typescript@5.4.5) + version: 10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.11))(@types/node@20.14.9)(typescript@5.4.5) typescript: specifier: 5.4.5 version: 5.4.5 @@ -3425,7 +3428,7 @@ importers: version: 1.6.0(@types/node@20.14.9)(@vitest/ui@1.6.0)(happy-dom@12.10.3)(jsdom@22.1.0(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.25.1)(terser@5.31.1) vitest-dom: specifier: ^0.1.1 - version: 0.1.1(vitest@1.6.0(@types/node@20.14.9)(@vitest/ui@1.6.0)(happy-dom@12.10.3)(jsdom@22.1.0)(lightningcss@1.25.1)(terser@5.31.1)) + version: 0.1.1(vitest@1.6.0(@types/node@20.14.9)(@vitest/ui@1.6.0)(happy-dom@12.10.3)(jsdom@22.1.0(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.25.1)(terser@5.31.1)) packages/tools/eslint-config: dependencies: @@ -3864,7 +3867,7 @@ importers: version: 4.3.2(typescript@5.6.3)(vite@5.4.9(@types/node@22.9.1)(lightningcss@1.25.1)(terser@5.31.1)) vitest: specifier: ^1.6.0 - version: 1.6.0(@types/node@22.9.1)(@vitest/ui@1.6.0)(happy-dom@12.10.3)(jsdom@22.1.0)(lightningcss@1.25.1)(terser@5.31.1) + version: 1.6.0(@types/node@22.9.1)(@vitest/ui@1.6.0)(happy-dom@12.10.3)(jsdom@22.1.0(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.25.1)(terser@5.31.1) packages: @@ -21930,7 +21933,7 @@ snapshots: '@eslint/eslintrc@2.1.4': dependencies: ajv: 6.12.6 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) espree: 9.6.1 globals: 13.24.0 ignore: 5.3.1 @@ -23259,7 +23262,7 @@ snapshots: '@humanwhocodes/config-array@0.11.14': dependencies: '@humanwhocodes/object-schema': 2.0.3 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -25448,69 +25451,73 @@ snapshots: '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) - '@parcel/bundler-default@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))': + '@parcel/bundler-default@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11)': dependencies: '@parcel/diagnostic': 2.12.0 '@parcel/graph': 3.2.0 - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) '@parcel/rust': 2.12.0 '@parcel/utils': 2.12.0 nullthrows: 1.1.1 transitivePeerDependencies: - '@parcel/core' + - '@swc/helpers' - '@parcel/cache@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))': + '@parcel/cache@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11)': dependencies: '@parcel/core': 2.12.0(@swc/helpers@0.5.11) '@parcel/fs': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) '@parcel/logger': 2.12.0 '@parcel/utils': 2.12.0 lmdb: 2.8.5 + transitivePeerDependencies: + - '@swc/helpers' '@parcel/codeframe@2.12.0': dependencies: chalk: 4.1.2 - '@parcel/compressor-raw@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))': + '@parcel/compressor-raw@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11)': dependencies: - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) transitivePeerDependencies: - '@parcel/core' + - '@swc/helpers' '@parcel/config-default@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11)(cssnano@7.0.3(postcss@8.4.47))(postcss@8.4.47)(relateurl@0.2.7)(terser@5.31.1)(typescript@5.4.5)': dependencies: - '@parcel/bundler-default': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) - '@parcel/compressor-raw': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) + '@parcel/bundler-default': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) + '@parcel/compressor-raw': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) '@parcel/core': 2.12.0(@swc/helpers@0.5.11) - '@parcel/namer-default': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) - '@parcel/optimizer-css': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) - '@parcel/optimizer-htmlnano': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(cssnano@7.0.3(postcss@8.4.47))(postcss@8.4.47)(relateurl@0.2.7)(terser@5.31.1)(typescript@5.4.5) - '@parcel/optimizer-image': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) - '@parcel/optimizer-svgo': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) + '@parcel/namer-default': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) + '@parcel/optimizer-css': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) + '@parcel/optimizer-htmlnano': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11)(cssnano@7.0.3(postcss@8.4.47))(postcss@8.4.47)(relateurl@0.2.7)(terser@5.31.1)(typescript@5.4.5) + '@parcel/optimizer-image': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) + '@parcel/optimizer-svgo': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) '@parcel/optimizer-swc': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) - '@parcel/packager-css': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) - '@parcel/packager-html': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) - '@parcel/packager-js': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) - '@parcel/packager-raw': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) - '@parcel/packager-svg': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) - '@parcel/packager-wasm': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) - '@parcel/reporter-dev-server': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) - '@parcel/resolver-default': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) - '@parcel/runtime-browser-hmr': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) - '@parcel/runtime-js': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) - '@parcel/runtime-react-refresh': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) - '@parcel/runtime-service-worker': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) - '@parcel/transformer-babel': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) - '@parcel/transformer-css': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) - '@parcel/transformer-html': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) - '@parcel/transformer-image': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) + '@parcel/packager-css': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) + '@parcel/packager-html': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) + '@parcel/packager-js': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) + '@parcel/packager-raw': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) + '@parcel/packager-svg': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) + '@parcel/packager-wasm': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) + '@parcel/reporter-dev-server': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) + '@parcel/resolver-default': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) + '@parcel/runtime-browser-hmr': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) + '@parcel/runtime-js': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) + '@parcel/runtime-react-refresh': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) + '@parcel/runtime-service-worker': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) + '@parcel/transformer-babel': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) + '@parcel/transformer-css': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) + '@parcel/transformer-html': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) + '@parcel/transformer-image': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) '@parcel/transformer-js': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) - '@parcel/transformer-json': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) - '@parcel/transformer-postcss': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) - '@parcel/transformer-posthtml': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) - '@parcel/transformer-raw': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) - '@parcel/transformer-react-refresh-wrap': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) - '@parcel/transformer-svg': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) + '@parcel/transformer-json': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) + '@parcel/transformer-postcss': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) + '@parcel/transformer-posthtml': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) + '@parcel/transformer-raw': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) + '@parcel/transformer-react-refresh-wrap': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) + '@parcel/transformer-svg': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) transitivePeerDependencies: - '@swc/helpers' - cssnano @@ -25525,20 +25532,20 @@ snapshots: '@parcel/core@2.12.0(@swc/helpers@0.5.11)': dependencies: '@mischnic/json-sourcemap': 0.1.1 - '@parcel/cache': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) + '@parcel/cache': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) '@parcel/diagnostic': 2.12.0 '@parcel/events': 2.12.0 '@parcel/fs': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) '@parcel/graph': 3.2.0 '@parcel/logger': 2.12.0 '@parcel/package-manager': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) '@parcel/profiler': 2.12.0 '@parcel/rust': 2.12.0 '@parcel/source-map': 2.1.1 '@parcel/types': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) '@parcel/utils': 2.12.0 - '@parcel/workers': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) + '@parcel/workers': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) abortcontroller-polyfill: 1.7.5 base-x: 3.0.10 browserslist: 4.23.1 @@ -25566,7 +25573,7 @@ snapshots: '@parcel/types': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) '@parcel/utils': 2.12.0 '@parcel/watcher': 2.4.1 - '@parcel/workers': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) + '@parcel/workers': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) transitivePeerDependencies: - '@swc/helpers' @@ -25583,13 +25590,14 @@ snapshots: dependencies: chalk: 4.1.2 - '@parcel/namer-default@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))': + '@parcel/namer-default@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11)': dependencies: '@parcel/diagnostic': 2.12.0 - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) nullthrows: 1.1.1 transitivePeerDependencies: - '@parcel/core' + - '@swc/helpers' '@parcel/node-resolver-core@3.3.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))': dependencies: @@ -25603,10 +25611,10 @@ snapshots: transitivePeerDependencies: - '@parcel/core' - '@parcel/optimizer-css@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))': + '@parcel/optimizer-css@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11)': dependencies: '@parcel/diagnostic': 2.12.0 - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) '@parcel/source-map': 2.1.1 '@parcel/utils': 2.12.0 browserslist: 4.23.1 @@ -25614,16 +25622,18 @@ snapshots: nullthrows: 1.1.1 transitivePeerDependencies: - '@parcel/core' + - '@swc/helpers' - '@parcel/optimizer-htmlnano@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(cssnano@7.0.3(postcss@8.4.47))(postcss@8.4.47)(relateurl@0.2.7)(terser@5.31.1)(typescript@5.4.5)': + '@parcel/optimizer-htmlnano@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11)(cssnano@7.0.3(postcss@8.4.47))(postcss@8.4.47)(relateurl@0.2.7)(terser@5.31.1)(typescript@5.4.5)': dependencies: - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) htmlnano: 2.1.1(cssnano@7.0.3(postcss@8.4.47))(postcss@8.4.47)(relateurl@0.2.7)(svgo@2.8.0)(terser@5.31.1)(typescript@5.4.5) nullthrows: 1.1.1 posthtml: 0.16.6 svgo: 2.8.0 transitivePeerDependencies: - '@parcel/core' + - '@swc/helpers' - cssnano - postcss - purgecss @@ -25633,28 +25643,31 @@ snapshots: - typescript - uncss - '@parcel/optimizer-image@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))': + '@parcel/optimizer-image@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11)': dependencies: '@parcel/core': 2.12.0(@swc/helpers@0.5.11) '@parcel/diagnostic': 2.12.0 - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) '@parcel/rust': 2.12.0 '@parcel/utils': 2.12.0 - '@parcel/workers': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) + '@parcel/workers': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) + transitivePeerDependencies: + - '@swc/helpers' - '@parcel/optimizer-svgo@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))': + '@parcel/optimizer-svgo@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11)': dependencies: '@parcel/diagnostic': 2.12.0 - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) '@parcel/utils': 2.12.0 svgo: 2.8.0 transitivePeerDependencies: - '@parcel/core' + - '@swc/helpers' '@parcel/optimizer-swc@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11)': dependencies: '@parcel/diagnostic': 2.12.0 - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) '@parcel/source-map': 2.1.1 '@parcel/utils': 2.12.0 '@swc/core': 1.3.107(@swc/helpers@0.5.11) @@ -25672,37 +25685,39 @@ snapshots: '@parcel/node-resolver-core': 3.3.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) '@parcel/types': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) '@parcel/utils': 2.12.0 - '@parcel/workers': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) + '@parcel/workers': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) '@swc/core': 1.3.107(@swc/helpers@0.5.11) semver: 7.6.3 transitivePeerDependencies: - '@swc/helpers' - '@parcel/packager-css@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))': + '@parcel/packager-css@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11)': dependencies: '@parcel/diagnostic': 2.12.0 - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) '@parcel/source-map': 2.1.1 '@parcel/utils': 2.12.0 lightningcss: 1.25.1 nullthrows: 1.1.1 transitivePeerDependencies: - '@parcel/core' + - '@swc/helpers' - '@parcel/packager-html@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))': + '@parcel/packager-html@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11)': dependencies: - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) '@parcel/types': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) '@parcel/utils': 2.12.0 nullthrows: 1.1.1 posthtml: 0.16.6 transitivePeerDependencies: - '@parcel/core' + - '@swc/helpers' - '@parcel/packager-js@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))': + '@parcel/packager-js@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11)': dependencies: '@parcel/diagnostic': 2.12.0 - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) '@parcel/rust': 2.12.0 '@parcel/source-map': 2.1.1 '@parcel/types': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) @@ -25711,33 +25726,38 @@ snapshots: nullthrows: 1.1.1 transitivePeerDependencies: - '@parcel/core' + - '@swc/helpers' - '@parcel/packager-raw@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))': + '@parcel/packager-raw@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11)': dependencies: - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) transitivePeerDependencies: - '@parcel/core' + - '@swc/helpers' - '@parcel/packager-svg@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))': + '@parcel/packager-svg@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11)': dependencies: - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) '@parcel/types': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) '@parcel/utils': 2.12.0 posthtml: 0.16.6 transitivePeerDependencies: - '@parcel/core' + - '@swc/helpers' - '@parcel/packager-wasm@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))': + '@parcel/packager-wasm@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11)': dependencies: - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) transitivePeerDependencies: - '@parcel/core' + - '@swc/helpers' - '@parcel/plugin@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))': + '@parcel/plugin@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11)': dependencies: '@parcel/types': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) transitivePeerDependencies: - '@parcel/core' + - '@swc/helpers' '@parcel/profiler@2.12.0': dependencies: @@ -25745,71 +25765,79 @@ snapshots: '@parcel/events': 2.12.0 chrome-trace-event: 1.0.4 - '@parcel/reporter-cli@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))': + '@parcel/reporter-cli@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11)': dependencies: - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) '@parcel/types': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) '@parcel/utils': 2.12.0 chalk: 4.1.2 term-size: 2.2.1 transitivePeerDependencies: - '@parcel/core' + - '@swc/helpers' - '@parcel/reporter-dev-server@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))': + '@parcel/reporter-dev-server@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11)': dependencies: - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) '@parcel/utils': 2.12.0 transitivePeerDependencies: - '@parcel/core' + - '@swc/helpers' - '@parcel/reporter-tracer@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))': + '@parcel/reporter-tracer@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11)': dependencies: - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) '@parcel/utils': 2.12.0 chrome-trace-event: 1.0.4 nullthrows: 1.1.1 transitivePeerDependencies: - '@parcel/core' + - '@swc/helpers' - '@parcel/resolver-default@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))': + '@parcel/resolver-default@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11)': dependencies: '@parcel/node-resolver-core': 3.3.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) transitivePeerDependencies: - '@parcel/core' + - '@swc/helpers' - '@parcel/runtime-browser-hmr@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))': + '@parcel/runtime-browser-hmr@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11)': dependencies: - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) '@parcel/utils': 2.12.0 transitivePeerDependencies: - '@parcel/core' + - '@swc/helpers' - '@parcel/runtime-js@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))': + '@parcel/runtime-js@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11)': dependencies: '@parcel/diagnostic': 2.12.0 - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) '@parcel/utils': 2.12.0 nullthrows: 1.1.1 transitivePeerDependencies: - '@parcel/core' + - '@swc/helpers' - '@parcel/runtime-react-refresh@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))': + '@parcel/runtime-react-refresh@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11)': dependencies: - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) '@parcel/utils': 2.12.0 react-error-overlay: 6.0.9 react-refresh: 0.9.0 transitivePeerDependencies: - '@parcel/core' + - '@swc/helpers' - '@parcel/runtime-service-worker@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))': + '@parcel/runtime-service-worker@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11)': dependencies: - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) '@parcel/utils': 2.12.0 nullthrows: 1.1.1 transitivePeerDependencies: - '@parcel/core' + - '@swc/helpers' '@parcel/rust@2.12.0': {} @@ -25817,10 +25845,10 @@ snapshots: dependencies: detect-libc: 1.0.3 - '@parcel/transformer-babel@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))': + '@parcel/transformer-babel@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11)': dependencies: '@parcel/diagnostic': 2.12.0 - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) '@parcel/source-map': 2.1.1 '@parcel/utils': 2.12.0 browserslist: 4.23.1 @@ -25829,11 +25857,12 @@ snapshots: semver: 7.6.3 transitivePeerDependencies: - '@parcel/core' + - '@swc/helpers' - '@parcel/transformer-css@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))': + '@parcel/transformer-css@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11)': dependencies: '@parcel/diagnostic': 2.12.0 - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) '@parcel/source-map': 2.1.1 '@parcel/utils': 2.12.0 browserslist: 4.23.1 @@ -25841,11 +25870,12 @@ snapshots: nullthrows: 1.1.1 transitivePeerDependencies: - '@parcel/core' + - '@swc/helpers' - '@parcel/transformer-html@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))': + '@parcel/transformer-html@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11)': dependencies: '@parcel/diagnostic': 2.12.0 - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) '@parcel/rust': 2.12.0 nullthrows: 1.1.1 posthtml: 0.16.6 @@ -25855,41 +25885,45 @@ snapshots: srcset: 4.0.0 transitivePeerDependencies: - '@parcel/core' + - '@swc/helpers' - '@parcel/transformer-image@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))': + '@parcel/transformer-image@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11)': dependencies: '@parcel/core': 2.12.0(@swc/helpers@0.5.11) - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) '@parcel/utils': 2.12.0 - '@parcel/workers': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) + '@parcel/workers': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) nullthrows: 1.1.1 + transitivePeerDependencies: + - '@swc/helpers' '@parcel/transformer-js@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))': dependencies: '@parcel/core': 2.12.0(@swc/helpers@0.5.11) '@parcel/diagnostic': 2.12.0 - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) '@parcel/rust': 2.12.0 '@parcel/source-map': 2.1.1 '@parcel/utils': 2.12.0 - '@parcel/workers': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) + '@parcel/workers': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) '@swc/helpers': 0.5.11 browserslist: 4.23.1 nullthrows: 1.1.1 regenerator-runtime: 0.13.11 semver: 7.6.3 - '@parcel/transformer-json@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))': + '@parcel/transformer-json@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11)': dependencies: - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) json5: 2.2.3 transitivePeerDependencies: - '@parcel/core' + - '@swc/helpers' - '@parcel/transformer-postcss@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))': + '@parcel/transformer-postcss@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11)': dependencies: '@parcel/diagnostic': 2.12.0 - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) '@parcel/rust': 2.12.0 '@parcel/utils': 2.12.0 clone: 2.1.2 @@ -25898,10 +25932,11 @@ snapshots: semver: 7.6.3 transitivePeerDependencies: - '@parcel/core' + - '@swc/helpers' - '@parcel/transformer-posthtml@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))': + '@parcel/transformer-posthtml@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11)': dependencies: - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) '@parcel/utils': 2.12.0 nullthrows: 1.1.1 posthtml: 0.16.6 @@ -25910,25 +25945,28 @@ snapshots: semver: 7.6.3 transitivePeerDependencies: - '@parcel/core' + - '@swc/helpers' - '@parcel/transformer-raw@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))': + '@parcel/transformer-raw@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11)': dependencies: - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) transitivePeerDependencies: - '@parcel/core' + - '@swc/helpers' - '@parcel/transformer-react-refresh-wrap@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))': + '@parcel/transformer-react-refresh-wrap@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11)': dependencies: - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) '@parcel/utils': 2.12.0 react-refresh: 0.9.0 transitivePeerDependencies: - '@parcel/core' + - '@swc/helpers' - '@parcel/transformer-svg@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))': + '@parcel/transformer-svg@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11)': dependencies: '@parcel/diagnostic': 2.12.0 - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) '@parcel/rust': 2.12.0 nullthrows: 1.1.1 posthtml: 0.16.6 @@ -25937,15 +25975,16 @@ snapshots: semver: 7.6.3 transitivePeerDependencies: - '@parcel/core' + - '@swc/helpers' '@parcel/types@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11)': dependencies: - '@parcel/cache': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) + '@parcel/cache': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) '@parcel/diagnostic': 2.12.0 '@parcel/fs': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) '@parcel/package-manager': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) '@parcel/source-map': 2.1.1 - '@parcel/workers': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) + '@parcel/workers': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) utility-types: 3.11.0 transitivePeerDependencies: - '@parcel/core' @@ -26023,7 +26062,7 @@ snapshots: '@parcel/watcher-win32-ia32': 2.4.1 '@parcel/watcher-win32-x64': 2.4.1 - '@parcel/workers@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))': + '@parcel/workers@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11)': dependencies: '@parcel/core': 2.12.0(@swc/helpers@0.5.11) '@parcel/diagnostic': 2.12.0 @@ -26032,6 +26071,8 @@ snapshots: '@parcel/types': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) '@parcel/utils': 2.12.0 nullthrows: 1.1.1 + transitivePeerDependencies: + - '@swc/helpers' '@peculiar/asn1-schema@2.3.8': dependencies: @@ -28851,23 +28892,6 @@ snapshots: '@swc/core-win32-x64-msvc': 1.3.78 '@swc/helpers': 0.5.11 - '@swc/core@1.9.2': - dependencies: - '@swc/counter': 0.1.3 - '@swc/types': 0.1.15 - optionalDependencies: - '@swc/core-darwin-arm64': 1.9.2 - '@swc/core-darwin-x64': 1.9.2 - '@swc/core-linux-arm-gnueabihf': 1.9.2 - '@swc/core-linux-arm64-gnu': 1.9.2 - '@swc/core-linux-arm64-musl': 1.9.2 - '@swc/core-linux-x64-gnu': 1.9.2 - '@swc/core-linux-x64-musl': 1.9.2 - '@swc/core-win32-arm64-msvc': 1.9.2 - '@swc/core-win32-ia32-msvc': 1.9.2 - '@swc/core-win32-x64-msvc': 1.9.2 - optional: true - '@swc/core@1.9.2(@swc/helpers@0.5.11)': dependencies: '@swc/counter': 0.1.3 @@ -29002,7 +29026,7 @@ snapshots: '@testing-library/react-hooks@8.0.1(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.6 react: 18.3.1 react-error-boundary: 3.1.4(react@18.3.1) optionalDependencies: @@ -29556,7 +29580,7 @@ snapshots: '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) eslint: 8.57.0 graphemer: 1.4.0 ignore: 5.3.1 @@ -29665,7 +29689,7 @@ snapshots: '@typescript-eslint/types': 6.21.0 '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) eslint: 8.57.0 optionalDependencies: typescript: 5.4.5 @@ -29747,7 +29771,7 @@ snapshots: dependencies: '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.4.5) - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) eslint: 8.57.0 ts-api-utils: 1.3.0(typescript@5.4.5) optionalDependencies: @@ -29875,7 +29899,7 @@ snapshots: dependencies: '@typescript-eslint/types': 6.19.1 '@typescript-eslint/visitor-keys': 6.19.1 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.3 @@ -29905,7 +29929,7 @@ snapshots: dependencies: '@typescript-eslint/types': 6.21.0 '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.3 @@ -30457,9 +30481,9 @@ snapshots: - terser - webpack - '@vanilla-extract/next-plugin@2.4.0(@types/node@20.14.9)(lightningcss@1.25.1)(next@14.2.2(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.46.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(terser@5.31.1)(webpack@5.88.2)': + '@vanilla-extract/next-plugin@2.4.0(@types/node@20.14.9)(lightningcss@1.25.1)(next@14.2.2(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.46.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(terser@5.31.1)(webpack@5.88.2(@swc/core@1.9.2(@swc/helpers@0.5.11)))': dependencies: - '@vanilla-extract/webpack-plugin': 2.3.7(@types/node@20.14.9)(lightningcss@1.25.1)(terser@5.31.1)(webpack@5.88.2) + '@vanilla-extract/webpack-plugin': 2.3.7(@types/node@20.14.9)(lightningcss@1.25.1)(terser@5.31.1)(webpack@5.88.2(@swc/core@1.9.2(@swc/helpers@0.5.11))) next: 14.2.2(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.46.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) transitivePeerDependencies: - '@types/node' @@ -30474,9 +30498,9 @@ snapshots: - terser - webpack - '@vanilla-extract/next-plugin@2.4.0(@types/node@20.14.9)(lightningcss@1.25.1)(next@14.2.2(@opentelemetry/api@1.9.0)(@playwright/test@1.46.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(terser@5.31.1)(webpack@5.88.2(@swc/core@1.9.2))': + '@vanilla-extract/next-plugin@2.4.0(@types/node@20.14.9)(lightningcss@1.25.1)(next@14.2.2(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.46.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(terser@5.31.1)(webpack@5.88.2)': dependencies: - '@vanilla-extract/webpack-plugin': 2.3.7(@types/node@20.14.9)(lightningcss@1.25.1)(terser@5.31.1)(webpack@5.88.2(@swc/core@1.9.2)) + '@vanilla-extract/webpack-plugin': 2.3.7(@types/node@20.14.9)(lightningcss@1.25.1)(terser@5.31.1)(webpack@5.88.2) next: 14.2.2(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.46.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) transitivePeerDependencies: - '@types/node' @@ -30491,7 +30515,7 @@ snapshots: - terser - webpack - '@vanilla-extract/next-plugin@2.4.0(@types/node@20.14.9)(next@14.2.2(@opentelemetry/api@1.9.0)(@playwright/test@1.46.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(webpack@5.88.2)': + '@vanilla-extract/next-plugin@2.4.0(@types/node@20.14.9)(next@14.2.2(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.46.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(webpack@5.88.2)': dependencies: '@vanilla-extract/webpack-plugin': 2.3.7(@types/node@20.14.9)(webpack@5.88.2) next: 14.2.2(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.46.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -30508,7 +30532,7 @@ snapshots: - terser - webpack - '@vanilla-extract/next-plugin@2.4.0(@types/node@20.16.5)(lightningcss@1.25.1)(next@14.2.2(@opentelemetry/api@1.9.0)(@playwright/test@1.46.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(terser@5.31.1)(webpack@5.88.2)': + '@vanilla-extract/next-plugin@2.4.0(@types/node@20.16.5)(lightningcss@1.25.1)(next@14.2.2(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.46.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(terser@5.31.1)(webpack@5.88.2)': dependencies: '@vanilla-extract/webpack-plugin': 2.3.7(@types/node@20.16.5)(lightningcss@1.25.1)(terser@5.31.1)(webpack@5.88.2) next: 14.2.2(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(@playwright/test@1.46.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -30621,13 +30645,13 @@ snapshots: - supports-color - terser - '@vanilla-extract/webpack-plugin@2.3.7(@types/node@20.14.9)(lightningcss@1.25.1)(terser@5.31.1)(webpack@5.88.2(@swc/core@1.9.2))': + '@vanilla-extract/webpack-plugin@2.3.7(@types/node@20.14.9)(lightningcss@1.25.1)(terser@5.31.1)(webpack@5.88.2(@swc/core@1.9.2(@swc/helpers@0.5.11)))': dependencies: '@vanilla-extract/integration': 7.1.7(@types/node@20.14.9)(lightningcss@1.25.1)(terser@5.31.1) chalk: 4.1.2 debug: 4.3.4(supports-color@5.5.0) loader-utils: 2.0.4 - webpack: 5.88.2(@swc/core@1.9.2) + webpack: 5.88.2(@swc/core@1.9.2(@swc/helpers@0.5.11)) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -30752,7 +30776,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@vitest/coverage-v8@1.6.0(vitest@1.6.0(@types/node@20.16.5)(@vitest/ui@1.6.0)(happy-dom@12.10.3)(jsdom@22.1.0)(lightningcss@1.25.1)(terser@5.31.1))': + '@vitest/coverage-v8@1.6.0(vitest@1.6.0(@types/node@20.16.5)(@vitest/ui@1.6.0)(happy-dom@12.10.3)(jsdom@22.1.0(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.25.1)(terser@5.31.1))': dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 0.2.3 @@ -30767,7 +30791,7 @@ snapshots: std-env: 3.7.0 strip-literal: 2.1.0 test-exclude: 6.0.0 - vitest: 1.6.0(@types/node@20.16.5)(@vitest/ui@1.6.0)(happy-dom@12.10.3)(jsdom@22.1.0)(lightningcss@1.25.1)(terser@5.31.1) + vitest: 1.6.0(@types/node@20.16.5)(@vitest/ui@1.6.0)(happy-dom@12.10.3)(jsdom@22.1.0(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.25.1)(terser@5.31.1) transitivePeerDependencies: - supports-color @@ -30821,7 +30845,7 @@ snapshots: pathe: 1.1.2 picocolors: 1.1.0 sirv: 2.0.4 - vitest: 1.6.0(@types/node@22.9.1)(@vitest/ui@1.6.0)(happy-dom@12.10.3)(jsdom@22.1.0)(lightningcss@1.25.1)(terser@5.31.1) + vitest: 1.6.0(@types/node@20.16.5)(@vitest/ui@1.6.0)(happy-dom@12.10.3)(jsdom@22.1.0(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.25.1)(terser@5.31.1) '@vitest/utils@1.6.0': dependencies: @@ -32230,7 +32254,7 @@ snapshots: cache-sh@1.3.1: dependencies: commander: 11.1.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) glob: 10.4.5 transitivePeerDependencies: - supports-color @@ -33306,10 +33330,6 @@ snapshots: dependencies: ms: 2.1.3 - debug@4.3.4: - dependencies: - ms: 2.1.2 - debug@4.3.4(supports-color@5.5.0): dependencies: ms: 2.1.2 @@ -34362,7 +34382,7 @@ snapshots: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 @@ -38440,10 +38460,10 @@ snapshots: schema-utils: 4.2.0 webpack: 5.88.2(@swc/core@1.9.2(@swc/helpers@0.5.11))(esbuild@0.21.5) - mini-css-extract-plugin@2.7.6(webpack@5.88.2(@swc/core@1.9.2)): + mini-css-extract-plugin@2.7.6(webpack@5.88.2(@swc/core@1.9.2(@swc/helpers@0.5.11))): dependencies: schema-utils: 4.2.0 - webpack: 5.88.2(@swc/core@1.9.2) + webpack: 5.88.2(@swc/core@1.9.2(@swc/helpers@0.5.11)) minimalistic-assert@1.0.1: {} @@ -39335,9 +39355,9 @@ snapshots: '@parcel/fs': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) '@parcel/logger': 2.12.0 '@parcel/package-manager': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) - '@parcel/reporter-cli': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) - '@parcel/reporter-dev-server': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) - '@parcel/reporter-tracer': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11)) + '@parcel/reporter-cli': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) + '@parcel/reporter-dev-server': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) + '@parcel/reporter-tracer': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.11))(@swc/helpers@0.5.11) '@parcel/utils': 2.12.0 chalk: 4.1.2 commander: 7.2.0 @@ -39692,21 +39712,21 @@ snapshots: camelcase-css: 2.0.1 postcss: 8.4.47 - postcss-load-config@4.0.2(postcss@8.4.47)(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.4.5)): + postcss-load-config@4.0.2(postcss@8.4.47)(ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.11))(@types/node@20.14.9)(typescript@5.4.5)): dependencies: lilconfig: 3.1.2 yaml: 2.4.5 optionalDependencies: postcss: 8.4.47 - ts-node: 10.9.2(@swc/core@1.9.2)(@types/node@20.14.9)(typescript@5.4.5) + ts-node: 10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.11))(@types/node@20.14.9)(typescript@5.4.5) - postcss-load-config@4.0.2(postcss@8.4.47)(ts-node@10.9.2(@types/node@22.9.1)(typescript@5.4.5)): + postcss-load-config@4.0.2(postcss@8.4.47)(ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.11))(@types/node@22.9.1)(typescript@5.4.5)): dependencies: lilconfig: 3.1.2 yaml: 2.4.5 optionalDependencies: postcss: 8.4.47 - ts-node: 10.9.2(@types/node@22.9.1)(typescript@5.4.5) + ts-node: 10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.11))(@types/node@22.9.1)(typescript@5.4.5) postcss-merge-longhand@7.0.2(postcss@8.4.47): dependencies: @@ -40891,7 +40911,7 @@ snapshots: require-in-the-middle@7.3.0: dependencies: - debug: 4.3.4 + debug: 4.3.4(supports-color@5.5.0) module-details-from-path: 1.0.3 resolve: 1.22.8 transitivePeerDependencies: @@ -42046,7 +42066,7 @@ snapshots: string-width: 4.2.3 strip-ansi: 6.0.1 - tailwindcss@3.4.4(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.4.5)): + tailwindcss@3.4.4(ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.11))(@types/node@20.14.9)(typescript@5.4.5)): dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -42065,7 +42085,7 @@ snapshots: postcss: 8.4.47 postcss-import: 15.1.0(postcss@8.4.47) postcss-js: 4.0.1(postcss@8.4.47) - postcss-load-config: 4.0.2(postcss@8.4.47)(ts-node@10.9.2(@types/node@20.14.9)(typescript@5.4.5)) + postcss-load-config: 4.0.2(postcss@8.4.47)(ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.11))(@types/node@20.14.9)(typescript@5.4.5)) postcss-nested: 6.0.1(postcss@8.4.47) postcss-selector-parser: 6.1.0 resolve: 1.22.8 @@ -42073,7 +42093,7 @@ snapshots: transitivePeerDependencies: - ts-node - tailwindcss@3.4.4(ts-node@10.9.2(@types/node@22.9.1)(typescript@5.4.5)): + tailwindcss@3.4.4(ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.11))(@types/node@22.9.1)(typescript@5.4.5)): dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -42092,7 +42112,7 @@ snapshots: postcss: 8.4.47 postcss-import: 15.1.0(postcss@8.4.47) postcss-js: 4.0.1(postcss@8.4.47) - postcss-load-config: 4.0.2(postcss@8.4.47)(ts-node@10.9.2(@types/node@22.9.1)(typescript@5.4.5)) + postcss-load-config: 4.0.2(postcss@8.4.47)(ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.11))(@types/node@22.9.1)(typescript@5.4.5)) postcss-nested: 6.0.1(postcss@8.4.47) postcss-selector-parser: 6.1.0 resolve: 1.22.8 @@ -42167,14 +42187,14 @@ snapshots: '@swc/core': 1.9.2(@swc/helpers@0.5.11) esbuild: 0.21.5 - terser-webpack-plugin@5.3.10(@swc/core@1.9.2)(webpack@5.88.2(@swc/core@1.9.2)): + terser-webpack-plugin@5.3.10(@swc/core@1.9.2(@swc/helpers@0.5.11))(webpack@5.88.2(@swc/core@1.9.2(@swc/helpers@0.5.11))): dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.2 terser: 5.31.1 - webpack: 5.88.2(@swc/core@1.9.2) + webpack: 5.88.2(@swc/core@1.9.2(@swc/helpers@0.5.11)) optionalDependencies: '@swc/core': 1.9.2(@swc/helpers@0.5.11) @@ -42399,7 +42419,7 @@ snapshots: '@swc/core': 1.3.78(@swc/helpers@0.5.11) optional: true - ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.14.9)(typescript@5.4.5): + ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.11))(@types/node@20.14.9)(typescript@5.4.5): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 @@ -42417,9 +42437,9 @@ snapshots: v8-compile-cache-lib: 3.0.1 yn: 3.1.1 optionalDependencies: - '@swc/core': 1.9.2 + '@swc/core': 1.9.2(@swc/helpers@0.5.11) - ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.14.9)(typescript@5.6.3): + ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.11))(@types/node@20.14.9)(typescript@5.6.3): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 @@ -42439,7 +42459,7 @@ snapshots: optionalDependencies: '@swc/core': 1.9.2(@swc/helpers@0.5.11) - ts-node@10.9.2(@swc/core@1.9.2)(@types/node@20.16.5)(typescript@5.4.5): + ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.11))(@types/node@20.16.5)(typescript@5.4.5): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 @@ -42459,7 +42479,7 @@ snapshots: optionalDependencies: '@swc/core': 1.9.2(@swc/helpers@0.5.11) - ts-node@10.9.2(@types/node@22.9.1)(typescript@5.4.5): + ts-node@10.9.2(@swc/core@1.9.2(@swc/helpers@0.5.11))(@types/node@22.9.1)(typescript@5.4.5): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 @@ -42476,6 +42496,8 @@ snapshots: typescript: 5.4.5 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 + optionalDependencies: + '@swc/core': 1.9.2(@swc/helpers@0.5.11) optional: true ts-toolbelt@9.6.0: {} @@ -43353,7 +43375,7 @@ snapshots: lightningcss: 1.25.1 terser: 5.31.1 - vitest-dom@0.1.1(vitest@1.6.0(@types/node@20.14.9)(@vitest/ui@1.6.0)(happy-dom@12.10.3)(jsdom@22.1.0)(lightningcss@1.25.1)(terser@5.31.1)): + vitest-dom@0.1.1(vitest@1.6.0(@types/node@20.14.9)(@vitest/ui@1.6.0)(happy-dom@12.10.3)(jsdom@22.1.0(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.25.1)(terser@5.31.1)): dependencies: aria-query: 5.3.0 chalk: 5.3.0 @@ -43363,7 +43385,7 @@ snapshots: redent: 4.0.0 vitest: 1.6.0(@types/node@20.14.9)(@vitest/ui@1.6.0)(happy-dom@12.10.3)(jsdom@22.1.0(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.25.1)(terser@5.31.1) - vitest-dom@0.1.1(vitest@1.6.0(@types/node@20.16.5)(@vitest/ui@1.6.0)(happy-dom@12.10.3)(jsdom@22.1.0)(lightningcss@1.25.1)(terser@5.31.1)): + vitest-dom@0.1.1(vitest@1.6.0(@types/node@20.16.5)(@vitest/ui@1.6.0)(happy-dom@12.10.3)(jsdom@22.1.0(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.25.1)(terser@5.31.1)): dependencies: aria-query: 5.3.0 chalk: 5.3.0 @@ -43371,7 +43393,7 @@ snapshots: dom-accessibility-api: 0.6.3 lodash-es: 4.17.21 redent: 4.0.0 - vitest: 1.6.0(@types/node@20.16.5)(@vitest/ui@1.6.0)(happy-dom@12.10.3)(jsdom@22.1.0)(lightningcss@1.25.1)(terser@5.31.1) + vitest: 1.6.0(@types/node@20.16.5)(@vitest/ui@1.6.0)(happy-dom@12.10.3)(jsdom@22.1.0(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.25.1)(terser@5.31.1) vitest@1.6.0(@types/node@20.14.9)(@vitest/ui@1.6.0)(happy-dom@12.10.3)(jsdom@22.1.0(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.25.1)(terser@5.31.1): dependencies: @@ -43410,7 +43432,7 @@ snapshots: - supports-color - terser - vitest@1.6.0(@types/node@20.16.5)(@vitest/ui@1.6.0)(happy-dom@12.10.3)(jsdom@22.1.0)(lightningcss@1.25.1)(terser@5.31.1): + vitest@1.6.0(@types/node@20.16.5)(@vitest/ui@1.6.0)(happy-dom@12.10.3)(jsdom@22.1.0(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.25.1)(terser@5.31.1): dependencies: '@vitest/expect': 1.6.0 '@vitest/runner': 1.6.0 @@ -43447,7 +43469,7 @@ snapshots: - supports-color - terser - vitest@1.6.0(@types/node@22.9.1)(@vitest/ui@1.6.0)(happy-dom@12.10.3)(jsdom@22.1.0)(lightningcss@1.25.1)(terser@5.31.1): + vitest@1.6.0(@types/node@22.9.1)(@vitest/ui@1.6.0)(happy-dom@12.10.3)(jsdom@22.1.0(canvas@2.11.2(encoding@0.1.13)))(lightningcss@1.25.1)(terser@5.31.1): dependencies: '@vitest/expect': 1.6.0 '@vitest/runner': 1.6.0 @@ -43679,7 +43701,7 @@ snapshots: - esbuild - uglify-js - webpack@5.88.2(@swc/core@1.9.2(@swc/helpers@0.5.11))(esbuild@0.21.5): + webpack@5.88.2(@swc/core@1.9.2(@swc/helpers@0.5.11)): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.5 @@ -43702,7 +43724,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(@swc/core@1.9.2(@swc/helpers@0.5.11))(esbuild@0.21.5)(webpack@5.88.2(@swc/core@1.9.2(@swc/helpers@0.5.11))(esbuild@0.21.5)) + terser-webpack-plugin: 5.3.10(@swc/core@1.9.2(@swc/helpers@0.5.11))(webpack@5.88.2(@swc/core@1.9.2(@swc/helpers@0.5.11))) watchpack: 2.4.1 webpack-sources: 3.2.3 transitivePeerDependencies: @@ -43710,7 +43732,7 @@ snapshots: - esbuild - uglify-js - webpack@5.88.2(@swc/core@1.9.2): + webpack@5.88.2(@swc/core@1.9.2(@swc/helpers@0.5.11))(esbuild@0.21.5): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.5 @@ -43733,7 +43755,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(@swc/core@1.9.2)(webpack@5.88.2(@swc/core@1.9.2)) + terser-webpack-plugin: 5.3.10(@swc/core@1.9.2(@swc/helpers@0.5.11))(esbuild@0.21.5)(webpack@5.88.2(@swc/core@1.9.2(@swc/helpers@0.5.11))(esbuild@0.21.5)) watchpack: 2.4.1 webpack-sources: 3.2.3 transitivePeerDependencies: