From ab80088c4984b329123d73418d5dc2207cabf1cb Mon Sep 17 00:00:00 2001 From: antoncoding Date: Mon, 8 Dec 2025 23:41:02 +0800 Subject: [PATCH 01/12] chore: some linting rules --- app/market/[chainId]/[marketid]/RateChart.tsx | 2 +- app/market/[chainId]/[marketid]/VolumeChart.tsx | 3 +-- app/markets/components/constants.ts | 10 +++++----- .../components/RebalanceProcessModal.tsx | 2 +- app/positions/report/components/ReportTable.tsx | 2 +- app/rewards/components/RewardTable.tsx | 4 ++-- biome.jsonc | 12 ++++++------ scripts/generate-oracle-cache.ts | 16 ++++++++-------- src/components/TokenIcon.tsx | 2 +- src/components/providers/QueryProvider.tsx | 4 ++-- src/constants/markets.ts | 2 +- src/constants/vaults/known_vaults.ts | 10 +++++----- src/contexts/MarketsContext.tsx | 4 ++-- src/data-sources/morpho-api/vaults.ts | 2 +- src/data-sources/subgraph/market.ts | 4 ++-- src/hooks/useAllowance.ts | 2 +- src/hooks/useBorrowTransaction.ts | 2 +- src/hooks/useFreshMarketsState.ts | 4 ++-- src/hooks/useLiquidations.ts | 6 +++--- src/hooks/useMarketBorrows.ts | 4 ++-- src/hooks/useMarketData.ts | 4 ++-- src/hooks/useMarketHistoricalData.ts | 4 ++-- src/hooks/useMarketLiquidations.ts | 4 ++-- src/hooks/useMarketSupplies.ts | 4 ++-- src/hooks/useMultiMarketSupply.ts | 2 +- src/hooks/usePermit2.ts | 2 +- src/hooks/useRebalance.ts | 2 +- src/hooks/useRepayTransaction.ts | 2 +- src/hooks/useSupplyMarket.ts | 2 +- src/hooks/useUserPosition.ts | 8 ++++---- src/hooks/useUserPositions.ts | 2 +- src/hooks/useUserPositionsSummaryData.ts | 6 +++--- src/hooks/useVaultV2Deposit.ts | 2 +- src/services/statsService.ts | 4 ++-- src/utils/balance.ts | 4 ++-- src/utils/blockFinder.ts | 6 +++--- src/utils/external.ts | 2 +- src/utils/interest.ts | 2 +- src/utils/merklApi.ts | 2 +- src/utils/networks.ts | 4 ++-- src/utils/positions.ts | 4 ++-- src/utils/subgraph-urls.ts | 2 +- 42 files changed, 85 insertions(+), 86 deletions(-) diff --git a/app/market/[chainId]/[marketid]/RateChart.tsx b/app/market/[chainId]/[marketid]/RateChart.tsx index 85919139..e40f57b2 100644 --- a/app/market/[chainId]/[marketid]/RateChart.tsx +++ b/app/market/[chainId]/[marketid]/RateChart.tsx @@ -90,7 +90,7 @@ function RateChart({ historicalData, market, isLoading, selectedTimeframe, selec const formatTime = (unixTime: number) => { const date = new Date(unixTime * 1000); - if (selectedTimeRange.endTimestamp - selectedTimeRange.startTimestamp <= 86400) { + if (selectedTimeRange.endTimestamp - selectedTimeRange.startTimestamp <= 86_400) { return date.toLocaleTimeString(undefined, { hour: '2-digit', minute: '2-digit', diff --git a/app/market/[chainId]/[marketid]/VolumeChart.tsx b/app/market/[chainId]/[marketid]/VolumeChart.tsx index 774819d1..a1201993 100644 --- a/app/market/[chainId]/[marketid]/VolumeChart.tsx +++ b/app/market/[chainId]/[marketid]/VolumeChart.tsx @@ -99,8 +99,7 @@ function VolumeChart({ const data = volumeView === 'USD' ? historicalData?.[`${type}AssetsUsd`] : historicalData?.[`${type}Assets`]; if (!data || data.length === 0) return { current: 0, netChange: 0, netChangePercentage: 0 }; - const current = - volumeView === 'USD' ? data[data.length - 1].y : Number(formatUnits(BigInt(data[data.length - 1].y), market.loanAsset.decimals)); + const current = volumeView === 'USD' ? data.at(-1).y : Number(formatUnits(BigInt(data.at(-1).y), market.loanAsset.decimals)); const start = volumeView === 'USD' ? data[0].y : Number(formatUnits(BigInt(data[0].y), market.loanAsset.decimals)); const netChange = current - start; const netChangePercentage = start !== 0 ? (netChange / start) * 100 : 0; diff --git a/app/markets/components/constants.ts b/app/markets/components/constants.ts index 7b313484..9ed581bf 100644 --- a/app/markets/components/constants.ts +++ b/app/markets/components/constants.ts @@ -17,18 +17,18 @@ export enum SortColumn { export const GAS_COSTS = { // direct supply through bundler, no approval - BUNDLER_SUPPLY: 180000, + BUNDLER_SUPPLY: 180_000, // An additional supply through the bundler, already approved - SINGLE_SUPPLY: 80000, + SINGLE_SUPPLY: 80_000, - SINGLE_WITHDRAW: 100000, + SINGLE_WITHDRAW: 100_000, // single withdraw + supply - BUNDLER_REBALANCE: 240000, + BUNDLER_REBALANCE: 240_000, // directly borrow from Morpho Blue - DIRECT_WITHDRAW: 100000, + DIRECT_WITHDRAW: 100_000, }; // additional multiplier for buffer gas. Rabby uses 1.5 diff --git a/app/positions/components/RebalanceProcessModal.tsx b/app/positions/components/RebalanceProcessModal.tsx index 03479a3f..b174756e 100644 --- a/app/positions/components/RebalanceProcessModal.tsx +++ b/app/positions/components/RebalanceProcessModal.tsx @@ -25,7 +25,7 @@ export function RebalanceProcessModal({ { key: 'approve_permit2', label: 'Authorize Permit2', - detail: `Approve the Permit2 contract if this is your first time using it.`, + detail: 'Approve the Permit2 contract if this is your first time using it.', }, { key: 'authorize_bundler_sig', diff --git a/app/positions/report/components/ReportTable.tsx b/app/positions/report/components/ReportTable.tsx index 3a208786..b3d89a8b 100644 --- a/app/positions/report/components/ReportTable.tsx +++ b/app/positions/report/components/ReportTable.tsx @@ -54,7 +54,7 @@ const formatNumber = (value: bigint, decimals: number) => { }; const formatDays = (seconds: number) => { - const days = seconds / 86400; + const days = seconds / 86_400; // If it's a whole number, return it as is if (Math.floor(days) === days) { return days.toString(); diff --git a/app/rewards/components/RewardTable.tsx b/app/rewards/components/RewardTable.tsx index 0943770e..6beedaa7 100644 --- a/app/rewards/components/RewardTable.tsx +++ b/app/rewards/components/RewardTable.tsx @@ -44,8 +44,8 @@ export default function RewardTable({ rewards, distributions, account, showClaim successText: 'Reward Claimed!', errorText: 'Failed to claim rewards', chainId, - pendingDescription: `Claiming rewards`, - successDescription: `Successfully claimed rewards`, + pendingDescription: 'Claiming rewards', + successDescription: 'Successfully claimed rewards', }); const filteredRewardTokens = useMemo( diff --git a/biome.jsonc b/biome.jsonc index f7d82d05..b9512e6b 100644 --- a/biome.jsonc +++ b/biome.jsonc @@ -89,14 +89,14 @@ // Keep these OFF - more opinionated "useNumericSeparators": "off", // 1_000_000 formatting - "noUnusedTemplateLiteral": "off", // Template literals without interpolation - "useReadonlyClassProperties": "off", // readonly keyword + // "noUnusedTemplateLiteral": "off", // Template literals without interpolation + // "useReadonlyClassProperties": "off", // readonly keyword "useNodejsImportProtocol": "off", // node: protocol "useDefaultSwitchClause": "off", // Requires default in switch - "useConst": "off", // let -> const (too opinionated) - "noExportedImports": "off", // Re-exports - "useAtIndex": "off", // arr.at(-1) instead of arr[arr.length-1] - "useConsistentTypeDefinitions": "off" // type vs interface + "noExportedImports": "off", // Too opinionated - team uses import then export pattern + "useConsistentTypeDefinitions": "off" // Conflicts with global interface declaration merging + // "useConst": "off", // let -> const (too opinionated) + // "useAtIndex": "off", // arr.at(-1) instead of arr[arr.length-1] }, "complexity": { diff --git a/scripts/generate-oracle-cache.ts b/scripts/generate-oracle-cache.ts index e89622fc..6516086f 100644 --- a/scripts/generate-oracle-cache.ts +++ b/scripts/generate-oracle-cache.ts @@ -46,7 +46,7 @@ const fetchOraclesForChain = async (chainId: number): Promise => { if (!response.ok) { const errorText = await response.text(); - console.error(` āŒ Response body:`, errorText); + console.error(' āŒ Response body:', errorText); throw new Error(`Failed to fetch oracles for chain ${chainId}: ${response.status} ${response.statusText}\nBody: ${errorText}`); } @@ -59,7 +59,7 @@ const fetchOraclesForChain = async (chainId: number): Promise => { if (!result.data) { console.error(` āŒ No data field in response for chain ${chainId}`); - console.error(` Full response:`, JSON.stringify(result, null, 2)); + console.error(' Full response:', JSON.stringify(result, null, 2)); break; } @@ -90,7 +90,7 @@ const fetchOraclesForChain = async (chainId: number): Promise => { console.error(` Message: ${error.message}`); console.error(` Stack: ${error.stack}`); } else { - console.error(` Error:`, error); + console.error(' Error:', error); } return []; // Return empty array on error, don't crash the whole script } @@ -135,11 +135,11 @@ const main = async (): Promise => { const outputPath = join(process.cwd(), 'src', 'constants', 'oracle', 'oracle-cache.json'); console.log(`\n${'='.repeat(60)}`); - console.log(`\nšŸ’¾ Writing oracle cache to file...`); + console.log('\nšŸ’¾ Writing oracle cache to file...'); writeFileSync(outputPath, JSON.stringify(allCachedOracles, null, 2)); - console.log(`\nāœ… Successfully generated oracle cache!`); + console.log('\nāœ… Successfully generated oracle cache!'); console.log(` šŸ“ Total oracles cached: ${allCachedOracles.length}`); console.log(` šŸ“‚ Output: ${outputPath}`); @@ -150,14 +150,14 @@ const main = async (): Promise => { console.log(` Chain ${chainId}: ${count} oracles`); }); - console.log(`\nšŸŽ‰ Done!\n`); + console.log('\nšŸŽ‰ Done!\n'); } catch (error) { console.error('\nāŒ Fatal error generating oracle cache:'); if (error instanceof Error) { console.error(` Message: ${error.message}`); - console.error(` Stack:`, error.stack); + console.error(' Stack:', error.stack); } else { - console.error(` Error:`, error); + console.error(' Error:', error); } process.exit(1); } diff --git a/src/components/TokenIcon.tsx b/src/components/TokenIcon.tsx index d5111326..3a1bfdc4 100644 --- a/src/components/TokenIcon.tsx +++ b/src/components/TokenIcon.tsx @@ -54,7 +54,7 @@ export function TokenIcon({ const tokenSource = token.isFactoryToken ? `This token is auto-detected from ${token.protocol?.name}` - : `This token is recognized by Monarch`; + : 'This token is recognized by Monarch'; const explorerUrl = showExplorerLink ? `${getExplorerUrl(chainId)}/address/${address}` : null; diff --git a/src/components/providers/QueryProvider.tsx b/src/components/providers/QueryProvider.tsx index e88d33fc..dd307f7f 100644 --- a/src/components/providers/QueryProvider.tsx +++ b/src/components/providers/QueryProvider.tsx @@ -13,7 +13,7 @@ const queryClient = new QueryClient({ defaultOptions: { queries: { // From ClientProviders - good for caching and UX - staleTime: 30000, // 30 seconds + staleTime: 30_000, // 30 seconds refetchOnWindowFocus: false, retry: (failureCount, error) => { @@ -24,7 +24,7 @@ const queryClient = new QueryClient({ // Retry up to 2 times for other errors return failureCount < 2; }, - retryDelay: (attemptIndex) => Math.min(1000 * 2 ** attemptIndex, 30000), + retryDelay: (attemptIndex) => Math.min(1000 * 2 ** attemptIndex, 30_000), throwOnError: false, }, diff --git a/src/constants/markets.ts b/src/constants/markets.ts index 84f1f936..9e323e07 100644 --- a/src/constants/markets.ts +++ b/src/constants/markets.ts @@ -1,2 +1,2 @@ export const DEFAULT_MIN_SUPPLY_USD = 1000; -export const DEFAULT_MIN_LIQUIDITY_USD = 10000; +export const DEFAULT_MIN_LIQUIDITY_USD = 10_000; diff --git a/src/constants/vaults/known_vaults.ts b/src/constants/vaults/known_vaults.ts index c54598ad..533bcfcf 100644 --- a/src/constants/vaults/known_vaults.ts +++ b/src/constants/vaults/known_vaults.ts @@ -84,7 +84,7 @@ export const known_vaults: KnownVault[] = [ { address: '0x64A651D825FC70Ebba88f2E1BAD90be9A496C4b9', curator: VaultCurator.Avantgarde, - chainId: 42161, + chainId: 42_161, name: 'Avantgarde USDC Core Arbitrum', asset: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831', }, @@ -119,7 +119,7 @@ export const known_vaults: KnownVault[] = [ { address: '0x7e97fa6893871A2751B5fE961978DCCb2c201E65', curator: VaultCurator.Gauntlet, - chainId: 42161, + chainId: 42_161, name: 'Gauntlet USDC Core', asset: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831', }, @@ -224,7 +224,7 @@ export const known_vaults: KnownVault[] = [ { address: '0x5c0C306Aaa9F877de636f4d5822cA9F2E81563BA', curator: VaultCurator.Steakhouse, - chainId: 42161, + chainId: 42_161, name: 'Steakhouse High Yield USDC', asset: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831', }, @@ -287,14 +287,14 @@ export const known_vaults: KnownVault[] = [ { address: '0x87DEAE530841A9671326C9D5B9f91bdB11F3162c', curator: VaultCurator.Yearn, - chainId: 42161, + chainId: 42_161, name: 'Yearn OG USDC', asset: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831', }, { address: '0x36b69949d60d06ECcC14DE0Ae63f4E00cc2cd8B9', curator: VaultCurator.Yearn, - chainId: 42161, + chainId: 42_161, name: 'Yearn Degen USDC', asset: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831', }, diff --git a/src/contexts/MarketsContext.tsx b/src/contexts/MarketsContext.tsx index 385c1ac7..4048ac88 100644 --- a/src/contexts/MarketsContext.tsx +++ b/src/contexts/MarketsContext.tsx @@ -163,8 +163,8 @@ export function MarketsProvider({ children }: MarketsProviderProps) { // Define the networks to fetch markets for - let combinedMarkets: Market[] = []; - let fetchErrors: unknown[] = []; + const combinedMarkets: Market[] = []; + const fetchErrors: unknown[] = []; try { // Fetch markets for each network based on its data source diff --git a/src/data-sources/morpho-api/vaults.ts b/src/data-sources/morpho-api/vaults.ts index 735cd8a2..604b952b 100644 --- a/src/data-sources/morpho-api/vaults.ts +++ b/src/data-sources/morpho-api/vaults.ts @@ -2,7 +2,7 @@ import { allVaultsQuery } from '@/graphql/vault-queries'; import { morphoGraphqlFetcher } from './fetchers'; // Constants for Morpho vault fetching -const MORPHO_SUPPORTED_CHAIN_IDS = [1, 8453, 999, 137, 42161, 130]; +const MORPHO_SUPPORTED_CHAIN_IDS = [1, 8453, 999, 137, 42_161, 130]; const MAX_VAULTS_LIMIT = 500; // Type for vault from Morpho API diff --git a/src/data-sources/subgraph/market.ts b/src/data-sources/subgraph/market.ts index bcde88de..acd0d678 100644 --- a/src/data-sources/subgraph/market.ts +++ b/src/data-sources/subgraph/market.ts @@ -132,7 +132,7 @@ const transformSubgraphMarketToMarket = ( const supplyApy = Number(subgraphMarket.rates?.find((r) => r.side === 'LENDER')?.rate ?? 0); const borrowApy = Number(subgraphMarket.rates?.find((r) => r.side === 'BORROWER')?.rate ?? 0); - let warnings: MarketWarning[] = []; // Initialize warnings + const warnings: MarketWarning[] = []; // Initialize warnings // get the prices let loanAssetPrice = safeParseFloat(subgraphMarket.borrowedToken?.lastPriceUSD ?? '0'); @@ -197,7 +197,7 @@ const transformSubgraphMarketToMarket = ( utilization: utilization, supplyApy: supplyApy, borrowApy: borrowApy, - fee: safeParseFloat(fee) / 10000, // Subgraph fee is likely basis points (needs verification) + fee: safeParseFloat(fee) / 10_000, // Subgraph fee is likely basis points (needs verification) timestamp: timestamp, // AdaptiveCurveIRM APY if utilization was at target diff --git a/src/hooks/useAllowance.ts b/src/hooks/useAllowance.ts index 5aa81c01..38806c35 100644 --- a/src/hooks/useAllowance.ts +++ b/src/hooks/useAllowance.ts @@ -21,7 +21,7 @@ type Props = { * @param refetchInterval Interval in milliseconds to refetch the contract data * @returns JsonMetadata */ -export function useAllowance({ user, spender, chainId = 1, token, refetchInterval = 10000, tokenSymbol }: Props) { +export function useAllowance({ user, spender, chainId = 1, token, refetchInterval = 10_000, tokenSymbol }: Props) { const { chain } = useAccount(); const chainIdFromArgumentOrConnectedWallet = chainId ?? chain?.id; diff --git a/src/hooks/useBorrowTransaction.ts b/src/hooks/useBorrowTransaction.ts index 00e68a8c..dd439847 100644 --- a/src/hooks/useBorrowTransaction.ts +++ b/src/hooks/useBorrowTransaction.ts @@ -57,7 +57,7 @@ export function useBorrowTransaction({ market, collateralAmount, borrowAmount, o user: account as `0x${string}`, spender: bundlerAddress, token: market.collateralAsset.address as `0x${string}`, - refetchInterval: 10000, + refetchInterval: 10_000, chainId: market.morphoBlue.chain.id, tokenSymbol: market.collateralAsset.symbol, amount: collateralAmount, diff --git a/src/hooks/useFreshMarketsState.ts b/src/hooks/useFreshMarketsState.ts index 06bc733c..82631693 100644 --- a/src/hooks/useFreshMarketsState.ts +++ b/src/hooks/useFreshMarketsState.ts @@ -6,7 +6,7 @@ import { getMorphoAddress } from '@/utils/morpho'; import type { SupportedNetworks } from '@/utils/networks'; import type { Market } from '@/utils/types'; -const REFRESH_INTERVAL = 15000; // 15 seconds +const REFRESH_INTERVAL = 15_000; // 15 seconds type MarketSnapshot = { totalSupplyAssets: string; @@ -114,7 +114,7 @@ export const useFreshMarketsState = ( }, enabled: !!markets && markets.length > 0 && !!effectiveChainId && !!publicClient, staleTime: 0, // Always fetch fresh when requested - gcTime: 20000, // Keep in cache for 20 seconds + gcTime: 20_000, // Keep in cache for 20 seconds refetchOnWindowFocus: false, }); diff --git a/src/hooks/useLiquidations.ts b/src/hooks/useLiquidations.ts index 403d3861..5c436200 100644 --- a/src/hooks/useLiquidations.ts +++ b/src/hooks/useLiquidations.ts @@ -21,7 +21,7 @@ const useLiquidations = () => { // Define the networks to check for liquidations const combinedLiquidatedKeys = new Set(); - let fetchErrors: unknown[] = []; + const fetchErrors: unknown[] = []; try { await Promise.all( @@ -36,7 +36,7 @@ const useLiquidations = () => { console.log(`Attempting to fetch liquidated markets via Morpho API for ${network}`); networkLiquidatedKeys = await fetchMorphoApiLiquidatedMarketKeys(network); } catch (morphoError) { - console.error(`Failed to fetch liquidated markets via Morpho API:`, morphoError); + console.error('Failed to fetch liquidated markets via Morpho API:', morphoError); // Continue to Subgraph fallback networkLiquidatedKeys = new Set(); trySubgraph = true; @@ -52,7 +52,7 @@ const useLiquidations = () => { console.log(`Attempting to fetch liquidated markets via Subgraph for ${network}`); networkLiquidatedKeys = await fetchSubgraphLiquidatedMarketKeys(network); } catch (subgraphError) { - console.error(`Failed to fetch liquidated markets via Subgraph:`, subgraphError); + console.error('Failed to fetch liquidated markets via Subgraph:', subgraphError); throw subgraphError; // Throw to be caught by outer catch } } diff --git a/src/hooks/useMarketBorrows.ts b/src/hooks/useMarketBorrows.ts index e9b1b652..f5fac444 100644 --- a/src/hooks/useMarketBorrows.ts +++ b/src/hooks/useMarketBorrows.ts @@ -45,7 +45,7 @@ export const useMarketBorrows = ( console.log(`Attempting to fetch borrows via Morpho API for ${marketId} (page ${targetPage})`); result = await fetchMorphoMarketBorrows(marketId, minAssets, pageSize, targetSkip); } catch (morphoError) { - console.error(`Failed to fetch borrows via Morpho API:`, morphoError); + console.error('Failed to fetch borrows via Morpho API:', morphoError); } } @@ -55,7 +55,7 @@ export const useMarketBorrows = ( console.log(`Attempting to fetch borrows via Subgraph for ${marketId} (page ${targetPage})`); result = await fetchSubgraphMarketBorrows(marketId, loanAssetId, network, minAssets, pageSize, targetSkip); } catch (subgraphError) { - console.error(`Failed to fetch borrows via Subgraph:`, subgraphError); + console.error('Failed to fetch borrows via Subgraph:', subgraphError); throw subgraphError; } } diff --git a/src/hooks/useMarketData.ts b/src/hooks/useMarketData.ts index d29ad962..202143ea 100644 --- a/src/hooks/useMarketData.ts +++ b/src/hooks/useMarketData.ts @@ -48,7 +48,7 @@ export const useMarketData = (uniqueKey: string | undefined, network: SupportedN finalMarket = await fetchMorphoMarket(uniqueKey, network); } } catch (morphoError) { - console.error(`Failed to fetch market data via Morpho API:`, morphoError); + console.error('Failed to fetch market data via Morpho API:', morphoError); // Continue to Subgraph fallback } @@ -58,7 +58,7 @@ export const useMarketData = (uniqueKey: string | undefined, network: SupportedN console.log(`Attempting to fetch market data via Subgraph for ${uniqueKey}`); finalMarket = await fetchSubgraphMarket(uniqueKey, network); } catch (subgraphError) { - console.error(`Failed to fetch market data via Subgraph:`, subgraphError); + console.error('Failed to fetch market data via Subgraph:', subgraphError); finalMarket = null; } } diff --git a/src/hooks/useMarketHistoricalData.ts b/src/hooks/useMarketHistoricalData.ts index 36299095..4929aa48 100644 --- a/src/hooks/useMarketHistoricalData.ts +++ b/src/hooks/useMarketHistoricalData.ts @@ -32,7 +32,7 @@ export const useMarketHistoricalData = ( console.log(`Attempting to fetch historical data via Morpho API for ${uniqueKey}`); historicalData = await fetchMorphoMarketHistoricalData(uniqueKey, network, options); } catch (morphoError) { - console.error(`Failed to fetch historical data via Morpho API:`, morphoError); + console.error('Failed to fetch historical data via Morpho API:', morphoError); // Continue to Subgraph fallback } } @@ -43,7 +43,7 @@ export const useMarketHistoricalData = ( console.log(`Attempting to fetch historical data via Subgraph for ${uniqueKey}`); historicalData = await fetchSubgraphMarketHistoricalData(uniqueKey, network, options); } catch (subgraphError) { - console.error(`Failed to fetch historical data via Subgraph:`, subgraphError); + console.error('Failed to fetch historical data via Subgraph:', subgraphError); historicalData = null; } } diff --git a/src/hooks/useMarketLiquidations.ts b/src/hooks/useMarketLiquidations.ts index 1d079f26..d15b5b3a 100644 --- a/src/hooks/useMarketLiquidations.ts +++ b/src/hooks/useMarketLiquidations.ts @@ -30,7 +30,7 @@ export const useMarketLiquidations = (marketId: string | undefined, network: Sup console.log(`Attempting to fetch liquidations via Morpho API for ${marketId}`); liquidations = await fetchMorphoMarketLiquidations(marketId); } catch (morphoError) { - console.error(`Failed to fetch liquidations via Morpho API:`, morphoError); + console.error('Failed to fetch liquidations via Morpho API:', morphoError); // Continue to Subgraph fallback } } @@ -41,7 +41,7 @@ export const useMarketLiquidations = (marketId: string | undefined, network: Sup console.log(`Attempting to fetch liquidations via Subgraph for ${marketId}`); liquidations = await fetchSubgraphMarketLiquidations(marketId, network); } catch (subgraphError) { - console.error(`Failed to fetch liquidations via Subgraph:`, subgraphError); + console.error('Failed to fetch liquidations via Subgraph:', subgraphError); liquidations = null; } } diff --git a/src/hooks/useMarketSupplies.ts b/src/hooks/useMarketSupplies.ts index 434a87fd..3da92603 100644 --- a/src/hooks/useMarketSupplies.ts +++ b/src/hooks/useMarketSupplies.ts @@ -45,7 +45,7 @@ export const useMarketSupplies = ( console.log(`Attempting to fetch supplies via Morpho API for ${marketId} (page ${targetPage})`); result = await fetchMorphoMarketSupplies(marketId, minAssets, pageSize, targetSkip); } catch (morphoError) { - console.error(`Failed to fetch supplies via Morpho API:`, morphoError); + console.error('Failed to fetch supplies via Morpho API:', morphoError); } } @@ -55,7 +55,7 @@ export const useMarketSupplies = ( console.log(`Attempting to fetch supplies via Subgraph for ${marketId} (page ${targetPage})`); result = await fetchSubgraphMarketSupplies(marketId, loanAssetId, network, minAssets, pageSize, targetSkip); } catch (subgraphError) { - console.error(`Failed to fetch supplies via Subgraph:`, subgraphError); + console.error('Failed to fetch supplies via Subgraph:', subgraphError); throw subgraphError; } } diff --git a/src/hooks/useMultiMarketSupply.ts b/src/hooks/useMultiMarketSupply.ts index 90e178c8..c6146152 100644 --- a/src/hooks/useMultiMarketSupply.ts +++ b/src/hooks/useMultiMarketSupply.ts @@ -45,7 +45,7 @@ export function useMultiMarketSupply( user: account as `0x${string}`, spender: getBundlerV2(chainId ?? SupportedNetworks.Mainnet), token: loanAsset?.address as `0x${string}`, - refetchInterval: 10000, + refetchInterval: 10_000, chainId, tokenSymbol, amount: totalAmount, diff --git a/src/hooks/usePermit2.ts b/src/hooks/usePermit2.ts index db74a6f1..e44b304b 100644 --- a/src/hooks/usePermit2.ts +++ b/src/hooks/usePermit2.ts @@ -25,7 +25,7 @@ type Props = { * @param refetchInterval Interval in milliseconds to refetch the contract data * @returns JsonMetadata */ -export function usePermit2({ user, chainId = 1, token, spender, refetchInterval = 10000, amount }: Props) { +export function usePermit2({ user, chainId = 1, token, spender, refetchInterval = 10_000, amount }: Props) { const { allowance: allowanceToPermit2, approveInfinite: authorizePermit2, diff --git a/src/hooks/useRebalance.ts b/src/hooks/useRebalance.ts index 46c640ae..85db2890 100644 --- a/src/hooks/useRebalance.ts +++ b/src/hooks/useRebalance.ts @@ -52,7 +52,7 @@ export const useRebalance = (groupedPosition: GroupedPosition, onRebalance?: () user: account as Address, spender: bundlerAddress, token: groupedPosition.loanAssetAddress as Address, - refetchInterval: 10000, + refetchInterval: 10_000, chainId: groupedPosition.chainId, tokenSymbol: groupedPosition.loanAsset, amount: totalAmount, diff --git a/src/hooks/useRepayTransaction.ts b/src/hooks/useRepayTransaction.ts index 6bac9c1d..de579746 100644 --- a/src/hooks/useRepayTransaction.ts +++ b/src/hooks/useRepayTransaction.ts @@ -50,7 +50,7 @@ export function useRepayTransaction({ user: account as `0x${string}`, spender: getBundlerV2(market.morphoBlue.chain.id), token: market.loanAsset.address as `0x${string}`, - refetchInterval: 10000, + refetchInterval: 10_000, chainId: market.morphoBlue.chain.id, tokenSymbol: market.loanAsset.symbol, amount: repayAmountToApprove, diff --git a/src/hooks/useSupplyMarket.ts b/src/hooks/useSupplyMarket.ts index 90c183c9..79b29f25 100644 --- a/src/hooks/useSupplyMarket.ts +++ b/src/hooks/useSupplyMarket.ts @@ -79,7 +79,7 @@ export function useSupplyMarket(market: Market, onSuccess?: () => void): UseSupp user: account as `0x${string}`, spender: getBundlerV2(market.morphoBlue.chain.id), token: market.loanAsset.address as `0x${string}`, - refetchInterval: 10000, + refetchInterval: 10_000, chainId: market.morphoBlue.chain.id, tokenSymbol: market.loanAsset.symbol, amount: supplyAmount, diff --git a/src/hooks/useUserPosition.ts b/src/hooks/useUserPosition.ts index 3d798148..336a2463 100644 --- a/src/hooks/useUserPosition.ts +++ b/src/hooks/useUserPosition.ts @@ -87,7 +87,7 @@ const useUserPosition = (user: string | undefined, chainId: SupportedNetworks | console.log(`Attempting to fetch position via Morpho API for ${marketKey}`); fallbackPosition = await fetchMorphoUserPositionForMarket(marketKey, user, chainId); } catch (morphoError) { - console.error(`Failed to fetch position via Morpho API:`, morphoError); + console.error('Failed to fetch position via Morpho API:', morphoError); // Continue to Subgraph fallback } } @@ -98,7 +98,7 @@ const useUserPosition = (user: string | undefined, chainId: SupportedNetworks | console.log(`Attempting to fetch position via Subgraph for ${marketKey}`); fallbackPosition = await fetchSubgraphUserPositionForMarket(marketKey, user, chainId); } catch (subgraphError) { - console.error(`Failed to fetch position via Subgraph:`, subgraphError); + console.error('Failed to fetch position via Subgraph:', subgraphError); fallbackPosition = null; } } @@ -131,7 +131,7 @@ const useUserPosition = (user: string | undefined, chainId: SupportedNetworks | console.log(`Attempting to fetch position via Morpho API for ${marketKey}`); finalPosition = await fetchMorphoUserPositionForMarket(marketKey, user, chainId); } catch (morphoError) { - console.error(`Failed to fetch position via Morpho API:`, morphoError); + console.error('Failed to fetch position via Morpho API:', morphoError); // Continue to Subgraph fallback } } @@ -142,7 +142,7 @@ const useUserPosition = (user: string | undefined, chainId: SupportedNetworks | console.log(`Attempting to fetch position via Subgraph for ${marketKey}`); finalPosition = await fetchSubgraphUserPositionForMarket(marketKey, user, chainId); } catch (subgraphError) { - console.error(`Failed to fetch position via Subgraph:`, subgraphError); + console.error('Failed to fetch position via Subgraph:', subgraphError); finalPosition = null; } } diff --git a/src/hooks/useUserPositions.ts b/src/hooks/useUserPositions.ts index 128129db..f8796c31 100644 --- a/src/hooks/useUserPositions.ts +++ b/src/hooks/useUserPositions.ts @@ -228,7 +228,7 @@ const useUserPositions = (user: string | undefined, showEmpty = false, chainIds? return validPositions; }, enabled: !!initialData && !!user, - staleTime: 30000, + staleTime: 30_000, gcTime: 5 * 60 * 1000, }); diff --git a/src/hooks/useUserPositionsSummaryData.ts b/src/hooks/useUserPositionsSummaryData.ts index 82862334..1bc14d6a 100644 --- a/src/hooks/useUserPositionsSummaryData.ts +++ b/src/hooks/useUserPositionsSummaryData.ts @@ -26,7 +26,7 @@ export const earningsKeys = { // Helper to get timestamp for a period const getPeriodTimestamp = (period: EarningsPeriod): number => { const now = Math.floor(Date.now() / 1000); - const DAY = 86400; + const DAY = 86_400; switch (period) { case 'all': @@ -126,7 +126,7 @@ const useUserPositionsSummaryData = (user: string | undefined, period: EarningsP return allSnapshots; }, enabled: !!positions && !!user && (period === 'all' || !!periodBlockNumbers), - staleTime: 30000, + staleTime: 30_000, gcTime: 5 * 60 * 1000, }); @@ -148,7 +148,7 @@ const useUserPositionsSummaryData = (user: string | undefined, period: EarningsP return result?.items ?? []; }, enabled: !!positions && !!user, - staleTime: 60000, // 1 minute + staleTime: 60_000, // 1 minute gcTime: 5 * 60 * 1000, }); diff --git a/src/hooks/useVaultV2Deposit.ts b/src/hooks/useVaultV2Deposit.ts index 71c35507..08679ed4 100644 --- a/src/hooks/useVaultV2Deposit.ts +++ b/src/hooks/useVaultV2Deposit.ts @@ -83,7 +83,7 @@ export function useVaultV2Deposit({ user: account as Address, spender: getBundlerV2(chainId), token: assetAddress, - refetchInterval: 10000, + refetchInterval: 10_000, chainId, tokenSymbol: assetSymbol, amount: depositAmount, diff --git a/src/services/statsService.ts b/src/services/statsService.ts index 427bc525..03258d06 100644 --- a/src/services/statsService.ts +++ b/src/services/statsService.ts @@ -89,7 +89,7 @@ export const fetchTransactionsByTimeRange = async ( } else { // Log some details about the first transaction to verify structure const sampleTx = allTransactions[0]; - console.log(`Sample transaction:`, { + console.log('Sample transaction:', { id: sampleTx.id, timestamp: sampleTx.timestamp, supplyCount: sampleTx.supplyCount, @@ -152,7 +152,7 @@ export const fetchAssetMetrics = async ( console.log(`Processing ${transactions.length} transactions for asset metrics`); if (transactions.length > 0) { - console.log(`Sample transaction structure:`, { + console.log('Sample transaction structure:', { id: transactions[0].id, timestamp: transactions[0].timestamp, supplyCount: transactions[0].supplyCount, diff --git a/src/utils/balance.ts b/src/utils/balance.ts index 95f8ac77..37bec668 100644 --- a/src/utils/balance.ts +++ b/src/utils/balance.ts @@ -34,8 +34,8 @@ export function formatReadable(num: number | string, precision = 2): string { return `${(num / 1_000_000_000).toFixed(2)}B`; } else if (Math.abs(num) >= 1_000_000) { return `${(num / 1_000_000).toFixed(2)}M`; - } else if (Math.abs(num) >= 1_000) { - return `${(num / 1_000).toFixed(2)}K`; + } else if (Math.abs(num) >= 1000) { + return `${(num / 1000).toFixed(2)}K`; } else { return num.toFixed(precision); } diff --git a/src/utils/blockFinder.ts b/src/utils/blockFinder.ts index fd33c380..4b82e1a2 100644 --- a/src/utils/blockFinder.ts +++ b/src/utils/blockFinder.ts @@ -7,11 +7,11 @@ type BlockInfo = { }; export class SmartBlockFinder { - private client: PublicClient; + private readonly client: PublicClient; - private averageBlockTime: number; + private readonly averageBlockTime: number; - private latestBlockDelay: number; + private readonly latestBlockDelay: number; private readonly TOLERANCE_SECONDS = 10; diff --git a/src/utils/external.ts b/src/utils/external.ts index 32482f7e..a95579bb 100644 --- a/src/utils/external.ts +++ b/src/utils/external.ts @@ -1,7 +1,7 @@ import { getNetworkName, SupportedNetworks, getExplorerUrl } from './networks'; const getMorphoNetworkSlug = (chainId: number): string | undefined => { - let network = getNetworkName(chainId)?.toLowerCase(); + const network = getNetworkName(chainId)?.toLowerCase(); if (chainId === SupportedNetworks.HyperEVM) { return 'hyperevm'; } else if (chainId === SupportedNetworks.Mainnet) { diff --git a/src/utils/interest.ts b/src/utils/interest.ts index aeab1f61..6a4065e7 100644 --- a/src/utils/interest.ts +++ b/src/utils/interest.ts @@ -9,7 +9,7 @@ export type EarningsCalculation = { apy: number; }; -const ONE_YEAR = 86400 * 365; +const ONE_YEAR = 86_400 * 365; export function calculateEarningsFromSnapshot( endingBalance: bigint, diff --git a/src/utils/merklApi.ts b/src/utils/merklApi.ts index d773962f..4bd90409 100644 --- a/src/utils/merklApi.ts +++ b/src/utils/merklApi.ts @@ -3,7 +3,7 @@ import type { MerklCampaignsResponse, MerklApiParams, MerklCampaign, SimplifiedC const MERKL_API_BASE_URL = 'https://api.merkl.xyz/v4'; export class MerklApiClient { - private baseUrl: string; + private readonly baseUrl: string; constructor(baseUrl: string = MERKL_API_BASE_URL) { this.baseUrl = baseUrl; diff --git a/src/utils/networks.ts b/src/utils/networks.ts index da15b665..9f00da18 100644 --- a/src/utils/networks.ts +++ b/src/utils/networks.ts @@ -10,7 +10,7 @@ export enum SupportedNetworks { Base = 8453, Polygon = 137, Unichain = 130, - Arbitrum = 42161, + Arbitrum = 42_161, HyperEVM = 999, Monad = 143, } @@ -31,7 +31,7 @@ export const hyperEvm = defineChain({ contracts: { multicall3: { address: '0xcA11bde05977b3631167028862bE2a173976CA11', - blockCreated: 13051, + blockCreated: 13_051, }, }, }); diff --git a/src/utils/positions.ts b/src/utils/positions.ts index 26d4a367..608a63ea 100644 --- a/src/utils/positions.ts +++ b/src/utils/positions.ts @@ -175,7 +175,7 @@ export async function fetchPositionsSnapshots( return result; } catch (error) { - console.error(`Error fetching position snapshots:`, { + console.error('Error fetching position snapshots:', { marketIds, userAddress, blockNumber, @@ -253,7 +253,7 @@ export async function fetchMarketSnapshot( liquidityAssets: liquidityAssets.toString(), }; } catch (error) { - console.error(`Error reading market:`, { + console.error('Error reading market:', { marketId, chainId, blockNumber, diff --git a/src/utils/subgraph-urls.ts b/src/utils/subgraph-urls.ts index 7340298d..ef4dbb0b 100644 --- a/src/utils/subgraph-urls.ts +++ b/src/utils/subgraph-urls.ts @@ -27,7 +27,7 @@ const arbitrumSubgraph = apiKey ? `https://gateway.thegraph.com/api/${apiKey}/subgraphs/id/XsJn88DNCHJ1kgTqYeTgHMQSK4LuG1LR75339QVeQ26` : undefined; -const hyperevmSubgraph = `https://api.goldsky.com/api/public/project_cmg4ky61ivud801r23qsug3es/subgraphs/morpho-blue-hyperevm/1.0.3/gn`; +const hyperevmSubgraph = 'https://api.goldsky.com/api/public/project_cmg4ky61ivud801r23qsug3es/subgraphs/morpho-blue-hyperevm/1.0.3/gn'; // Map network IDs (from SupportedNetworks) to Subgraph URLs export const SUBGRAPH_URLS: Partial> = { From b69a66df29fb9857d9713fff1c66dcd00a281be8 Mon Sep 17 00:00:00 2001 From: antoncoding Date: Mon, 8 Dec 2025 23:49:58 +0800 Subject: [PATCH 02/12] chore: type --- .../[chainId]/[marketid]/VolumeChart.tsx | 24 +++++++++---------- app/market/[chainId]/[marketid]/content.tsx | 1 - biome.jsonc | 12 ++-------- .../MarketOracle/GeneralFeedTooltip.tsx | 2 +- src/constants/oracle/general-feeds/index.ts | 2 -- src/data-sources/morpho-api/historical.ts | 7 ++---- src/utils/gtag.ts | 13 ++++------ src/utils/oracle.ts | 3 ++- 8 files changed, 23 insertions(+), 41 deletions(-) diff --git a/app/market/[chainId]/[marketid]/VolumeChart.tsx b/app/market/[chainId]/[marketid]/VolumeChart.tsx index a1201993..c5db7b6f 100644 --- a/app/market/[chainId]/[marketid]/VolumeChart.tsx +++ b/app/market/[chainId]/[marketid]/VolumeChart.tsx @@ -327,19 +327,17 @@ function VolumeChart({ ) : ( - <> - {['supply', 'borrow', 'liquidity'].map((type) => ( -
- {type}: - - {formatValue(getAverageVolumeStats(type as 'supply' | 'borrow' | 'liquidity'))} - -
- ))} - + ['supply', 'borrow', 'liquidity'].map((type) => ( +
+ {type}: + + {formatValue(getAverageVolumeStats(type as 'supply' | 'borrow' | 'liquidity'))} + +
+ )) )} diff --git a/app/market/[chainId]/[marketid]/content.tsx b/app/market/[chainId]/[marketid]/content.tsx index c17cfe51..458a4294 100644 --- a/app/market/[chainId]/[marketid]/content.tsx +++ b/app/market/[chainId]/[marketid]/content.tsx @@ -55,7 +55,6 @@ const calculateTimeRange = (timeframe: '1d' | '7d' | '30d'): TimeseriesOptions = // Use DAY interval for longer ranges if desired, adjust as needed interval = 'DAY'; break; - case '7d': default: startTimestamp = endTimestamp - WEEK_IN_SECONDS; break; diff --git a/biome.jsonc b/biome.jsonc index b9512e6b..2d518314 100644 --- a/biome.jsonc +++ b/biome.jsonc @@ -89,14 +89,8 @@ // Keep these OFF - more opinionated "useNumericSeparators": "off", // 1_000_000 formatting - // "noUnusedTemplateLiteral": "off", // Template literals without interpolation - // "useReadonlyClassProperties": "off", // readonly keyword "useNodejsImportProtocol": "off", // node: protocol - "useDefaultSwitchClause": "off", // Requires default in switch - "noExportedImports": "off", // Too opinionated - team uses import then export pattern - "useConsistentTypeDefinitions": "off" // Conflicts with global interface declaration merging - // "useConst": "off", // let -> const (too opinionated) - // "useAtIndex": "off", // arr.at(-1) instead of arr[arr.length-1] + "useDefaultSwitchClause": "off" // Requires default in switch }, "complexity": { @@ -118,9 +112,7 @@ // Disable for gentle migration "noExcessiveCognitiveComplexity": "off", // 59 errors - refactoring needed "noUselessUndefinedInitialization": "off", // 4 errors - "useIndexOf": "off", // 1 error - "noUselessSwitchCase": "off", // 1 error - "noUselessFragments": "off" // 1 error + "useIndexOf": "off" // 1 error }, "performance": { diff --git a/src/components/MarketOracle/GeneralFeedTooltip.tsx b/src/components/MarketOracle/GeneralFeedTooltip.tsx index 4dc68df0..5ac38669 100644 --- a/src/components/MarketOracle/GeneralFeedTooltip.tsx +++ b/src/components/MarketOracle/GeneralFeedTooltip.tsx @@ -1,7 +1,7 @@ import Image from 'next/image'; import Link from 'next/link'; import type { Address } from 'viem'; -import type { GeneralPriceFeed } from '@/constants/oracle/general-feeds'; +import type { GeneralPriceFeed } from '@/constants/oracle/general-feeds/types'; import etherscanLogo from '@/imgs/etherscan.png'; import { getExplorerURL } from '@/utils/external'; import { PriceFeedVendors, OracleVendorIcons } from '@/utils/oracle'; diff --git a/src/constants/oracle/general-feeds/index.ts b/src/constants/oracle/general-feeds/index.ts index 7f041e97..904b0ff1 100644 --- a/src/constants/oracle/general-feeds/index.ts +++ b/src/constants/oracle/general-feeds/index.ts @@ -26,5 +26,3 @@ export function getGeneralFeed(feedAddress: Address | string, chainId: number): const address = feedAddress.toLowerCase(); return generalPriceFeeds.find((feed) => feed.address.toLowerCase() === address && feed.chainId === chainId); } - -export type { GeneralPriceFeed }; diff --git a/src/data-sources/morpho-api/historical.ts b/src/data-sources/morpho-api/historical.ts index be074b1d..c9c36cec 100644 --- a/src/data-sources/morpho-api/historical.ts +++ b/src/data-sources/morpho-api/historical.ts @@ -1,12 +1,9 @@ import { marketHistoricalDataQuery } from '@/graphql/morpho-api-queries'; import type { SupportedNetworks } from '@/utils/networks'; -import type { TimeseriesOptions, Market, TimeseriesDataPoint, MarketRates, MarketVolumes } from '@/utils/types'; +import type { Market, MarketRates, MarketVolumes } from '@/utils/types'; +export type { TimeseriesOptions, TimeseriesDataPoint } from '@/utils/types'; import { morphoGraphqlFetcher } from './fetchers'; -// --- Types related to Historical Data --- -// Re-exported from types.ts for clarity or define locally if not exported -export type { TimeseriesDataPoint, TimeseriesOptions }; - // Adjust the response structure type: historicalState contains rates/volumes directly type MarketWithHistoricalState = Market & { historicalState: (Partial & Partial) | null; diff --git a/src/utils/gtag.ts b/src/utils/gtag.ts index 0824a6e3..6f81bb92 100644 --- a/src/utils/gtag.ts +++ b/src/utils/gtag.ts @@ -2,26 +2,23 @@ import isClient from './isClient'; export const GOOGLE_ANALYTICS_ID = process.env.NEXT_PUBLIC_GOOGLE_ANALYTICS_ID ?? ''; -declare global { - // eslint-disable-next-line @typescript-eslint/consistent-type-definitions - interface Window { - gtag: any; - } -} +type WindowWithGtag = Window & { + gtag: any; +}; export const logPageview = (url: string) => { if (!isClient()) { return; } // eslint-disable-next-line @typescript-eslint/no-unsafe-call - window.gtag('config', GOOGLE_ANALYTICS_ID, { + (window as WindowWithGtag).gtag('config', GOOGLE_ANALYTICS_ID, { page_path: url, }); }; export const logEvent = ({ action, category, label, value }: { action: string; category: string; label: string; value: number }) => { // eslint-disable-next-line @typescript-eslint/no-unsafe-call - window.gtag('event', action, { + (window as WindowWithGtag).gtag('event', action, { event_category: category, event_label: label, value: value, diff --git a/src/utils/oracle.ts b/src/utils/oracle.ts index cf019c30..f37f3592 100644 --- a/src/utils/oracle.ts +++ b/src/utils/oracle.ts @@ -1,7 +1,8 @@ import { zeroAddress, type Address } from 'viem'; import { getChainlinkOracle, type ChainlinkOracleEntry, isChainlinkOracle } from '@/constants/oracle/chainlink-data'; import { getCompoundFeed, type CompoundFeedEntry, isCompoundFeed } from '@/constants/oracle/compound'; -import { getGeneralFeed, isGeneralFeed, type GeneralPriceFeed } from '@/constants/oracle/general-feeds'; +import { getGeneralFeed, isGeneralFeed } from '@/constants/oracle/general-feeds'; +import type { GeneralPriceFeed } from '@/constants/oracle/general-feeds/types'; import { getRedstoneOracle, type RedstoneOracleEntry, isRedstoneOracle } from '@/constants/oracle/redstone-data'; import { isSupportedChain } from './networks'; import type { MorphoChainlinkOracleData, OracleFeed } from './types'; From 398f9ea6f8310728edbf6a938aadb7a31faf1177 Mon Sep 17 00:00:00 2001 From: antoncoding Date: Mon, 8 Dec 2025 23:55:22 +0800 Subject: [PATCH 03/12] chore: lint --- app/market/[chainId]/[marketid]/VolumeChart.tsx | 2 +- app/markets/components/RiskIndicator.tsx | 12 ++++++++++++ biome.jsonc | 13 ------------- src/data-sources/subgraph/positions.ts | 3 +++ src/hooks/useUserPositionsSummaryData.ts | 2 ++ src/utils/statsUtils.ts | 6 ++++++ 6 files changed, 24 insertions(+), 14 deletions(-) diff --git a/app/market/[chainId]/[marketid]/VolumeChart.tsx b/app/market/[chainId]/[marketid]/VolumeChart.tsx index c5db7b6f..530f337c 100644 --- a/app/market/[chainId]/[marketid]/VolumeChart.tsx +++ b/app/market/[chainId]/[marketid]/VolumeChart.tsx @@ -99,7 +99,7 @@ function VolumeChart({ const data = volumeView === 'USD' ? historicalData?.[`${type}AssetsUsd`] : historicalData?.[`${type}Assets`]; if (!data || data.length === 0) return { current: 0, netChange: 0, netChangePercentage: 0 }; - const current = volumeView === 'USD' ? data.at(-1).y : Number(formatUnits(BigInt(data.at(-1).y), market.loanAsset.decimals)); + const current = volumeView === 'USD' ? data[-1].y : Number(formatUnits(BigInt(data[-1].y), market.loanAsset.decimals)); const start = volumeView === 'USD' ? data[0].y : Number(formatUnits(BigInt(data[0].y), market.loanAsset.decimals)); const netChange = current - start; const netChangePercentage = start !== 0 ? (netChange / start) * 100 : 0; diff --git a/app/markets/components/RiskIndicator.tsx b/app/markets/components/RiskIndicator.tsx index 79cc0e5f..43b0c705 100644 --- a/app/markets/components/RiskIndicator.tsx +++ b/app/markets/components/RiskIndicator.tsx @@ -36,6 +36,13 @@ const levelToIcon = (level: 'green' | 'yellow' | 'red') => { className="text-red-600" /> ); + default: + return ( + + ); } }; @@ -56,6 +63,11 @@ const levelToStyle = (level: 'green' | 'yellow' | 'red') => { text: 'text-red-700 dark:text-red-300', bar: 'bg-red-500', }; + default: + return { + text: 'text-green-700 dark:text-green-300', + bar: 'bg-green-500', + }; } }; diff --git a/biome.jsonc b/biome.jsonc index 2d518314..3d509f65 100644 --- a/biome.jsonc +++ b/biome.jsonc @@ -74,23 +74,10 @@ "level": "warn", "fix": "safe" // Converts imports to type imports - safe & improves bundle size }, - "useNumberNamespace": { - "level": "warn", - "fix": "safe" // parseInt -> Number.parseInt (modern JS) - }, - "useShorthandAssign": { - "level": "warn", - "fix": "safe" // x = x + 1 -> x += 1 - }, - "useTemplate": { - "level": "warn", - "fix": "safe" // "a" + b -> `a${b}` - more readable - }, // Keep these OFF - more opinionated "useNumericSeparators": "off", // 1_000_000 formatting "useNodejsImportProtocol": "off", // node: protocol - "useDefaultSwitchClause": "off" // Requires default in switch }, "complexity": { diff --git a/src/data-sources/subgraph/positions.ts b/src/data-sources/subgraph/positions.ts index b25951f2..c913fc78 100644 --- a/src/data-sources/subgraph/positions.ts +++ b/src/data-sources/subgraph/positions.ts @@ -171,6 +171,9 @@ export const fetchSubgraphUserPositionForMarket = async ( console.warn(`Subgraph position side 'BORROWER' doesn't match loan asset for market ${marketUniqueKey}`); } break; + default: + console.warn(`Unknown position side '${pos.side}' for market ${marketUniqueKey}`); + break; } }); diff --git a/src/hooks/useUserPositionsSummaryData.ts b/src/hooks/useUserPositionsSummaryData.ts index 1bc14d6a..a1699720 100644 --- a/src/hooks/useUserPositionsSummaryData.ts +++ b/src/hooks/useUserPositionsSummaryData.ts @@ -37,6 +37,8 @@ const getPeriodTimestamp = (period: EarningsPeriod): number => { return now - 7 * DAY; case 'month': return now - 30 * DAY; + default: + return 0; } }; diff --git a/src/utils/statsUtils.ts b/src/utils/statsUtils.ts index 1f07bd21..c2bc41ba 100644 --- a/src/utils/statsUtils.ts +++ b/src/utils/statsUtils.ts @@ -88,6 +88,9 @@ export const getTimeRange = (timeframe: TimeFrame): { startTime: number; endTime case 'ALL': startTime = 0; // Beginning of time break; + default: + startTime = 0; + break; } return { startTime, endTime: now }; @@ -131,6 +134,9 @@ export const groupTransactionsByPeriod = (transactions: Transaction[], period: M case 'monthly': periodKey = `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}`; break; + default: + periodKey = date.toISOString().split('T')[0]; + break; } const volume = From 9e13c08417526eb7bb1664880ae53d36db2e79bc Mon Sep 17 00:00:00 2001 From: antoncoding Date: Tue, 9 Dec 2025 00:21:47 +0800 Subject: [PATCH 04/12] chore: fix build --- package.json | 7 ++++--- src/data-sources/morpho-api/historical.ts | 3 +-- src/utils/gtag.ts | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index df227d92..bccb9aff 100644 --- a/package.json +++ b/package.json @@ -4,20 +4,21 @@ "private": true, "scripts": { "build": "rm -rf .next && next build", - "check": "pnpm lint:check && pnpm stylelint:check", + "check": "pnpm lint:check && pnpm typecheck && pnpm stylelint:check", "dev": "next dev", "format": "biome format --write .", "generate:chainlink": "tsx scripts/generate-chainlink-data.ts", "generate:redstone": "tsx scripts/generate-redstone-data.ts", "generate:oracle": "tsx scripts/generate-oracle-cache.ts", "lint": "biome check --write .", - "lint:check": "biome check .", + "lint:check": "biome check . && pnpm typecheck", "start": "next start", "stylelint": "stylelint '**/*.css' --fix", "stylelint:check": "stylelint '**/*.css'", "test": "jest .", "test:coverage": "jest . --coverage", - "test:coverage:open": "pnpm test:coverage && open coverage/lcov-report/index.html" + "test:coverage:open": "pnpm test:coverage && open coverage/lcov-report/index.html", + "typecheck": "tsc --noEmit" }, "dependencies": { "@coinbase/wallet-sdk": "^3.9.1", diff --git a/src/data-sources/morpho-api/historical.ts b/src/data-sources/morpho-api/historical.ts index c9c36cec..9647f961 100644 --- a/src/data-sources/morpho-api/historical.ts +++ b/src/data-sources/morpho-api/historical.ts @@ -1,7 +1,6 @@ import { marketHistoricalDataQuery } from '@/graphql/morpho-api-queries'; import type { SupportedNetworks } from '@/utils/networks'; -import type { Market, MarketRates, MarketVolumes } from '@/utils/types'; -export type { TimeseriesOptions, TimeseriesDataPoint } from '@/utils/types'; +import type { Market, MarketRates, MarketVolumes, TimeseriesOptions, TimeseriesDataPoint } from '@/utils/types'; import { morphoGraphqlFetcher } from './fetchers'; // Adjust the response structure type: historicalState contains rates/volumes directly diff --git a/src/utils/gtag.ts b/src/utils/gtag.ts index 6f81bb92..c626ffff 100644 --- a/src/utils/gtag.ts +++ b/src/utils/gtag.ts @@ -3,7 +3,7 @@ import isClient from './isClient'; export const GOOGLE_ANALYTICS_ID = process.env.NEXT_PUBLIC_GOOGLE_ANALYTICS_ID ?? ''; type WindowWithGtag = Window & { - gtag: any; + gtag?: any; }; export const logPageview = (url: string) => { From b160ec40a96efd444039e6c40cab86267399d2d9 Mon Sep 17 00:00:00 2001 From: antoncoding Date: Tue, 9 Dec 2025 00:28:23 +0800 Subject: [PATCH 05/12] chore: remove dependencies --- biome.jsonc | 4 +- package.json | 21 +- pnpm-lock.yaml | 1633 --------------------- scripts/generate-redstone-data.ts | 6 +- src/components/Input/Input.tsx | 6 +- src/components/layout/header/ListItem.tsx | 2 +- src/hooks/useUserBalances.ts | 2 +- src/hooks/useVaultV2.ts | 6 +- 8 files changed, 13 insertions(+), 1667 deletions(-) diff --git a/biome.jsonc b/biome.jsonc index 3d509f65..22237776 100644 --- a/biome.jsonc +++ b/biome.jsonc @@ -179,10 +179,8 @@ "nursery": { // Disable aggressive nursery rules during migration - "noShadow": "off", + // "noShadow": "off", "noUselessUndefined": "off", - "useFind": "off", - "useSpread": "off", // Keep sorted classes off initially "useSortedClasses": "off", diff --git a/package.json b/package.json index bccb9aff..bf820408 100644 --- a/package.json +++ b/package.json @@ -4,14 +4,14 @@ "private": true, "scripts": { "build": "rm -rf .next && next build", - "check": "pnpm lint:check && pnpm typecheck && pnpm stylelint:check", + "check": "pnpm lint:check && pnpm typecheck", "dev": "next dev", "format": "biome format --write .", "generate:chainlink": "tsx scripts/generate-chainlink-data.ts", "generate:redstone": "tsx scripts/generate-redstone-data.ts", "generate:oracle": "tsx scripts/generate-oracle-cache.ts", "lint": "biome check --write .", - "lint:check": "biome check . && pnpm typecheck", + "lint:check": "biome check", "start": "next start", "stylelint": "stylelint '**/*.css' --fix", "stylelint:check": "stylelint '**/*.css'", @@ -60,7 +60,6 @@ "perfume.js": "9.2.0", "permissionless": "^0.0.36", "pino-pretty": "^10.3.1", - "prettier-plugin-solidity": "^1.3.1", "react": "^18", "react-dom": "^18", "react-icons": "^5.2.1", @@ -99,29 +98,13 @@ "@types/node": "^22", "@types/react": "^18", "@types/react-dom": "^18", - "@typescript-eslint/eslint-plugin": "^8.48.1", - "@typescript-eslint/parser": "^8.48.1", - "@typescript-eslint/type-utils": "^8.48.1", - "@typescript-eslint/types": "^8.48.1", - "@typescript-eslint/utils": "^8.48.1", "autoprefixer": "^10.4.16", "babel-jest": "^29.7.0", - "eslint-plugin-cypress": "^2.10.3", - "eslint-plugin-import": "2.27.5", - "eslint-plugin-jest": "^27.1.4", - "eslint-plugin-jsx-a11y": "6.8.0", - "eslint-plugin-react": "7.33.2", - "eslint-plugin-react-hooks": "4.6.0", - "eslint-plugin-react-perf": "^3.3.1", - "eslint-plugin-relay": "^1.8.3", - "eslint-plugin-simple-import-sort": "^8.0.0", "identity-obj-proxy": "^3.0.0", "jest": "^29.7.0", "jest-environment-jsdom": "^29.7.0", "jest-extended": "^4.0.2", "postcss": "^8.4.32", - "prettier": "3.0.3", - "prettier-plugin-tailwindcss": "^0.5.9", "stylelint": "^16.0.2", "stylelint-config-idiomatic-order": "^10.0.0", "stylelint-config-standard": "^35.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e7ade917..1ef3d270 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -125,9 +125,6 @@ importers: pino-pretty: specifier: ^10.3.1 version: 10.3.1 - prettier-plugin-solidity: - specifier: ^1.3.1 - version: 1.4.3(prettier@3.0.3) react: specifier: ^18 version: 18.3.1 @@ -237,54 +234,12 @@ importers: '@types/react-dom': specifier: ^18 version: 18.3.7(@types/react@18.3.23) - '@typescript-eslint/eslint-plugin': - specifier: ^8.48.1 - version: 8.48.1(@typescript-eslint/parser@8.48.1(eslint@8.57.1)(typescript@5.6.3))(eslint@8.57.1)(typescript@5.6.3) - '@typescript-eslint/parser': - specifier: ^8.48.1 - version: 8.48.1(eslint@8.57.1)(typescript@5.6.3) - '@typescript-eslint/type-utils': - specifier: ^8.48.1 - version: 8.48.1(eslint@8.57.1)(typescript@5.6.3) - '@typescript-eslint/types': - specifier: ^8.48.1 - version: 8.48.1 - '@typescript-eslint/utils': - specifier: ^8.48.1 - version: 8.48.1(eslint@8.57.1)(typescript@5.6.3) autoprefixer: specifier: ^10.4.16 version: 10.4.21(postcss@8.5.6) babel-jest: specifier: ^29.7.0 version: 29.7.0(@babel/core@7.28.3) - eslint-plugin-cypress: - specifier: ^2.10.3 - version: 2.15.2(eslint@8.57.1) - eslint-plugin-import: - specifier: 2.27.5 - version: 2.27.5(@typescript-eslint/parser@8.48.1(eslint@8.57.1)(typescript@5.6.3))(eslint@8.57.1) - eslint-plugin-jest: - specifier: ^27.1.4 - version: 27.9.0(@typescript-eslint/eslint-plugin@8.48.1(@typescript-eslint/parser@8.48.1(eslint@8.57.1)(typescript@5.6.3))(eslint@8.57.1)(typescript@5.6.3))(eslint@8.57.1)(jest@29.7.0(@types/node@22.17.2))(typescript@5.6.3) - eslint-plugin-jsx-a11y: - specifier: 6.8.0 - version: 6.8.0(eslint@8.57.1) - eslint-plugin-react: - specifier: 7.33.2 - version: 7.33.2(eslint@8.57.1) - eslint-plugin-react-hooks: - specifier: 4.6.0 - version: 4.6.0(eslint@8.57.1) - eslint-plugin-react-perf: - specifier: ^3.3.1 - version: 3.3.3(eslint@8.57.1) - eslint-plugin-relay: - specifier: ^1.8.3 - version: 1.8.3 - eslint-plugin-simple-import-sort: - specifier: ^8.0.0 - version: 8.0.0(eslint@8.57.1) identity-obj-proxy: specifier: ^3.0.0 version: 3.0.0 @@ -300,12 +255,6 @@ importers: postcss: specifier: ^8.4.32 version: 8.5.6 - prettier: - specifier: 3.0.3 - version: 3.0.3 - prettier-plugin-tailwindcss: - specifier: ^0.5.9 - version: 0.5.14(prettier@3.0.3) stylelint: specifier: ^16.0.2 version: 16.23.1(typescript@5.6.3) @@ -1237,24 +1186,6 @@ packages: cpu: [x64] os: [win32] - '@eslint-community/eslint-utils@4.7.0': - resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - - '@eslint-community/regexpp@4.12.1': - resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - - '@eslint/eslintrc@2.1.4': - resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - '@eslint/js@8.57.1': - resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@ethereumjs/common@3.2.0': resolution: {integrity: sha512-pksvzI0VyLgmuEF2FA/JR/4/y6hcPq8OUail3/AvycBaW1d5VSauOZzqGvJ3RTmR4MU35lWE8KseKOsEhrFRBA==} @@ -1959,19 +1890,6 @@ packages: react: '>=18 || >=19.0.0-rc.0' react-dom: '>=18 || >=19.0.0-rc.0' - '@humanwhocodes/config-array@0.13.0': - resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} - engines: {node: '>=10.10.0'} - deprecated: Use @eslint/config-array instead - - '@humanwhocodes/module-importer@1.0.1': - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} - - '@humanwhocodes/object-schema@2.0.3': - resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} - deprecated: Use @eslint/object-schema instead - '@img/sharp-darwin-arm64@0.33.5': resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} @@ -3402,9 +3320,6 @@ packages: '@socket.io/component-emitter@3.1.2': resolution: {integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==} - '@solidity-parser/parser@0.20.2': - resolution: {integrity: sha512-rbu0bzwNvMcwAjH86hiEAcOeRI2EeK8zCkHDrFykh/Al8mvJeFmjy3UrE7GYQjNwOgbGUUtCn5/k8CB8zIu7QA==} - '@swc/helpers@0.5.15': resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} @@ -3539,12 +3454,6 @@ packages: '@types/jsdom@20.0.1': resolution: {integrity: sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==} - '@types/json-schema@7.0.15': - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - - '@types/json5@0.0.29': - resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - '@types/lodash.isplainobject@4.0.9': resolution: {integrity: sha512-QC8nKcap5hRrbtIaPRjUMlcXXnLeayqQZPSaWJDx3xeuN17+2PW5wkmEJ4+lZgNnQRlSPzxjTYKCfV1uTnPaEg==} @@ -3577,9 +3486,6 @@ packages: '@types/react@18.3.23': resolution: {integrity: sha512-/LDXMQh55EzZQ0uVAZmKKhfENivEvWz6E+EYzh+/MCjMhNsotd+ZHhBGIjFDTi6+fz0OhQQQLbTgdQIxxCsC0w==} - '@types/semver@7.7.0': - resolution: {integrity: sha512-k107IF4+Xr7UHjwDc7Cfd6PRQfbdkiRabXGRjo07b4WyPahFBZCZ1sE+BNxYIJPPg73UkfOsVOLwqVc/6ETrIA==} - '@types/stack-utils@2.0.3': resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} @@ -3598,92 +3504,6 @@ packages: '@types/yargs@17.0.33': resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} - '@typescript-eslint/eslint-plugin@8.48.1': - resolution: {integrity: sha512-X63hI1bxl5ohelzr0LY5coufyl0LJNthld+abwxpCoo6Gq+hSqhKwci7MUWkXo67mzgUK6YFByhmaHmUcuBJmA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - '@typescript-eslint/parser': ^8.48.1 - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/parser@8.48.1': - resolution: {integrity: sha512-PC0PDZfJg8sP7cmKe6L3QIL8GZwU5aRvUFedqSIpw3B+QjRSUZeeITC2M5XKeMXEzL6wccN196iy3JLwKNvDVA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/project-service@8.48.1': - resolution: {integrity: sha512-HQWSicah4s9z2/HifRPQ6b6R7G+SBx64JlFQpgSSHWPKdvCZX57XCbszg/bapbRsOEv42q5tayTYcEFpACcX1w==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/scope-manager@5.62.0': - resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - '@typescript-eslint/scope-manager@8.48.1': - resolution: {integrity: sha512-rj4vWQsytQbLxC5Bf4XwZ0/CKd362DkWMUkviT7DCS057SK64D5lH74sSGzhI6PDD2HCEq02xAP9cX68dYyg1w==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/tsconfig-utils@8.48.1': - resolution: {integrity: sha512-k0Jhs4CpEffIBm6wPaCXBAD7jxBtrHjrSgtfCjUvPp9AZ78lXKdTR8fxyZO5y4vWNlOvYXRtngSZNSn+H53Jkw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/type-utils@8.48.1': - resolution: {integrity: sha512-1jEop81a3LrJQLTf/1VfPQdhIY4PlGDBc/i67EVWObrtvcziysbLN3oReexHOM6N3jyXgCrkBsZpqwH0hiDOQg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/types@5.62.0': - resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - '@typescript-eslint/types@8.48.1': - resolution: {integrity: sha512-+fZ3LZNeiELGmimrujsDCT4CRIbq5oXdHe7chLiW8qzqyPMnn1puNstCrMNVAqwcl2FdIxkuJ4tOs/RFDBVc/Q==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/typescript-estree@5.62.0': - resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/typescript-estree@8.48.1': - resolution: {integrity: sha512-/9wQ4PqaefTK6POVTjJaYS0bynCgzh6ClJHGSBj06XEHjkfylzB+A3qvyaXnErEZSaxhIo4YdyBgq6j4RysxDg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/utils@5.62.0': - resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - - '@typescript-eslint/utils@8.48.1': - resolution: {integrity: sha512-fAnhLrDjiVfey5wwFRwrweyRlCmdz5ZxXz2G/4cLn0YDLjTapmN4gcCsTBR1N2rWnZSDeWpYtgLDsJt+FpmcwA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/visitor-keys@5.62.0': - resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - '@typescript-eslint/visitor-keys@8.48.1': - resolution: {integrity: sha512-BmxxndzEWhE4TIEEMBs8lP3MBWN3jFPs/p6gPm/wkv02o41hI6cq9AuSmGAaTTHPtA1FTi2jBre4A9rm5ZmX+Q==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@ungap/structured-clone@1.3.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} @@ -3863,11 +3683,6 @@ packages: acorn-globals@7.0.1: resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==} - acorn-jsx@5.3.2: - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn-walk@8.3.4: resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} engines: {node: '>=0.4.0'} @@ -3884,9 +3699,6 @@ packages: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} - ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - ajv@8.17.1: resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} @@ -3948,41 +3760,14 @@ packages: resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} engines: {node: '>= 0.4'} - array-includes@3.1.9: - resolution: {integrity: sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==} - engines: {node: '>= 0.4'} - array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} - array.prototype.flat@1.3.3: - resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==} - engines: {node: '>= 0.4'} - - array.prototype.flatmap@1.3.3: - resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} - engines: {node: '>= 0.4'} - - array.prototype.tosorted@1.1.4: - resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} - engines: {node: '>= 0.4'} - - arraybuffer.prototype.slice@1.0.4: - resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} - engines: {node: '>= 0.4'} - - ast-types-flow@0.0.8: - resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} - astral-regex@2.0.0: resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} engines: {node: '>=8'} - async-function@1.0.0: - resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} - engines: {node: '>= 0.4'} - async-mutex@0.2.6: resolution: {integrity: sha512-Hs4R+4SPgamu6rSGW8C7cV9gaWUKEHykfzCCvIRuaVv636Ju10ZdeUbvb4TBEW0INuq2DHZqXbK4Nd3yG4RaRw==} @@ -4004,14 +3789,6 @@ packages: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} - axe-core@4.7.0: - resolution: {integrity: sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==} - engines: {node: '>=4'} - - axobject-query@3.2.4: - resolution: {integrity: sha512-aPTElBrbifBU1krmZxGZOlBkslORe7Ll7+BDnI50Wy4LgOt69luMgevkDfTq1O/ZgprooPCtWpjCwKSZw/iZ4A==} - engines: {node: '>= 0.4'} - babel-jest@29.7.0: resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -4410,25 +4187,10 @@ packages: resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==} engines: {node: '>=12'} - damerau-levenshtein@1.0.8: - resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} - data-urls@3.0.2: resolution: {integrity: sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==} engines: {node: '>=12'} - data-view-buffer@1.0.2: - resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} - engines: {node: '>= 0.4'} - - data-view-byte-length@1.0.2: - resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} - engines: {node: '>= 0.4'} - - data-view-byte-offset@1.0.1: - resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} - engines: {node: '>= 0.4'} - date-fns@2.30.0: resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} engines: {node: '>=0.11'} @@ -4439,14 +4201,6 @@ packages: dayjs@1.11.13: resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==} - debug@3.2.7: - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - debug@4.3.7: resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} engines: {node: '>=6.0'} @@ -4494,9 +4248,6 @@ packages: resolution: {integrity: sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==} engines: {node: '>= 0.4'} - deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - deep-object-diff@1.1.9: resolution: {integrity: sha512-Rn+RuwkmkDwCi2/oXOFS9Gsr5lJZu/yTGpK7wAaAIE75CC+LCGEZHpY6VQJa/RoJcrmaA/docWJZvYohlNkWPA==} @@ -4565,14 +4316,6 @@ packages: dlv@1.1.3: resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} - doctrine@2.1.0: - resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} - engines: {node: '>=0.10.0'} - - doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} - dom-accessibility-api@0.5.16: resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} @@ -4646,10 +4389,6 @@ packages: error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} - es-abstract@1.24.0: - resolution: {integrity: sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==} - engines: {node: '>= 0.4'} - es-define-property@1.0.1: resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} engines: {node: '>= 0.4'} @@ -4661,10 +4400,6 @@ packages: es-get-iterator@1.1.3: resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==} - es-iterator-helpers@1.2.1: - resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==} - engines: {node: '>= 0.4'} - es-object-atoms@1.1.1: resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} engines: {node: '>= 0.4'} @@ -4673,14 +4408,6 @@ packages: resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} engines: {node: '>= 0.4'} - es-shim-unscopables@1.1.0: - resolution: {integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==} - engines: {node: '>= 0.4'} - - es-to-primitive@1.3.0: - resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} - engines: {node: '>= 0.4'} - es-toolkit@1.33.0: resolution: {integrity: sha512-X13Q/ZSc+vsO1q600bvNK4bxgXMkHcf//RxCmYDaRY5DAcT+eoXjY5hoAPGMdRnWQjvyLEcyauG3b6hz76LNqg==} @@ -4697,142 +4424,16 @@ packages: resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} engines: {node: '>=8'} - escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - escodegen@2.1.0: resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} engines: {node: '>=6.0'} hasBin: true - eslint-import-resolver-node@0.3.9: - resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} - - eslint-module-utils@2.12.1: - resolution: {integrity: sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true - - eslint-plugin-cypress@2.15.2: - resolution: {integrity: sha512-CtcFEQTDKyftpI22FVGpx8bkpKyYXBlNge6zSo0pl5/qJvBAnzaD76Vu2AsP16d6mTj478Ldn2mhgrWV+Xr0vQ==} - peerDependencies: - eslint: '>= 3.2.1' - - eslint-plugin-import@2.27.5: - resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - - eslint-plugin-jest@27.9.0: - resolution: {integrity: sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@typescript-eslint/eslint-plugin': ^5.0.0 || ^6.0.0 || ^7.0.0 - eslint: ^7.0.0 || ^8.0.0 - jest: '*' - peerDependenciesMeta: - '@typescript-eslint/eslint-plugin': - optional: true - jest: - optional: true - - eslint-plugin-jsx-a11y@6.8.0: - resolution: {integrity: sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==} - engines: {node: '>=4.0'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - - eslint-plugin-react-hooks@4.6.0: - resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} - engines: {node: '>=10'} - peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 - - eslint-plugin-react-perf@3.3.3: - resolution: {integrity: sha512-EzPdxsRJg5IllCAH9ny/3nK7sv9251tvKmi/d3Ouv5KzI8TB3zNhzScxL9wnh9Hvv8GYC5LEtzTauynfOEYiAw==} - engines: {node: '>=6.9.1'} - peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 - - eslint-plugin-react@7.33.2: - resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==} - engines: {node: '>=4'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - - eslint-plugin-relay@1.8.3: - resolution: {integrity: sha512-awyrwntUTZ7Z+lJUnniTCnJdZYr1dY2djQDARMx1P1y2BFMsBjtTljBK0lBEM7yiTHPBwVnE2OSnXxcD4yMb0A==} - - eslint-plugin-simple-import-sort@8.0.0: - resolution: {integrity: sha512-bXgJQ+lqhtQBCuWY/FUWdB27j4+lqcvXv5rUARkzbeWLwea+S5eBZEQrhnO+WgX3ZoJHVj0cn943iyXwByHHQw==} - peerDependencies: - eslint: '>=5.0.0' - - eslint-scope@5.1.1: - resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} - engines: {node: '>=8.0.0'} - - eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - eslint-visitor-keys@4.2.1: - resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - eslint@8.57.1: - resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. - hasBin: true - - espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} hasBin: true - esquery@1.6.0: - resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} - engines: {node: '>=0.10'} - - esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} - - estraverse@4.3.0: - resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} - engines: {node: '>=4.0'} - estraverse@5.3.0: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} @@ -4917,9 +4518,6 @@ packages: fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - fast-redact@3.5.0: resolution: {integrity: sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==} engines: {node: '>=6'} @@ -4940,22 +4538,9 @@ packages: fb-watchman@2.0.2: resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} - fdir@6.5.0: - resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} - engines: {node: '>=12.0.0'} - peerDependencies: - picomatch: ^3 || ^4 - peerDependenciesMeta: - picomatch: - optional: true - file-entry-cache@10.1.4: resolution: {integrity: sha512-5XRUFc0WTtUbjfGzEwXc42tiGxQHBmtbUG1h9L2apu4SulCGN3Hqm//9D6FAolf8MYNL7f/YlJl9vy08pj5JuA==} - file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} - fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} @@ -4968,14 +4553,6 @@ packages: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} - find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} - - flat-cache@3.2.0: - resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} - engines: {node: ^10.12.0 || >=12.0.0} - flat-cache@6.1.13: resolution: {integrity: sha512-gmtS2PaUjSPa4zjObEIn4WWliKyZzYljgxODBfxugpK6q6HU9ClXzgCJ+nlcPKY9Bt090ypTOLIFWkV0jbKFjw==} @@ -5026,10 +4603,6 @@ packages: function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - function.prototype.name@1.1.8: - resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} - engines: {node: '>= 0.4'} - functions-have-names@1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} @@ -5061,10 +4634,6 @@ packages: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} - get-symbol-description@1.1.0: - resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} - engines: {node: '>= 0.4'} - get-tsconfig@4.10.1: resolution: {integrity: sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==} @@ -5096,14 +4665,6 @@ packages: resolution: {integrity: sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==} engines: {node: '>=6'} - globals@13.24.0: - resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} - engines: {node: '>=8'} - - globalthis@1.0.4: - resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} - engines: {node: '>= 0.4'} - globby@11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} @@ -5118,19 +4679,11 @@ packages: graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - graphql-request@6.1.0: resolution: {integrity: sha512-p+XPfS4q7aIpKVcgmnZKhMNqhltk20hfXtkaIkTfjjmiKMJ5xrt5c743cL03y/K7y1rg3WrIC49xGiEQ4mxdNw==} peerDependencies: graphql: 14 - 16 - graphql@14.7.0: - resolution: {integrity: sha512-l0xWZpoPKpppFzMfvVyFmp9vLN7w/ZZJPefUicMCepfJeQ8sMcztloGYY9DfjVPo6tIUDzU5Hw3MUbIjj9AVVA==} - engines: {node: '>= 6.x'} - deprecated: 'No longer supported; please update to a newer version. Details: https://github.com/graphql/graphql-js#version-support' - graphql@16.11.0: resolution: {integrity: sha512-mS1lbMsxgQj6hge1XZ6p7GPhbrtFwUFYi3wRzXAC/FmYnyXMTvvI3td3rjmQ2u8ewXueaSvRPWaEcgVVOT9Jnw==} engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} @@ -5157,10 +4710,6 @@ packages: has-property-descriptors@1.0.2: resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} - has-proto@1.2.0: - resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} - engines: {node: '>= 0.4'} - has-symbols@1.1.0: resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} engines: {node: '>= 0.4'} @@ -5169,10 +4718,6 @@ packages: resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} engines: {node: '>= 0.4'} - has@1.0.4: - resolution: {integrity: sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==} - engines: {node: '>= 0.4.0'} - hash.js@1.1.7: resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} @@ -5322,10 +4867,6 @@ packages: is-arrayish@0.3.2: resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} - is-async-function@2.1.1: - resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} - engines: {node: '>= 0.4'} - is-bigint@1.1.0: resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} engines: {node: '>= 0.4'} @@ -5346,10 +4887,6 @@ packages: resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} engines: {node: '>= 0.4'} - is-data-view@1.0.2: - resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} - engines: {node: '>= 0.4'} - is-date-object@1.1.0: resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} engines: {node: '>= 0.4'} @@ -5358,10 +4895,6 @@ packages: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} - is-finalizationregistry@1.1.1: - resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} - engines: {node: '>= 0.4'} - is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} @@ -5382,10 +4915,6 @@ packages: resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} engines: {node: '>= 0.4'} - is-negative-zero@2.0.3: - resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} - engines: {node: '>= 0.4'} - is-number-object@1.1.1: resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} engines: {node: '>= 0.4'} @@ -5394,10 +4923,6 @@ packages: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} - is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - is-plain-obj@4.1.0: resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} engines: {node: '>=12'} @@ -5441,10 +4966,6 @@ packages: resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} engines: {node: '>= 0.4'} - is-weakref@1.1.1: - resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} - engines: {node: '>= 0.4'} - is-weakset@2.0.4: resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} engines: {node: '>= 0.4'} @@ -5492,13 +5013,6 @@ packages: resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==} engines: {node: '>=8'} - iterall@1.3.0: - resolution: {integrity: sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg==} - - iterator.prototype@1.1.5: - resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==} - engines: {node: '>= 0.4'} - jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} @@ -5690,9 +5204,6 @@ packages: engines: {node: '>=6'} hasBin: true - json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} @@ -5703,19 +5214,9 @@ packages: json-rpc-random-id@1.0.1: resolution: {integrity: sha512-RJ9YYNCkhVDBuP4zN5BBtYAzEl03yq/jIIsyif0JY9qyJuQQZNeDK7anAPKKlyEtLSj2s8h6hNh2F8zO5q7ScA==} - json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - json-schema-traverse@1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - - json5@1.0.2: - resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} - hasBin: true - json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} @@ -5724,17 +5225,10 @@ packages: jsonc-parser@3.3.1: resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} - jsx-ast-utils@3.3.5: - resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} - engines: {node: '>=4.0'} - keccak@3.0.4: resolution: {integrity: sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==} engines: {node: '>=10.0.0'} - keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - keyv@5.5.0: resolution: {integrity: sha512-QG7qR2tijh1ftOvClut4YKKg1iW6cx3GZsKoGyJPxHkGWK9oJhG9P3j5deP0QQOGDowBMVQFaP+Vm4NpGYvmIQ==} @@ -5752,21 +5246,10 @@ packages: known-css-properties@0.37.0: resolution: {integrity: sha512-JCDrsP4Z1Sb9JwG0aJ8Eo2r7k4Ou5MwmThS/6lcIe1ICyb7UBJKGRIUUdqc2ASdE/42lgz6zFUnzAIhtXnBVrQ==} - language-subtag-registry@0.3.23: - resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==} - - language-tags@1.0.9: - resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} - engines: {node: '>=0.10'} - leven@3.1.0: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} engines: {node: '>=6'} - levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} - lilconfig@3.1.3: resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} engines: {node: '>=14'} @@ -5790,10 +5273,6 @@ packages: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} - locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} - lodash.debounce@4.0.8: resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} @@ -5803,9 +5282,6 @@ packages: lodash.memoize@4.1.2: resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} - lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - lodash.mergewith@4.6.2: resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==} @@ -6128,22 +5604,6 @@ packages: resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} engines: {node: '>= 0.4'} - object.entries@1.1.9: - resolution: {integrity: sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==} - engines: {node: '>= 0.4'} - - object.fromentries@2.0.8: - resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} - engines: {node: '>= 0.4'} - - object.hasown@1.1.4: - resolution: {integrity: sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==} - engines: {node: '>= 0.4'} - - object.values@1.2.1: - resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} - engines: {node: '>= 0.4'} - ofetch@1.4.1: resolution: {integrity: sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw==} @@ -6161,14 +5621,6 @@ packages: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} - optionator@0.9.4: - resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} - engines: {node: '>= 0.8.0'} - - own-keys@1.0.1: - resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} - engines: {node: '>= 0.4'} - ox@0.6.7: resolution: {integrity: sha512-17Gk/eFsFRAZ80p5eKqv89a57uXjd3NgIf1CaXojATPBuujVc/fQSVhBeAU9JCRB+k7J50WQAyWTxK19T9GgbA==} peerDependencies: @@ -6205,10 +5657,6 @@ packages: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} - p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} - p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} @@ -6276,10 +5724,6 @@ packages: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} - picomatch@4.0.3: - resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} - engines: {node: '>=12'} - pify@2.3.0: resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} engines: {node: '>=0.10.0'} @@ -6401,73 +5845,6 @@ packages: preact@10.27.1: resolution: {integrity: sha512-V79raXEWch/rbqoNc7nT9E4ep7lu+mI3+sBmfRD4i1M73R3WLYcCtdI0ibxGVf4eQL8ZIz2nFacqEC+rmnOORQ==} - prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} - - prettier-plugin-solidity@1.4.3: - resolution: {integrity: sha512-Mrr/iiR9f9IaeGRMZY2ApumXcn/C5Gs3S7B7hWB3gigBFML06C0yEyW86oLp0eqiA0qg+46FaChgLPJCj/pIlg==} - engines: {node: '>=18'} - peerDependencies: - prettier: '>=2.3.0' - - prettier-plugin-tailwindcss@0.5.14: - resolution: {integrity: sha512-Puaz+wPUAhFp8Lo9HuciYKM2Y2XExESjeT+9NQoVFXZsPPnc9VYss2SpxdQ6vbatmt8/4+SN0oe0I1cPDABg9Q==} - engines: {node: '>=14.21.3'} - peerDependencies: - '@ianvs/prettier-plugin-sort-imports': '*' - '@prettier/plugin-pug': '*' - '@shopify/prettier-plugin-liquid': '*' - '@trivago/prettier-plugin-sort-imports': '*' - '@zackad/prettier-plugin-twig-melody': '*' - prettier: ^3.0 - prettier-plugin-astro: '*' - prettier-plugin-css-order: '*' - prettier-plugin-import-sort: '*' - prettier-plugin-jsdoc: '*' - prettier-plugin-marko: '*' - prettier-plugin-organize-attributes: '*' - prettier-plugin-organize-imports: '*' - prettier-plugin-sort-imports: '*' - prettier-plugin-style-order: '*' - prettier-plugin-svelte: '*' - peerDependenciesMeta: - '@ianvs/prettier-plugin-sort-imports': - optional: true - '@prettier/plugin-pug': - optional: true - '@shopify/prettier-plugin-liquid': - optional: true - '@trivago/prettier-plugin-sort-imports': - optional: true - '@zackad/prettier-plugin-twig-melody': - optional: true - prettier-plugin-astro: - optional: true - prettier-plugin-css-order: - optional: true - prettier-plugin-import-sort: - optional: true - prettier-plugin-jsdoc: - optional: true - prettier-plugin-marko: - optional: true - prettier-plugin-organize-attributes: - optional: true - prettier-plugin-organize-imports: - optional: true - prettier-plugin-sort-imports: - optional: true - prettier-plugin-style-order: - optional: true - prettier-plugin-svelte: - optional: true - - prettier@3.0.3: - resolution: {integrity: sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==} - engines: {node: '>=14'} - hasBin: true - pretty-format@27.5.1: resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -6685,10 +6062,6 @@ packages: resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} engines: {node: '>=8'} - reflect.getprototypeof@1.0.10: - resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} - engines: {node: '>= 0.4'} - regenerate-unicode-properties@10.2.0: resolution: {integrity: sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==} engines: {node: '>=4'} @@ -6767,36 +6140,19 @@ packages: engines: {node: '>= 0.4'} hasBin: true - resolve@2.0.0-next.5: - resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} - hasBin: true - reusify@1.1.0: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true - run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - safe-array-concat@1.1.3: - resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} - engines: {node: '>=0.4'} - safe-buffer@5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - safe-push-apply@1.0.0: - resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} - engines: {node: '>= 0.4'} - safe-regex-test@1.1.0: resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} engines: {node: '>= 0.4'} @@ -6844,10 +6200,6 @@ packages: resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} engines: {node: '>= 0.4'} - set-proto@1.0.0: - resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} - engines: {node: '>= 0.4'} - sha.js@2.4.12: resolution: {integrity: sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==} engines: {node: '>= 0.10'} @@ -6980,22 +6332,6 @@ packages: resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} engines: {node: '>=12'} - string.prototype.matchall@4.0.12: - resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==} - engines: {node: '>= 0.4'} - - string.prototype.trim@1.2.10: - resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} - engines: {node: '>= 0.4'} - - string.prototype.trimend@1.0.9: - resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} - engines: {node: '>= 0.4'} - - string.prototype.trimstart@1.0.8: - resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} - engines: {node: '>= 0.4'} - string_decoder@1.1.1: resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} @@ -7013,10 +6349,6 @@ packages: resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} engines: {node: '>=12'} - strip-bom@3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} - engines: {node: '>=4'} - strip-bom@4.0.0: resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} engines: {node: '>=8'} @@ -7144,9 +6476,6 @@ packages: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} - text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - thenify-all@1.6.0: resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} engines: {node: '>=0.8'} @@ -7164,10 +6493,6 @@ packages: resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==} engines: {node: '>=18'} - tinyglobby@0.2.15: - resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} - engines: {node: '>=12.0.0'} - tmpl@1.0.5: resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} @@ -7221,12 +6546,6 @@ packages: zod: optional: true - ts-api-utils@2.1.0: - resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} - engines: {node: '>=18.12'} - peerDependencies: - typescript: '>=4.8.4' - ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} @@ -7257,38 +6576,21 @@ packages: jest-util: optional: true - tsconfig-paths@3.15.0: - resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} - tslib@1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - tsutils@3.21.0: - resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} - engines: {node: '>= 6'} - peerDependencies: - typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' - tsx@4.20.5: resolution: {integrity: sha512-+wKjMNU9w/EaQayHXb7WA7ZaHY6hN8WgfvHNQ3t1PnU91/7O8TcTnIhCDYTZwnt8JsO9IBqZ30Ln1r7pPF52Aw==} engines: {node: '>=18.0.0'} hasBin: true - type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} - type-detect@4.0.8: resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} engines: {node: '>=4'} - type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - type-fest@0.21.3: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} @@ -7301,18 +6603,6 @@ packages: resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} engines: {node: '>= 0.4'} - typed-array-byte-length@1.0.3: - resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} - engines: {node: '>= 0.4'} - - typed-array-byte-offset@1.0.4: - resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} - engines: {node: '>= 0.4'} - - typed-array-length@1.0.7: - resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} - engines: {node: '>= 0.4'} - typescript@5.6.3: resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} engines: {node: '>=14.17'} @@ -7337,10 +6627,6 @@ packages: resolution: {integrity: sha512-I41KoWl09PklvXTdN4JWgs+6Z6n5PERDJGj1hOQXYEMbmKXZLrulG2QAZNEMJ9pdGwtcGk/MevpllWYXM5Wq3A==} hasBin: true - unbox-primitive@1.1.0: - resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} - engines: {node: '>= 0.4'} - uncrypto@0.1.3: resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==} @@ -7450,9 +6736,6 @@ packages: peerDependencies: browserslist: '>= 4.21.0' - uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - url-parse@1.5.10: resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} @@ -7628,10 +6911,6 @@ packages: resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} engines: {node: '>= 0.4'} - which-builtin-type@1.2.1: - resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} - engines: {node: '>= 0.4'} - which-collection@1.0.2: resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} engines: {node: '>= 0.4'} @@ -7652,10 +6931,6 @@ packages: engines: {node: '>= 8'} hasBin: true - word-wrap@1.2.5: - resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} - engines: {node: '>=0.10.0'} - wordwrap@1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} @@ -8846,29 +8121,6 @@ snapshots: '@esbuild/win32-x64@0.25.10': optional: true - '@eslint-community/eslint-utils@4.7.0(eslint@8.57.1)': - dependencies: - eslint: 8.57.1 - eslint-visitor-keys: 3.4.3 - - '@eslint-community/regexpp@4.12.1': {} - - '@eslint/eslintrc@2.1.4': - dependencies: - ajv: 6.12.6 - debug: 4.4.1 - espree: 9.6.1 - globals: 13.24.0 - ignore: 5.3.2 - import-fresh: 3.3.1 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - - '@eslint/js@8.57.1': {} - '@ethereumjs/common@3.2.0': dependencies: '@ethereumjs/util': 8.1.0 @@ -10223,18 +9475,6 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@humanwhocodes/config-array@0.13.0': - dependencies: - '@humanwhocodes/object-schema': 2.0.3 - debug: 4.4.1 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - - '@humanwhocodes/module-importer@1.0.1': {} - - '@humanwhocodes/object-schema@2.0.3': {} - '@img/sharp-darwin-arm64@0.33.5': optionalDependencies: '@img/sharp-libvips-darwin-arm64': 1.0.4 @@ -12339,8 +11579,6 @@ snapshots: '@socket.io/component-emitter@3.1.2': {} - '@solidity-parser/parser@0.20.2': {} - '@swc/helpers@0.5.15': dependencies: tslib: 2.8.1 @@ -12496,10 +11734,6 @@ snapshots: '@types/tough-cookie': 4.0.5 parse5: 7.3.0 - '@types/json-schema@7.0.15': {} - - '@types/json5@0.0.29': {} - '@types/lodash.isplainobject@4.0.9': dependencies: '@types/lodash': 4.17.20 @@ -12535,8 +11769,6 @@ snapshots: '@types/prop-types': 15.7.15 csstype: 3.1.3 - '@types/semver@7.7.0': {} - '@types/stack-utils@2.0.3': {} '@types/tough-cookie@4.0.5': {} @@ -12551,139 +11783,6 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 - '@typescript-eslint/eslint-plugin@8.48.1(@typescript-eslint/parser@8.48.1(eslint@8.57.1)(typescript@5.6.3))(eslint@8.57.1)(typescript@5.6.3)': - dependencies: - '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.48.1(eslint@8.57.1)(typescript@5.6.3) - '@typescript-eslint/scope-manager': 8.48.1 - '@typescript-eslint/type-utils': 8.48.1(eslint@8.57.1)(typescript@5.6.3) - '@typescript-eslint/utils': 8.48.1(eslint@8.57.1)(typescript@5.6.3) - '@typescript-eslint/visitor-keys': 8.48.1 - eslint: 8.57.1 - graphemer: 1.4.0 - ignore: 7.0.5 - natural-compare: 1.4.0 - ts-api-utils: 2.1.0(typescript@5.6.3) - typescript: 5.6.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/parser@8.48.1(eslint@8.57.1)(typescript@5.6.3)': - dependencies: - '@typescript-eslint/scope-manager': 8.48.1 - '@typescript-eslint/types': 8.48.1 - '@typescript-eslint/typescript-estree': 8.48.1(typescript@5.6.3) - '@typescript-eslint/visitor-keys': 8.48.1 - debug: 4.4.1 - eslint: 8.57.1 - typescript: 5.6.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/project-service@8.48.1(typescript@5.6.3)': - dependencies: - '@typescript-eslint/tsconfig-utils': 8.48.1(typescript@5.6.3) - '@typescript-eslint/types': 8.48.1 - debug: 4.4.1 - typescript: 5.6.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/scope-manager@5.62.0': - dependencies: - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/visitor-keys': 5.62.0 - - '@typescript-eslint/scope-manager@8.48.1': - dependencies: - '@typescript-eslint/types': 8.48.1 - '@typescript-eslint/visitor-keys': 8.48.1 - - '@typescript-eslint/tsconfig-utils@8.48.1(typescript@5.6.3)': - dependencies: - typescript: 5.6.3 - - '@typescript-eslint/type-utils@8.48.1(eslint@8.57.1)(typescript@5.6.3)': - dependencies: - '@typescript-eslint/types': 8.48.1 - '@typescript-eslint/typescript-estree': 8.48.1(typescript@5.6.3) - '@typescript-eslint/utils': 8.48.1(eslint@8.57.1)(typescript@5.6.3) - debug: 4.4.1 - eslint: 8.57.1 - ts-api-utils: 2.1.0(typescript@5.6.3) - typescript: 5.6.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/types@5.62.0': {} - - '@typescript-eslint/types@8.48.1': {} - - '@typescript-eslint/typescript-estree@5.62.0(typescript@5.6.3)': - dependencies: - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/visitor-keys': 5.62.0 - debug: 4.4.1 - globby: 11.1.0 - is-glob: 4.0.3 - semver: 7.7.2 - tsutils: 3.21.0(typescript@5.6.3) - optionalDependencies: - typescript: 5.6.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/typescript-estree@8.48.1(typescript@5.6.3)': - dependencies: - '@typescript-eslint/project-service': 8.48.1(typescript@5.6.3) - '@typescript-eslint/tsconfig-utils': 8.48.1(typescript@5.6.3) - '@typescript-eslint/types': 8.48.1 - '@typescript-eslint/visitor-keys': 8.48.1 - debug: 4.4.1 - minimatch: 9.0.5 - semver: 7.7.2 - tinyglobby: 0.2.15 - ts-api-utils: 2.1.0(typescript@5.6.3) - typescript: 5.6.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/utils@5.62.0(eslint@8.57.1)(typescript@5.6.3)': - dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@8.57.1) - '@types/json-schema': 7.0.15 - '@types/semver': 7.7.0 - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.6.3) - eslint: 8.57.1 - eslint-scope: 5.1.1 - semver: 7.7.2 - transitivePeerDependencies: - - supports-color - - typescript - - '@typescript-eslint/utils@8.48.1(eslint@8.57.1)(typescript@5.6.3)': - dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@8.57.1) - '@typescript-eslint/scope-manager': 8.48.1 - '@typescript-eslint/types': 8.48.1 - '@typescript-eslint/typescript-estree': 8.48.1(typescript@5.6.3) - eslint: 8.57.1 - typescript: 5.6.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/visitor-keys@5.62.0': - dependencies: - '@typescript-eslint/types': 5.62.0 - eslint-visitor-keys: 3.4.3 - - '@typescript-eslint/visitor-keys@8.48.1': - dependencies: - '@typescript-eslint/types': 8.48.1 - eslint-visitor-keys: 4.2.1 - '@ungap/structured-clone@1.3.0': {} '@uniswap/permit2-sdk@1.4.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)': @@ -13335,10 +12434,6 @@ snapshots: acorn: 8.15.0 acorn-walk: 8.3.4 - acorn-jsx@5.3.2(acorn@8.15.0): - dependencies: - acorn: 8.15.0 - acorn-walk@8.3.4: dependencies: acorn: 8.15.0 @@ -13353,13 +12448,6 @@ snapshots: transitivePeerDependencies: - supports-color - ajv@6.12.6: - dependencies: - fast-deep-equal: 3.1.3 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.4.1 - uri-js: 4.4.1 - ajv@8.17.1: dependencies: fast-deep-equal: 3.1.3 @@ -13415,57 +12503,10 @@ snapshots: call-bound: 1.0.4 is-array-buffer: 3.0.5 - array-includes@3.1.9: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-object-atoms: 1.1.1 - get-intrinsic: 1.3.0 - is-string: 1.1.1 - math-intrinsics: 1.1.0 - array-union@2.1.0: {} - array.prototype.flat@1.3.3: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-shim-unscopables: 1.1.0 - - array.prototype.flatmap@1.3.3: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-shim-unscopables: 1.1.0 - - array.prototype.tosorted@1.1.4: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-errors: 1.3.0 - es-shim-unscopables: 1.1.0 - - arraybuffer.prototype.slice@1.0.4: - dependencies: - array-buffer-byte-length: 1.0.2 - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - is-array-buffer: 3.0.5 - - ast-types-flow@0.0.8: {} - astral-regex@2.0.0: {} - async-function@1.0.0: {} - async-mutex@0.2.6: dependencies: tslib: 2.8.1 @@ -13488,10 +12529,6 @@ snapshots: dependencies: possible-typed-array-names: 1.1.0 - axe-core@4.7.0: {} - - axobject-query@3.2.4: {} - babel-jest@29.7.0(@babel/core@7.28.3): dependencies: '@babel/core': 7.28.3 @@ -13904,32 +12941,12 @@ snapshots: d3-timer@3.0.1: {} - damerau-levenshtein@1.0.8: {} - data-urls@3.0.2: dependencies: abab: 2.0.6 whatwg-mimetype: 3.0.0 whatwg-url: 11.0.0 - data-view-buffer@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 - - data-view-byte-length@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 - - data-view-byte-offset@1.0.1: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 - date-fns@2.30.0: dependencies: '@babel/runtime': 7.28.3 @@ -13938,10 +12955,6 @@ snapshots: dayjs@1.11.13: {} - debug@3.2.7: - dependencies: - ms: 2.1.3 - debug@4.3.7: dependencies: ms: 2.1.3 @@ -13985,8 +12998,6 @@ snapshots: which-collection: 1.0.2 which-typed-array: 1.1.19 - deep-is@0.1.4: {} - deep-object-diff@1.1.9: {} deepmerge@4.3.1: {} @@ -14039,14 +13050,6 @@ snapshots: dlv@1.1.3: {} - doctrine@2.1.0: - dependencies: - esutils: 2.0.3 - - doctrine@3.0.0: - dependencies: - esutils: 2.0.3 - dom-accessibility-api@0.5.16: {} dom-accessibility-api@0.6.3: {} @@ -14137,63 +13140,6 @@ snapshots: dependencies: is-arrayish: 0.2.1 - es-abstract@1.24.0: - dependencies: - array-buffer-byte-length: 1.0.2 - arraybuffer.prototype.slice: 1.0.4 - available-typed-arrays: 1.0.7 - call-bind: 1.0.8 - call-bound: 1.0.4 - data-view-buffer: 1.0.2 - data-view-byte-length: 1.0.2 - data-view-byte-offset: 1.0.1 - es-define-property: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - es-set-tostringtag: 2.1.0 - es-to-primitive: 1.3.0 - function.prototype.name: 1.1.8 - get-intrinsic: 1.3.0 - get-proto: 1.0.1 - get-symbol-description: 1.1.0 - globalthis: 1.0.4 - gopd: 1.2.0 - has-property-descriptors: 1.0.2 - has-proto: 1.2.0 - has-symbols: 1.1.0 - hasown: 2.0.2 - internal-slot: 1.1.0 - is-array-buffer: 3.0.5 - is-callable: 1.2.7 - is-data-view: 1.0.2 - is-negative-zero: 2.0.3 - is-regex: 1.2.1 - is-set: 2.0.3 - is-shared-array-buffer: 1.0.4 - is-string: 1.1.1 - is-typed-array: 1.1.15 - is-weakref: 1.1.1 - math-intrinsics: 1.1.0 - object-inspect: 1.13.4 - object-keys: 1.1.1 - object.assign: 4.1.7 - own-keys: 1.0.1 - regexp.prototype.flags: 1.5.4 - safe-array-concat: 1.1.3 - safe-push-apply: 1.0.0 - safe-regex-test: 1.1.0 - set-proto: 1.0.0 - stop-iteration-iterator: 1.1.0 - string.prototype.trim: 1.2.10 - string.prototype.trimend: 1.0.9 - string.prototype.trimstart: 1.0.8 - typed-array-buffer: 1.0.3 - typed-array-byte-length: 1.0.3 - typed-array-byte-offset: 1.0.4 - typed-array-length: 1.0.7 - unbox-primitive: 1.1.0 - which-typed-array: 1.1.19 - es-define-property@1.0.1: {} es-errors@1.3.0: {} @@ -14210,25 +13156,6 @@ snapshots: isarray: 2.0.5 stop-iteration-iterator: 1.1.0 - es-iterator-helpers@1.2.1: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-errors: 1.3.0 - es-set-tostringtag: 2.1.0 - function-bind: 1.1.2 - get-intrinsic: 1.3.0 - globalthis: 1.0.4 - gopd: 1.2.0 - has-property-descriptors: 1.0.2 - has-proto: 1.2.0 - has-symbols: 1.1.0 - internal-slot: 1.1.0 - iterator.prototype: 1.1.5 - safe-array-concat: 1.1.3 - es-object-atoms@1.1.1: dependencies: es-errors: 1.3.0 @@ -14240,16 +13167,6 @@ snapshots: has-tostringtag: 1.0.2 hasown: 2.0.2 - es-shim-unscopables@1.1.0: - dependencies: - hasown: 2.0.2 - - es-to-primitive@1.3.0: - dependencies: - is-callable: 1.2.7 - is-date-object: 1.1.0 - is-symbol: 1.1.1 - es-toolkit@1.33.0: {} esbuild@0.25.10: @@ -14285,8 +13202,6 @@ snapshots: escape-string-regexp@2.0.0: {} - escape-string-regexp@4.0.0: {} - escodegen@2.1.0: dependencies: esprima: 4.0.1 @@ -14295,196 +13210,8 @@ snapshots: optionalDependencies: source-map: 0.6.1 - eslint-import-resolver-node@0.3.9: - dependencies: - debug: 3.2.7 - is-core-module: 2.16.1 - resolve: 1.22.10 - transitivePeerDependencies: - - supports-color - - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.48.1(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint@8.57.1): - dependencies: - debug: 3.2.7 - optionalDependencies: - '@typescript-eslint/parser': 8.48.1(eslint@8.57.1)(typescript@5.6.3) - eslint: 8.57.1 - eslint-import-resolver-node: 0.3.9 - transitivePeerDependencies: - - supports-color - - eslint-plugin-cypress@2.15.2(eslint@8.57.1): - dependencies: - eslint: 8.57.1 - globals: 13.24.0 - - eslint-plugin-import@2.27.5(@typescript-eslint/parser@8.48.1(eslint@8.57.1)(typescript@5.6.3))(eslint@8.57.1): - dependencies: - array-includes: 3.1.9 - array.prototype.flat: 1.3.3 - array.prototype.flatmap: 1.3.3 - debug: 3.2.7 - doctrine: 2.1.0 - eslint: 8.57.1 - eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.48.1(eslint@8.57.1)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint@8.57.1) - has: 1.0.4 - is-core-module: 2.16.1 - is-glob: 4.0.3 - minimatch: 3.1.2 - object.values: 1.2.1 - resolve: 1.22.10 - semver: 6.3.1 - tsconfig-paths: 3.15.0 - optionalDependencies: - '@typescript-eslint/parser': 8.48.1(eslint@8.57.1)(typescript@5.6.3) - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - - eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@8.48.1(@typescript-eslint/parser@8.48.1(eslint@8.57.1)(typescript@5.6.3))(eslint@8.57.1)(typescript@5.6.3))(eslint@8.57.1)(jest@29.7.0(@types/node@22.17.2))(typescript@5.6.3): - dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.6.3) - eslint: 8.57.1 - optionalDependencies: - '@typescript-eslint/eslint-plugin': 8.48.1(@typescript-eslint/parser@8.48.1(eslint@8.57.1)(typescript@5.6.3))(eslint@8.57.1)(typescript@5.6.3) - jest: 29.7.0(@types/node@22.17.2) - transitivePeerDependencies: - - supports-color - - typescript - - eslint-plugin-jsx-a11y@6.8.0(eslint@8.57.1): - dependencies: - '@babel/runtime': 7.28.3 - aria-query: 5.3.2 - array-includes: 3.1.9 - array.prototype.flatmap: 1.3.3 - ast-types-flow: 0.0.8 - axe-core: 4.7.0 - axobject-query: 3.2.4 - damerau-levenshtein: 1.0.8 - emoji-regex: 9.2.2 - es-iterator-helpers: 1.2.1 - eslint: 8.57.1 - hasown: 2.0.2 - jsx-ast-utils: 3.3.5 - language-tags: 1.0.9 - minimatch: 3.1.2 - object.entries: 1.1.9 - object.fromentries: 2.0.8 - - eslint-plugin-react-hooks@4.6.0(eslint@8.57.1): - dependencies: - eslint: 8.57.1 - - eslint-plugin-react-perf@3.3.3(eslint@8.57.1): - dependencies: - eslint: 8.57.1 - - eslint-plugin-react@7.33.2(eslint@8.57.1): - dependencies: - array-includes: 3.1.9 - array.prototype.flatmap: 1.3.3 - array.prototype.tosorted: 1.1.4 - doctrine: 2.1.0 - es-iterator-helpers: 1.2.1 - eslint: 8.57.1 - estraverse: 5.3.0 - jsx-ast-utils: 3.3.5 - minimatch: 3.1.2 - object.entries: 1.1.9 - object.fromentries: 2.0.8 - object.hasown: 1.1.4 - object.values: 1.2.1 - prop-types: 15.8.1 - resolve: 2.0.0-next.5 - semver: 6.3.1 - string.prototype.matchall: 4.0.12 - - eslint-plugin-relay@1.8.3: - dependencies: - graphql: 14.7.0 - - eslint-plugin-simple-import-sort@8.0.0(eslint@8.57.1): - dependencies: - eslint: 8.57.1 - - eslint-scope@5.1.1: - dependencies: - esrecurse: 4.3.0 - estraverse: 4.3.0 - - eslint-scope@7.2.2: - dependencies: - esrecurse: 4.3.0 - estraverse: 5.3.0 - - eslint-visitor-keys@3.4.3: {} - - eslint-visitor-keys@4.2.1: {} - - eslint@8.57.1: - dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@8.57.1) - '@eslint-community/regexpp': 4.12.1 - '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.57.1 - '@humanwhocodes/config-array': 0.13.0 - '@humanwhocodes/module-importer': 1.0.1 - '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.3.0 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.6 - debug: 4.4.1 - doctrine: 3.0.0 - escape-string-regexp: 4.0.0 - eslint-scope: 7.2.2 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 - esquery: 1.6.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 - find-up: 5.0.0 - glob-parent: 6.0.2 - globals: 13.24.0 - graphemer: 1.4.0 - ignore: 5.3.2 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - is-path-inside: 3.0.3 - js-yaml: 4.1.0 - json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 - natural-compare: 1.4.0 - optionator: 0.9.4 - strip-ansi: 6.0.1 - text-table: 0.2.0 - transitivePeerDependencies: - - supports-color - - espree@9.6.1: - dependencies: - acorn: 8.15.0 - acorn-jsx: 5.3.2(acorn@8.15.0) - eslint-visitor-keys: 3.4.3 - esprima@4.0.1: {} - esquery@1.6.0: - dependencies: - estraverse: 5.3.0 - - esrecurse@4.3.0: - dependencies: - estraverse: 5.3.0 - - estraverse@4.3.0: {} - estraverse@5.3.0: {} esutils@2.0.3: {} @@ -14616,8 +13343,6 @@ snapshots: fast-json-stable-stringify@2.1.0: {} - fast-levenshtein@2.0.6: {} - fast-redact@3.5.0: {} fast-safe-stringify@2.1.1: {} @@ -14634,18 +13359,10 @@ snapshots: dependencies: bser: 2.1.1 - fdir@6.5.0(picomatch@4.0.3): - optionalDependencies: - picomatch: 4.0.3 - file-entry-cache@10.1.4: dependencies: flat-cache: 6.1.13 - file-entry-cache@6.0.1: - dependencies: - flat-cache: 3.2.0 - fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 @@ -14657,17 +13374,6 @@ snapshots: locate-path: 5.0.0 path-exists: 4.0.0 - find-up@5.0.0: - dependencies: - locate-path: 6.0.0 - path-exists: 4.0.0 - - flat-cache@3.2.0: - dependencies: - flatted: 3.3.3 - keyv: 4.5.4 - rimraf: 3.0.2 - flat-cache@6.1.13: dependencies: cacheable: 1.10.4 @@ -14713,15 +13419,6 @@ snapshots: function-bind@1.1.2: {} - function.prototype.name@1.1.8: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - functions-have-names: 1.2.3 - hasown: 2.0.2 - is-callable: 1.2.7 - functions-have-names@1.2.3: {} gensync@1.0.0-beta.2: {} @@ -14752,12 +13449,6 @@ snapshots: get-stream@6.0.1: {} - get-symbol-description@1.1.0: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - get-tsconfig@4.10.1: dependencies: resolve-pkg-maps: 1.0.0 @@ -14804,15 +13495,6 @@ snapshots: kind-of: 6.0.3 which: 1.3.1 - globals@13.24.0: - dependencies: - type-fest: 0.20.2 - - globalthis@1.0.4: - dependencies: - define-properties: 1.2.1 - gopd: 1.2.0 - globby@11.1.0: dependencies: array-union: 2.1.0 @@ -14828,8 +13510,6 @@ snapshots: graceful-fs@4.2.11: {} - graphemer@1.4.0: {} - graphql-request@6.1.0(graphql@16.11.0): dependencies: '@graphql-typed-document-node/core': 3.2.0(graphql@16.11.0) @@ -14838,10 +13518,6 @@ snapshots: transitivePeerDependencies: - encoding - graphql@14.7.0: - dependencies: - iterall: 1.3.0 - graphql@16.11.0: {} h3@1.15.4: @@ -14875,18 +13551,12 @@ snapshots: dependencies: es-define-property: 1.0.1 - has-proto@1.2.0: - dependencies: - dunder-proto: 1.0.1 - has-symbols@1.1.0: {} has-tostringtag@1.0.2: dependencies: has-symbols: 1.1.0 - has@1.0.4: {} - hash.js@1.1.7: dependencies: inherits: 2.0.4 @@ -15065,14 +13735,6 @@ snapshots: is-arrayish@0.3.2: {} - is-async-function@2.1.1: - dependencies: - async-function: 1.0.0 - call-bound: 1.0.4 - get-proto: 1.0.1 - has-tostringtag: 1.0.2 - safe-regex-test: 1.1.0 - is-bigint@1.1.0: dependencies: has-bigints: 1.1.0 @@ -15092,12 +13754,6 @@ snapshots: dependencies: hasown: 2.0.2 - is-data-view@1.0.2: - dependencies: - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - is-typed-array: 1.1.15 - is-date-object@1.1.0: dependencies: call-bound: 1.0.4 @@ -15105,10 +13761,6 @@ snapshots: is-extglob@2.1.1: {} - is-finalizationregistry@1.1.1: - dependencies: - call-bound: 1.0.4 - is-fullwidth-code-point@3.0.0: {} is-generator-fn@2.1.0: {} @@ -15126,8 +13778,6 @@ snapshots: is-map@2.0.3: {} - is-negative-zero@2.0.3: {} - is-number-object@1.1.1: dependencies: call-bound: 1.0.4 @@ -15135,8 +13785,6 @@ snapshots: is-number@7.0.0: {} - is-path-inside@3.0.3: {} - is-plain-obj@4.1.0: {} is-plain-object@5.0.0: {} @@ -15175,10 +13823,6 @@ snapshots: is-weakmap@2.0.2: {} - is-weakref@1.1.1: - dependencies: - call-bound: 1.0.4 - is-weakset@2.0.4: dependencies: call-bound: 1.0.4 @@ -15239,17 +13883,6 @@ snapshots: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 - iterall@1.3.0: {} - - iterator.prototype@1.1.5: - dependencies: - define-data-property: 1.1.4 - es-object-atoms: 1.1.1 - get-intrinsic: 1.3.0 - get-proto: 1.0.1 - has-symbols: 1.1.0 - set-function-name: 2.0.2 - jackspeak@3.4.3: dependencies: '@isaacs/cliui': 8.0.2 @@ -15640,8 +14273,6 @@ snapshots: jsesc@3.1.0: {} - json-buffer@3.0.1: {} - json-parse-even-better-errors@2.3.1: {} json-rpc-engine@6.1.0: @@ -15651,37 +14282,18 @@ snapshots: json-rpc-random-id@1.0.1: {} - json-schema-traverse@0.4.1: {} - json-schema-traverse@1.0.0: {} - json-stable-stringify-without-jsonify@1.0.1: {} - - json5@1.0.2: - dependencies: - minimist: 1.2.8 - json5@2.2.3: {} jsonc-parser@3.3.1: {} - jsx-ast-utils@3.3.5: - dependencies: - array-includes: 3.1.9 - array.prototype.flat: 1.3.3 - object.assign: 4.1.7 - object.values: 1.2.1 - keccak@3.0.4: dependencies: node-addon-api: 2.0.2 node-gyp-build: 4.8.4 readable-stream: 3.6.2 - keyv@4.5.4: - dependencies: - json-buffer: 3.0.1 - keyv@5.5.0: dependencies: '@keyv/serialize': 1.1.0 @@ -15694,19 +14306,8 @@ snapshots: known-css-properties@0.37.0: {} - language-subtag-registry@0.3.23: {} - - language-tags@1.0.9: - dependencies: - language-subtag-registry: 0.3.23 - leven@3.1.0: {} - levn@0.4.1: - dependencies: - prelude-ls: 1.2.1 - type-check: 0.4.0 - lilconfig@3.1.3: {} lines-and-columns@1.2.4: {} @@ -15735,18 +14336,12 @@ snapshots: dependencies: p-locate: 4.1.0 - locate-path@6.0.0: - dependencies: - p-locate: 5.0.0 - lodash.debounce@4.0.8: {} lodash.isplainobject@4.0.6: {} lodash.memoize@4.1.2: {} - lodash.merge@4.6.2: {} - lodash.mergewith@4.6.2: {} lodash.truncate@4.4.2: {} @@ -16116,33 +14711,6 @@ snapshots: has-symbols: 1.1.0 object-keys: 1.1.1 - object.entries@1.1.9: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 - - object.fromentries@2.0.8: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-object-atoms: 1.1.1 - - object.hasown@1.1.4: - dependencies: - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-object-atoms: 1.1.1 - - object.values@1.2.1: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 - ofetch@1.4.1: dependencies: destr: 2.0.5 @@ -16161,21 +14729,6 @@ snapshots: dependencies: mimic-fn: 2.1.0 - optionator@0.9.4: - dependencies: - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.4.1 - prelude-ls: 1.2.1 - type-check: 0.4.0 - word-wrap: 1.2.5 - - own-keys@1.0.1: - dependencies: - get-intrinsic: 1.3.0 - object-keys: 1.1.1 - safe-push-apply: 1.0.0 - ox@0.6.7(typescript@5.6.3)(zod@3.25.76): dependencies: '@adraffy/ens-normalize': 1.11.0 @@ -16246,10 +14799,6 @@ snapshots: dependencies: p-limit: 2.3.0 - p-locate@5.0.0: - dependencies: - p-limit: 3.1.0 - p-try@2.2.0: {} package-json-from-dist@1.0.1: {} @@ -16305,8 +14854,6 @@ snapshots: picomatch@2.3.1: {} - picomatch@4.0.3: {} - pify@2.3.0: {} pify@3.0.0: {} @@ -16436,20 +14983,6 @@ snapshots: preact@10.27.1: {} - prelude-ls@1.2.1: {} - - prettier-plugin-solidity@1.4.3(prettier@3.0.3): - dependencies: - '@solidity-parser/parser': 0.20.2 - prettier: 3.0.3 - semver: 7.7.2 - - prettier-plugin-tailwindcss@0.5.14(prettier@3.0.3): - dependencies: - prettier: 3.0.3 - - prettier@3.0.3: {} - pretty-format@27.5.1: dependencies: ansi-regex: 5.0.1 @@ -16685,17 +15218,6 @@ snapshots: indent-string: 4.0.0 strip-indent: 3.0.0 - reflect.getprototypeof@1.0.10: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - get-intrinsic: 1.3.0 - get-proto: 1.0.1 - which-builtin-type: 1.2.1 - regenerate-unicode-properties@10.2.0: dependencies: regenerate: 1.4.2 @@ -16791,39 +15313,16 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - resolve@2.0.0-next.5: - dependencies: - is-core-module: 2.16.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - reusify@1.1.0: {} - rimraf@3.0.2: - dependencies: - glob: 7.2.3 - run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 - safe-array-concat@1.1.3: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - has-symbols: 1.1.0 - isarray: 2.0.5 - safe-buffer@5.1.2: {} safe-buffer@5.2.1: {} - safe-push-apply@1.0.0: - dependencies: - es-errors: 1.3.0 - isarray: 2.0.5 - safe-regex-test@1.1.0: dependencies: call-bound: 1.0.4 @@ -16872,12 +15371,6 @@ snapshots: functions-have-names: 1.2.3 has-property-descriptors: 1.0.2 - set-proto@1.0.0: - dependencies: - dunder-proto: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - sha.js@2.4.12: dependencies: inherits: 2.0.4 @@ -17071,45 +15564,6 @@ snapshots: emoji-regex: 9.2.2 strip-ansi: 7.1.0 - string.prototype.matchall@4.0.12: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - get-intrinsic: 1.3.0 - gopd: 1.2.0 - has-symbols: 1.1.0 - internal-slot: 1.1.0 - regexp.prototype.flags: 1.5.4 - set-function-name: 2.0.2 - side-channel: 1.1.0 - - string.prototype.trim@1.2.10: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-data-property: 1.1.4 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-object-atoms: 1.1.1 - has-property-descriptors: 1.0.2 - - string.prototype.trimend@1.0.9: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 - - string.prototype.trimstart@1.0.8: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 - string_decoder@1.1.1: dependencies: safe-buffer: 5.1.2 @@ -17131,8 +15585,6 @@ snapshots: dependencies: ansi-regex: 6.2.0 - strip-bom@3.0.0: {} - strip-bom@4.0.0: {} strip-final-newline@2.0.0: {} @@ -17302,8 +15754,6 @@ snapshots: glob: 7.2.3 minimatch: 3.1.2 - text-table@0.2.0: {} - thenify-all@1.6.0: dependencies: thenify: 3.3.1 @@ -17320,11 +15770,6 @@ snapshots: tinyexec@1.0.2: {} - tinyglobby@0.2.15: - dependencies: - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 - tmpl@1.0.5: {} to-buffer@1.2.1: @@ -17361,10 +15806,6 @@ snapshots: '@trpc/server': 11.7.2(typescript@5.6.3) zod: 4.1.13 - ts-api-utils@2.1.0(typescript@5.6.3): - dependencies: - typescript: 5.6.3 - ts-interface-checker@0.1.13: {} ts-jest@29.4.1(@babel/core@7.28.3)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.3))(jest-util@29.7.0)(jest@29.7.0(@types/node@22.17.2))(typescript@5.6.3): @@ -17387,22 +15828,10 @@ snapshots: babel-jest: 29.7.0(@babel/core@7.28.3) jest-util: 29.7.0 - tsconfig-paths@3.15.0: - dependencies: - '@types/json5': 0.0.29 - json5: 1.0.2 - minimist: 1.2.8 - strip-bom: 3.0.0 - tslib@1.14.1: {} tslib@2.8.1: {} - tsutils@3.21.0(typescript@5.6.3): - dependencies: - tslib: 1.14.1 - typescript: 5.6.3 - tsx@4.20.5: dependencies: esbuild: 0.25.10 @@ -17410,14 +15839,8 @@ snapshots: optionalDependencies: fsevents: 2.3.3 - type-check@0.4.0: - dependencies: - prelude-ls: 1.2.1 - type-detect@4.0.8: {} - type-fest@0.20.2: {} - type-fest@0.21.3: {} type-fest@4.41.0: {} @@ -17428,33 +15851,6 @@ snapshots: es-errors: 1.3.0 is-typed-array: 1.1.15 - typed-array-byte-length@1.0.3: - dependencies: - call-bind: 1.0.8 - for-each: 0.3.5 - gopd: 1.2.0 - has-proto: 1.2.0 - is-typed-array: 1.1.15 - - typed-array-byte-offset@1.0.4: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.8 - for-each: 0.3.5 - gopd: 1.2.0 - has-proto: 1.2.0 - is-typed-array: 1.1.15 - reflect.getprototypeof: 1.0.10 - - typed-array-length@1.0.7: - dependencies: - call-bind: 1.0.8 - for-each: 0.3.5 - gopd: 1.2.0 - is-typed-array: 1.1.15 - possible-typed-array-names: 1.1.0 - reflect.getprototypeof: 1.0.10 - typescript@5.6.3: {} ua-parser-js@1.0.40: {} @@ -17485,13 +15881,6 @@ snapshots: - typescript - valibot - unbox-primitive@1.1.0: - dependencies: - call-bound: 1.0.4 - has-bigints: 1.1.0 - has-symbols: 1.1.0 - which-boxed-primitive: 1.1.1 - uncrypto@0.1.3: {} undici-types@6.21.0: {} @@ -17561,10 +15950,6 @@ snapshots: escalade: 3.2.0 picocolors: 1.1.1 - uri-js@4.4.1: - dependencies: - punycode: 2.3.1 - url-parse@1.5.10: dependencies: querystringify: 2.2.0 @@ -17808,22 +16193,6 @@ snapshots: is-string: 1.1.1 is-symbol: 1.1.1 - which-builtin-type@1.2.1: - dependencies: - call-bound: 1.0.4 - function.prototype.name: 1.1.8 - has-tostringtag: 1.0.2 - is-async-function: 2.1.1 - is-date-object: 1.1.0 - is-finalizationregistry: 1.1.1 - is-generator-function: 1.1.0 - is-regex: 1.2.1 - is-weakref: 1.1.1 - isarray: 2.0.5 - which-boxed-primitive: 1.1.1 - which-collection: 1.0.2 - which-typed-array: 1.1.19 - which-collection@1.0.2: dependencies: is-map: 2.0.3 @@ -17851,8 +16220,6 @@ snapshots: dependencies: isexe: 2.0.0 - word-wrap@1.2.5: {} - wordwrap@1.0.0: {} wrap-ansi@6.2.0: diff --git a/scripts/generate-redstone-data.ts b/scripts/generate-redstone-data.ts index 36c2e74c..0be1ac8e 100644 --- a/scripts/generate-redstone-data.ts +++ b/scripts/generate-redstone-data.ts @@ -98,10 +98,10 @@ const FUNDAMENTAL_TO_UNDERLYING_MAPPING: Record = { * For STANDARD feeds: Returns token/usd pair (e.g., "btc/usd") * * @param feedName - The raw feed name from Redstone config - * @param isFundamental - Whether this is a fundamental (contract rate) feed + * @param isFundamentalFeed - Whether this is a fundamental (contract rate) feed * @returns The normalized path in format "base/quote" */ -const generatePath = (feedName: string, isFundamental: boolean): string => { +const generatePath = (feedName: string, isFundamentalFeed: boolean): string => { // Check if the feed already contains a pair (e.g., "eBTC/WBTC" or "stHYPE/HYPE") if (feedName.includes('/')) { return feedName.toLowerCase(); @@ -117,7 +117,7 @@ const generatePath = (feedName: string, isFundamental: boolean): string => { const baseNameLower = baseName.toLowerCase(); - if (isFundamental) { + if (isFundamentalFeed) { // For FUNDAMENTAL feeds, find the underlying asset the derivative tracks // e.g., wstETH (derivative) tracks its exchange rate to ETH (underlying) const underlyingAsset = FUNDAMENTAL_TO_UNDERLYING_MAPPING[baseNameLower]; diff --git a/src/components/Input/Input.tsx b/src/components/Input/Input.tsx index 1a84731a..cccd0aad 100644 --- a/src/components/Input/Input.tsx +++ b/src/components/Input/Input.tsx @@ -58,11 +58,9 @@ export default function Input({ setValue(inputBigInt); if (setError) setError(null); - - // eslint-disable-next-line @typescript-eslint/no-shadow - } catch (e) { + } catch (err) { if (setError) setError('Invalid input'); - console.log('e', e); + console.log('e', err); } }, [decimals, setError, setInputAmount, setValue, max, exceedMaxErrMessage, allowExceedMax, bypassMax], diff --git a/src/components/layout/header/ListItem.tsx b/src/components/layout/header/ListItem.tsx index 105509c9..efa3eb4a 100644 --- a/src/components/layout/header/ListItem.tsx +++ b/src/components/layout/header/ListItem.tsx @@ -2,7 +2,7 @@ import { forwardRef } from 'react'; import * as NavigationMenu from '@radix-ui/react-navigation-menu'; import { clsx } from 'clsx'; -export const ListItem = forwardRef(function ListItem( +export const ListItem = forwardRef(function ListItemComponent( { children, target, diff --git a/src/hooks/useUserBalances.ts b/src/hooks/useUserBalances.ts index db794115..ea4cc05c 100644 --- a/src/hooks/useUserBalances.ts +++ b/src/hooks/useUserBalances.ts @@ -43,7 +43,7 @@ export function useUserBalances(options: UseUserBalancesOptions = {}) { if (!response.ok) { const errorMessage = await response .json() - .then((data) => (data?.error as string | undefined) ?? 'Failed to fetch balances') + .then((errorData) => (errorData?.error as string | undefined) ?? 'Failed to fetch balances') .catch(() => 'Failed to fetch balances'); throw new Error(errorMessage); } diff --git a/src/hooks/useVaultV2.ts b/src/hooks/useVaultV2.ts index c949a11b..8b82e2ea 100644 --- a/src/hooks/useVaultV2.ts +++ b/src/hooks/useVaultV2.ts @@ -230,11 +230,11 @@ export function useVaultV2({ ); const updateNameAndSymbol = useCallback( - async ({ name, symbol }: { name?: string; symbol?: string }): Promise => { + async ({ name: newName, symbol: newSymbol }: { name?: string; symbol?: string }): Promise => { if (!account || !vaultAddress) return false; - const nextName = name?.trim(); - const nextSymbol = symbol?.trim(); + const nextName = newName?.trim(); + const nextSymbol = newSymbol?.trim(); const calls: `0x${string}`[] = []; From 198224e6205a47b3ca9752b44509327ccdf99e78 Mon Sep 17 00:00:00 2001 From: antoncoding Date: Tue, 9 Dec 2025 00:30:08 +0800 Subject: [PATCH 06/12] misc: feedback reviews --- src/utils/gtag.ts | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/utils/gtag.ts b/src/utils/gtag.ts index c626ffff..f67958bc 100644 --- a/src/utils/gtag.ts +++ b/src/utils/gtag.ts @@ -10,15 +10,26 @@ export const logPageview = (url: string) => { if (!isClient()) { return; } + const gtag = (window as WindowWithGtag).gtag; + if (!gtag) { + return; + } // eslint-disable-next-line @typescript-eslint/no-unsafe-call - (window as WindowWithGtag).gtag('config', GOOGLE_ANALYTICS_ID, { + gtag('config', GOOGLE_ANALYTICS_ID, { page_path: url, }); }; export const logEvent = ({ action, category, label, value }: { action: string; category: string; label: string; value: number }) => { + if (!isClient()) { + return; + } + const gtag = (window as WindowWithGtag).gtag; + if (!gtag) { + return; + } // eslint-disable-next-line @typescript-eslint/no-unsafe-call - (window as WindowWithGtag).gtag('event', action, { + gtag('event', action, { event_category: category, event_label: label, value: value, From b30c4800f4eb4337ee90a1ef364041ee7eb81848 Mon Sep 17 00:00:00 2001 From: antoncoding Date: Tue, 9 Dec 2025 00:38:45 +0800 Subject: [PATCH 07/12] fix: at(-1) --- app/market/[chainId]/[marketid]/VolumeChart.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/market/[chainId]/[marketid]/VolumeChart.tsx b/app/market/[chainId]/[marketid]/VolumeChart.tsx index 530f337c..ac89b425 100644 --- a/app/market/[chainId]/[marketid]/VolumeChart.tsx +++ b/app/market/[chainId]/[marketid]/VolumeChart.tsx @@ -99,7 +99,10 @@ function VolumeChart({ const data = volumeView === 'USD' ? historicalData?.[`${type}AssetsUsd`] : historicalData?.[`${type}Assets`]; if (!data || data.length === 0) return { current: 0, netChange: 0, netChangePercentage: 0 }; - const current = volumeView === 'USD' ? data[-1].y : Number(formatUnits(BigInt(data[-1].y), market.loanAsset.decimals)); + const current = + volumeView === 'USD' + ? (data.at(-1) as TimeseriesDataPoint).y + : Number(formatUnits(BigInt((data.at(-1) as TimeseriesDataPoint).y), market.loanAsset.decimals)); const start = volumeView === 'USD' ? data[0].y : Number(formatUnits(BigInt(data[0].y), market.loanAsset.decimals)); const netChange = current - start; const netChangePercentage = start !== 0 ? (netChange / start) * 100 : 0; From b4fc687d44b04bdd3c67d5b39bd15bc4db71af2e Mon Sep 17 00:00:00 2001 From: antoncoding Date: Tue, 9 Dec 2025 11:19:46 +0800 Subject: [PATCH 08/12] chore: no param changes --- app/positions/components/onboarding/SetupPositions.tsx | 4 +++- biome.jsonc | 5 +---- src/hooks/usePositionReport.ts | 4 +++- src/utils/balance.ts | 4 +++- 4 files changed, 10 insertions(+), 7 deletions(-) diff --git a/app/positions/components/onboarding/SetupPositions.tsx b/app/positions/components/onboarding/SetupPositions.tsx index 10b29616..dbef1446 100644 --- a/app/positions/components/onboarding/SetupPositions.tsx +++ b/app/positions/components/onboarding/SetupPositions.tsx @@ -93,7 +93,9 @@ export function SetupPositions() { ); const handlePercentageChange = useCallback( - (marketKey: string, newPercentage: number) => { + (marketKey: string, _newPercentage: number) => { + let newPercentage = _newPercentage; + // If the input is invalid (NaN), set it to 0 if (Number.isNaN(newPercentage)) { newPercentage = 0; diff --git a/biome.jsonc b/biome.jsonc index 22237776..9f881a29 100644 --- a/biome.jsonc +++ b/biome.jsonc @@ -41,14 +41,11 @@ // Team preference - allow some flexibility "useConsistentCurlyBraces": "off", - "noParameterAssign": "off", + // "noParameterAssign": "off", // Keep filenamingConvention disabled during migration "useFilenamingConvention": "off", - // Don't force default exports - "noDefaultExport": "off", - // Team uses enums "noEnum": "off", diff --git a/src/hooks/usePositionReport.ts b/src/hooks/usePositionReport.ts index 8fcf513b..038d2d2a 100644 --- a/src/hooks/usePositionReport.ts +++ b/src/hooks/usePositionReport.ts @@ -34,13 +34,15 @@ export const usePositionReport = ( account: Address, selectedAsset: { address: string; chainId: number } | null, startDate?: Date, - endDate?: Date, + _endDate?: Date, ) => { const { fetchTransactions } = useUserTransactions(); const { customRpcUrls } = useCustomRpc(); const generateReport = async (): Promise => { + let endDate = _endDate; + if (!startDate || !endDate || !selectedAsset) return null; if (endDate.getTime() > Date.now()) { diff --git a/src/utils/balance.ts b/src/utils/balance.ts index 37bec668..8ac6d512 100644 --- a/src/utils/balance.ts +++ b/src/utils/balance.ts @@ -22,7 +22,9 @@ export const formatBalance = (value: bigint | string, decimals: number) => { return Number(value) / 10 ** decimals; }; -export function formatReadable(num: number | string, precision = 2): string { +export function formatReadable(_num: number | string, precision = 2): string { + let num = _num; + if (typeof num === 'string') { const parsed = Number.parseFloat(num); if (isNaN(parsed)) return num; From b895b5ed9bd541c34840dd67a37e2773caeaaf52 Mon Sep 17 00:00:00 2001 From: antoncoding Date: Tue, 9 Dec 2025 11:22:57 +0800 Subject: [PATCH 09/12] chore: no useless else --- app/admin/stats/components/AssetMetricsTable.tsx | 3 +-- app/admin/stats/components/TransactionsTable.tsx | 3 +-- app/api/block/route.ts | 2 -- app/market/[chainId]/[marketid]/VolumeChart.tsx | 3 +-- biome.jsonc | 6 +----- src/components/SupplyModalV2.tsx | 5 ++--- src/hooks/useUserTransactions.ts | 10 ++++------ src/utils/balance.ts | 9 +++++---- src/utils/external.ts | 3 ++- 9 files changed, 17 insertions(+), 27 deletions(-) diff --git a/app/admin/stats/components/AssetMetricsTable.tsx b/app/admin/stats/components/AssetMetricsTable.tsx index df7790db..1ddd279f 100644 --- a/app/admin/stats/components/AssetMetricsTable.tsx +++ b/app/admin/stats/components/AssetMetricsTable.tsx @@ -78,9 +78,8 @@ export function AssetMetricsTable({ data }: AssetMetricsTableProps) { if (sortDirection === 'asc') { return valueA < valueB ? -1 : valueA > valueB ? 1 : 0; - } else { - return valueA > valueB ? -1 : valueA < valueB ? 1 : 0; } + return valueA > valueB ? -1 : valueA < valueB ? 1 : 0; }); }, [processedData, sortKey, sortDirection]); diff --git a/app/admin/stats/components/TransactionsTable.tsx b/app/admin/stats/components/TransactionsTable.tsx index 4b991773..dfa3bc2c 100644 --- a/app/admin/stats/components/TransactionsTable.tsx +++ b/app/admin/stats/components/TransactionsTable.tsx @@ -169,9 +169,8 @@ export function TransactionsTable({ if (sortDirection === 'asc') { return valueA < valueB ? -1 : valueA > valueB ? 1 : 0; - } else { - return valueA > valueB ? -1 : valueA < valueB ? 1 : 0; } + return valueA > valueB ? -1 : valueA < valueB ? 1 : 0; }); }, [filteredData, sortKey, sortDirection]); diff --git a/app/api/block/route.ts b/app/api/block/route.ts index e4fee497..129468e2 100644 --- a/app/api/block/route.ts +++ b/app/api/block/route.ts @@ -57,8 +57,6 @@ export async function GET(request: NextRequest) { blockNumber: Number(block.number), timestamp: Number(block.timestamp), }); - } else { - console.log('etherscanBlock is null', timestamp, chainId); } if (!client) { diff --git a/app/market/[chainId]/[marketid]/VolumeChart.tsx b/app/market/[chainId]/[marketid]/VolumeChart.tsx index ac89b425..075a21e8 100644 --- a/app/market/[chainId]/[marketid]/VolumeChart.tsx +++ b/app/market/[chainId]/[marketid]/VolumeChart.tsx @@ -35,9 +35,8 @@ function VolumeChart({ const formatYAxis = (value: number) => { if (volumeView === 'USD') { return `$${formatReadable(value)}`; - } else { - return formatReadable(value); } + return formatReadable(value); }; const formatTime = (unixTime: number) => { diff --git a/biome.jsonc b/biome.jsonc index 9f881a29..73d9e5ea 100644 --- a/biome.jsonc +++ b/biome.jsonc @@ -41,7 +41,6 @@ // Team preference - allow some flexibility "useConsistentCurlyBraces": "off", - // "noParameterAssign": "off", // Keep filenamingConvention disabled during migration "useFilenamingConvention": "off", @@ -55,11 +54,8 @@ // Team allows non-null assertions when needed "noNonNullAssertion": "off", - // Allow parameter properties (TS) - "noParameterProperties": "off", - // Don't enforce during migration - too opinionated - "noUselessElse": "off", + // "noUselessElse": "off", "noNegationElse": "off", "useCollapsedElseIf": "off", diff --git a/src/components/SupplyModalV2.tsx b/src/components/SupplyModalV2.tsx index 469f06d6..0f36e96b 100644 --- a/src/components/SupplyModalV2.tsx +++ b/src/components/SupplyModalV2.tsx @@ -47,10 +47,9 @@ export function SupplyModalV2({ if (mode === 'supply') { // Supply mode: positive delta if amount is valid return supplyPreviewAmount && supplyPreviewAmount > 0n ? supplyPreviewAmount : undefined; - } else { - // Withdraw mode: negative delta (withdrawal) if amount is valid - return withdrawPreviewAmount && withdrawPreviewAmount > 0n ? -withdrawPreviewAmount : undefined; } + // Withdraw mode: negative delta (withdrawal) if amount is valid + return withdrawPreviewAmount && withdrawPreviewAmount > 0n ? -withdrawPreviewAmount : undefined; }, [mode, supplyPreviewAmount, withdrawPreviewAmount]); return ( diff --git a/src/hooks/useUserTransactions.ts b/src/hooks/useUserTransactions.ts index bbd7483f..912f5a71 100644 --- a/src/hooks/useUserTransactions.ts +++ b/src/hooks/useUserTransactions.ts @@ -99,10 +99,9 @@ const useUserTransactions = () => { }, error: null, }; - } else { - networkError = morphoResponse.error; - console.warn(`Error from Morpho API for network ${network}:`, networkError); } + networkError = morphoResponse.error; + console.warn(`Error from Morpho API for network ${network}:`, networkError); } catch (morphoError) { console.error(`Failed to fetch from Morpho API for network ${network}:`, morphoError); networkError = `Failed to fetch from Morpho API: ${(morphoError as Error)?.message || 'Unknown error'}`; @@ -131,10 +130,9 @@ const useUserTransactions = () => { }, error: null, }; - } else { - networkError = subgraphResponse.error; - console.warn(`Error from Subgraph for network ${network}:`, networkError); } + networkError = subgraphResponse.error; + console.warn(`Error from Subgraph for network ${network}:`, networkError); } catch (subgraphError) { console.error(`Failed to fetch from Subgraph for network ${network}:`, subgraphError); networkError = `Failed to fetch from Subgraph: ${(subgraphError as Error)?.message || 'Unknown error'}`; diff --git a/src/utils/balance.ts b/src/utils/balance.ts index 8ac6d512..c0b6261e 100644 --- a/src/utils/balance.ts +++ b/src/utils/balance.ts @@ -34,13 +34,14 @@ export function formatReadable(_num: number | string, precision = 2): string { try { if (Math.abs(num) >= 1_000_000_000) { return `${(num / 1_000_000_000).toFixed(2)}B`; - } else if (Math.abs(num) >= 1_000_000) { + } + if (Math.abs(num) >= 1_000_000) { return `${(num / 1_000_000).toFixed(2)}M`; - } else if (Math.abs(num) >= 1000) { + } + if (Math.abs(num) >= 1000) { return `${(num / 1000).toFixed(2)}K`; - } else { - return num.toFixed(precision); } + return num.toFixed(precision); } catch (e) { console.log('Error formatting number', e, typeof num); return num.toString(); diff --git a/src/utils/external.ts b/src/utils/external.ts index a95579bb..224e2923 100644 --- a/src/utils/external.ts +++ b/src/utils/external.ts @@ -4,7 +4,8 @@ const getMorphoNetworkSlug = (chainId: number): string | undefined => { const network = getNetworkName(chainId)?.toLowerCase(); if (chainId === SupportedNetworks.HyperEVM) { return 'hyperevm'; - } else if (chainId === SupportedNetworks.Mainnet) { + } + if (chainId === SupportedNetworks.Mainnet) { return 'ethereum'; } return network; From 3207101337d7d8a38ec222422f5f70ad8253e340 Mon Sep 17 00:00:00 2001 From: antoncoding Date: Tue, 9 Dec 2025 11:30:11 +0800 Subject: [PATCH 10/12] chore: no negative if --- app/HomePage.tsx | 18 ++-- .../components/DepositToVaultModal.tsx | 10 +- .../components/settings/AgentsTab.tsx | 32 +++---- .../components/settings/CurrentCaps.tsx | 12 +-- app/positions/components/PositionsContent.tsx | 32 +++---- app/positions/components/RebalanceModal.tsx | 2 +- biome.jsonc | 3 +- .../Borrow/AddCollateralAndBorrow.tsx | 94 ++++++++++--------- .../Borrow/WithdrawCollateralAndRepay.tsx | 84 +++++++++-------- src/components/Status/LoadingScreen.tsx | 14 +-- src/components/SupplyModalContent.tsx | 10 +- src/components/WithdrawModalContent.tsx | 10 +- src/data-sources/subgraph/historical.ts | 4 +- src/hooks/useSupplyMarket.ts | 6 +- src/hooks/useVaultV2Deposit.ts | 6 +- src/utils/positions.ts | 6 -- 16 files changed, 169 insertions(+), 174 deletions(-) diff --git a/app/HomePage.tsx b/app/HomePage.tsx index 06bb2dd3..4b67ada3 100644 --- a/app/HomePage.tsx +++ b/app/HomePage.tsx @@ -102,15 +102,7 @@ function CustomTypingAnimation() { const timeout = setTimeout( () => { - if (!isDeleting) { - // Typing - if (displayText.length < targetText.length) { - setDisplayText(targetText.slice(0, displayText.length + 1)); - } else { - // Finished typing, pause - setIsPaused(true); - } - } else { + if (isDeleting) { // Deleting if (displayText.length > deleteToLength) { setDisplayText(displayText.slice(0, -1)); @@ -119,6 +111,14 @@ function CustomTypingAnimation() { setIsDeleting(false); setPhraseIndex(getNextPhraseIndex(phraseIndex)); } + } else { + // Typing + if (displayText.length < targetText.length) { + setDisplayText(targetText.slice(0, displayText.length + 1)); + } else { + // Finished typing, pause + setIsPaused(true); + } } }, isDeleting ? deletingSpeed : typingSpeed, diff --git a/app/autovault/[chainId]/[vaultAddress]/components/DepositToVaultModal.tsx b/app/autovault/[chainId]/[vaultAddress]/components/DepositToVaultModal.tsx index 5834493b..1e4aa2e7 100644 --- a/app/autovault/[chainId]/[vaultAddress]/components/DepositToVaultModal.tsx +++ b/app/autovault/[chainId]/[vaultAddress]/components/DepositToVaultModal.tsx @@ -87,11 +87,7 @@ export function DepositToVaultModal({ onClose={onClose} /> - {!isConnected ? ( -
- -
- ) : ( + {isConnected ? (
@@ -135,6 +131,10 @@ export function DepositToVaultModal({
+ ) : ( +
+ +
)}
diff --git a/app/autovault/[chainId]/[vaultAddress]/components/settings/AgentsTab.tsx b/app/autovault/[chainId]/[vaultAddress]/components/settings/AgentsTab.tsx index 2ece99bc..ab396af9 100644 --- a/app/autovault/[chainId]/[vaultAddress]/components/settings/AgentsTab.tsx +++ b/app/autovault/[chainId]/[vaultAddress]/components/settings/AgentsTab.tsx @@ -110,23 +110,7 @@ export function AgentsTab({ )} - {!isEditingAllocators ? ( - // Read-only view - allocators.length === 0 ? ( -

No allocators assigned

- ) : ( -
- {allocators.map((address) => ( -
- -
- ))} -
- ) - ) : ( + {isEditingAllocators ? ( // Edit mode
{allocators.length > 0 && ( @@ -202,6 +186,20 @@ export function AgentsTab({
+ ) : // Read-only view + allocators.length === 0 ? ( +

No allocators assigned

+ ) : ( +
+ {allocators.map((address) => ( +
+ +
+ ))} +
)} diff --git a/app/autovault/[chainId]/[vaultAddress]/components/settings/CurrentCaps.tsx b/app/autovault/[chainId]/[vaultAddress]/components/settings/CurrentCaps.tsx index 4a875e74..fe1f39e0 100644 --- a/app/autovault/[chainId]/[vaultAddress]/components/settings/CurrentCaps.tsx +++ b/app/autovault/[chainId]/[vaultAddress]/components/settings/CurrentCaps.tsx @@ -148,12 +148,7 @@ export function CurrentCaps({ existingCaps, isOwner, onStartEdit, chainId, vault - {!hasAnyCaps ? ( -
-

No caps configured yet

-

Set caps to control how agents allocate funds across markets

-
- ) : ( + {hasAnyCaps ? (
{/* Collateral Caps */} {collateralCapsWithMarkets.length > 0 && ( @@ -306,6 +301,11 @@ export function CurrentCaps({ existingCaps, isOwner, onStartEdit, chainId, vault ); })()}
+ ) : ( +
+

No caps configured yet

+

Set caps to control how agents allocate funds across markets

+
)} ); diff --git a/app/positions/components/PositionsContent.tsx b/app/positions/components/PositionsContent.tsx index 19ee4f04..b7b96324 100644 --- a/app/positions/components/PositionsContent.tsx +++ b/app/positions/components/PositionsContent.tsx @@ -157,7 +157,22 @@ export default function Positions() { message={loadingMessage} className="mt-10" /> - ) : !hasSuppliedMarkets ? ( + ) : hasSuppliedMarkets ? ( +
+ void refetch()} + isRefetching={isRefetching} + isLoadingEarnings={isEarningsLoading} + earningsPeriod={earningsPeriod} + setEarningsPeriod={setEarningsPeriod} + /> +
+ ) : (
- ) : ( -
- void refetch()} - isRefetching={isRefetching} - isLoadingEarnings={isEarningsLoading} - earningsPeriod={earningsPeriod} - setEarningsPeriod={setEarningsPeriod} - /> -
)} diff --git a/app/positions/components/RebalanceModal.tsx b/app/positions/components/RebalanceModal.tsx index 7452b523..492530c1 100644 --- a/app/positions/components/RebalanceModal.tsx +++ b/app/positions/components/RebalanceModal.tsx @@ -89,7 +89,7 @@ export function RebalanceModal({ groupedPosition, isOpen, onOpenChange, refetch, const toMarket = eligibleMarkets.find((m) => m.uniqueKey === selectedToMarketUniqueKey); if (!fromMarket || !toMarket) { - const errorMessage = `Invalid ${!fromMarket ? '"From" Market' : ''}${!toMarket ? '"To" Market' : ''}`; + const errorMessage = `Invalid ${fromMarket ? '' : '"From" Market'}${toMarket ? '' : '"To" Market'}`; toast.error('Invalid market selection', errorMessage); return null; diff --git a/biome.jsonc b/biome.jsonc index 73d9e5ea..4a5cf1ca 100644 --- a/biome.jsonc +++ b/biome.jsonc @@ -55,8 +55,7 @@ "noNonNullAssertion": "off", // Don't enforce during migration - too opinionated - // "noUselessElse": "off", - "noNegationElse": "off", + // "noNegationElse": "off", "useCollapsedElseIf": "off", // Object shorthand - disable for gentle migration diff --git a/src/components/Borrow/AddCollateralAndBorrow.tsx b/src/components/Borrow/AddCollateralAndBorrow.tsx index 9f802719..28af24c7 100644 --- a/src/components/Borrow/AddCollateralAndBorrow.tsx +++ b/src/components/Borrow/AddCollateralAndBorrow.tsx @@ -80,9 +80,7 @@ export function AddCollateralAndBorrow({ // Calculate current and new LTV whenever relevant values change useEffect(() => { - if (!currentPosition) { - setCurrentLTV(BigInt(0)); - } else { + if (currentPosition) { // Calculate current LTV from position data using oracle price const currentCollateralValue = (BigInt(currentPosition.state.collateral) * oraclePrice) / BigInt(10 ** 36); const currentBorrowValue = BigInt(currentPosition.state.borrowAssets || 0); @@ -93,6 +91,8 @@ export function AddCollateralAndBorrow({ } else { setCurrentLTV(BigInt(0)); } + } else { + setCurrentLTV(BigInt(0)); } }, [currentPosition, oraclePrice]); @@ -312,52 +312,54 @@ export function AddCollateralAndBorrow({ {/* Action Button */}
- {!isConnected ? ( + {isConnected ? ( + needSwitchChain ? ( + + ) : (!permit2Authorized && !useEth) || (!usePermit2Setting && !isApproved) ? ( + + ) : ( + + ) + ) : (
- ) : needSwitchChain ? ( - - ) : (!permit2Authorized && !useEth) || (!usePermit2Setting && !isApproved) ? ( - - ) : ( - )}
{(borrowAmount > 0n || collateralAmount > 0n) && ( diff --git a/src/components/Borrow/WithdrawCollateralAndRepay.tsx b/src/components/Borrow/WithdrawCollateralAndRepay.tsx index d5ef5fa4..d73696c7 100644 --- a/src/components/Borrow/WithdrawCollateralAndRepay.tsx +++ b/src/components/Borrow/WithdrawCollateralAndRepay.tsx @@ -102,9 +102,7 @@ export function WithdrawCollateralAndRepay({ // Calculate current and new LTV whenever relevant values change useEffect(() => { - if (!currentPosition) { - setCurrentLTV(BigInt(0)); - } else { + if (currentPosition) { // Calculate current LTV from position data using oracle price const currentCollateralValue = (BigInt(currentPosition.state.collateral) * oraclePrice) / BigInt(10 ** 36); const currentBorrowValue = BigInt(currentPosition.state.borrowAssets || 0); @@ -115,6 +113,8 @@ export function WithdrawCollateralAndRepay({ } else { setCurrentLTV(BigInt(0)); } + } else { + setCurrentLTV(BigInt(0)); } }, [currentPosition, oraclePrice]); @@ -301,47 +301,49 @@ export function WithdrawCollateralAndRepay({ className="flex justify-end" style={{ zIndex: 1 }} > - {!isConnected ? ( + {isConnected ? ( + needSwitchChain ? ( + + ) : ( + + ) + ) : (
- ) : needSwitchChain ? ( - - ) : ( - )}
{(withdrawAmount > 0n || repayAssets > 0n) && ( diff --git a/src/components/Status/LoadingScreen.tsx b/src/components/Status/LoadingScreen.tsx index 927f7e43..ea65d06e 100644 --- a/src/components/Status/LoadingScreen.tsx +++ b/src/components/Status/LoadingScreen.tsx @@ -62,19 +62,19 @@ function TypingAnimation({ phrases, singleMode = false }: { phrases: string[]; s const timeout = setTimeout( () => { - if (!isDeleting) { - if (displayText.length < targetText.length) { - setDisplayText(targetText.slice(0, displayText.length + 1)); - } else { - setIsPaused(true); - } - } else { + if (isDeleting) { if (displayText.length > 0) { setDisplayText(displayText.slice(0, -1)); } else { setIsDeleting(false); setPhraseIndex(getNextPhraseIndex(phraseIndex)); } + } else { + if (displayText.length < targetText.length) { + setDisplayText(targetText.slice(0, displayText.length + 1)); + } else { + setIsPaused(true); + } } }, isDeleting ? deletingSpeed : typingSpeed, diff --git a/src/components/SupplyModalContent.tsx b/src/components/SupplyModalContent.tsx index 94209a7d..f4621a2e 100644 --- a/src/components/SupplyModalContent.tsx +++ b/src/components/SupplyModalContent.tsx @@ -80,11 +80,7 @@ export function SupplyModalContent({ onClose, market, refetch, onAmountChange }: )} {!showProcessModal && (
- {!isConnected ? ( -
- -
- ) : ( + {isConnected ? ( <> {/* Supply Input Section */}
@@ -180,6 +176,10 @@ export function SupplyModalContent({ onClose, market, refetch, onAmountChange }:
+ ) : ( +
+ +
)} )} diff --git a/src/components/WithdrawModalContent.tsx b/src/components/WithdrawModalContent.tsx index 0d07c615..b79bf858 100644 --- a/src/components/WithdrawModalContent.tsx +++ b/src/components/WithdrawModalContent.tsx @@ -119,11 +119,7 @@ export function WithdrawModalContent({ position, market, onClose, refetch, onAmo return (
- {!isConnected ? ( -
- -
- ) : ( + {isConnected ? ( <> {/* Withdraw Input Section */}
@@ -171,6 +167,10 @@ export function WithdrawModalContent({ position, market, onClose, refetch, onAmo
+ ) : ( +
+ +
)} ); diff --git a/src/data-sources/subgraph/historical.ts b/src/data-sources/subgraph/historical.ts index 9bf61c1b..a54ce04f 100644 --- a/src/data-sources/subgraph/historical.ts +++ b/src/data-sources/subgraph/historical.ts @@ -73,11 +73,11 @@ const transformSubgraphSnapshotsToHistoricalResult = ( rates.supplyApy.push({ x: timestamp, - y: !isNaN(supplyApyValue) ? supplyApyValue : 0, + y: isNaN(supplyApyValue) ? 0 : supplyApyValue, }); rates.borrowApy.push({ x: timestamp, - y: !isNaN(borrowApyValue) ? borrowApyValue : 0, + y: isNaN(borrowApyValue) ? 0 : borrowApyValue, }); rates.apyAtTarget.push({ x: timestamp, y: 0 }); rates.utilization.push({ x: timestamp, y: 0 }); diff --git a/src/hooks/useSupplyMarket.ts b/src/hooks/useSupplyMarket.ts index 79b29f25..a28929fe 100644 --- a/src/hooks/useSupplyMarket.ts +++ b/src/hooks/useSupplyMarket.ts @@ -261,7 +261,9 @@ export function useSupplyMarket(market: Market, onSuccess?: () => void): UseSupp } // Standard ERC20 flow - if (!isApproved) { + if (isApproved) { + setCurrentStep('supplying'); + } else { try { await approve(); setCurrentStep('supplying'); @@ -281,8 +283,6 @@ export function useSupplyMarket(market: Market, onSuccess?: () => void): UseSupp } throw error; } - } else { - setCurrentStep('supplying'); } await executeSupplyTransaction(); diff --git a/src/hooks/useVaultV2Deposit.ts b/src/hooks/useVaultV2Deposit.ts index 08679ed4..53b3139a 100644 --- a/src/hooks/useVaultV2Deposit.ts +++ b/src/hooks/useVaultV2Deposit.ts @@ -226,7 +226,9 @@ export function useVaultV2Deposit({ } // Standard ERC20 flow - if (!isApproved) { + if (isApproved) { + setCurrentStep('depositing'); + } else { try { await approve(); setCurrentStep('depositing'); @@ -246,8 +248,6 @@ export function useVaultV2Deposit({ } throw error; } - } else { - setCurrentStep('depositing'); } await executeDepositTransaction(); diff --git a/src/utils/positions.ts b/src/utils/positions.ts index 608a63ea..2b18b05b 100644 --- a/src/utils/positions.ts +++ b/src/utils/positions.ts @@ -225,12 +225,6 @@ export async function fetchMarketSnapshot( try { const isNow = !blockNumber || blockNumber === 0; - if (!isNow) { - console.log(`Get market snapshot ${marketId.slice(0, 6)} at blockNumber ${blockNumber}`); - } else { - console.log(`Get market snapshot ${marketId.slice(0, 6)} at current block`); - } - // Get the market data const marketArray = (await client.readContract({ address: getMorphoAddress(chainId as SupportedNetworks), From c187e8c22fda64769f5b1735247c3f2eaad5d519 Mon Sep 17 00:00:00 2001 From: antoncoding Date: Tue, 9 Dec 2025 11:33:16 +0800 Subject: [PATCH 11/12] chore: elseif --- app/HomePage.tsx | 12 +++++------- biome.jsonc | 2 -- src/components/Status/LoadingScreen.tsx | 8 +++----- 3 files changed, 8 insertions(+), 14 deletions(-) diff --git a/app/HomePage.tsx b/app/HomePage.tsx index 4b67ada3..ee24833a 100644 --- a/app/HomePage.tsx +++ b/app/HomePage.tsx @@ -111,14 +111,12 @@ function CustomTypingAnimation() { setIsDeleting(false); setPhraseIndex(getNextPhraseIndex(phraseIndex)); } - } else { + } else if (displayText.length < targetText.length) { // Typing - if (displayText.length < targetText.length) { - setDisplayText(targetText.slice(0, displayText.length + 1)); - } else { - // Finished typing, pause - setIsPaused(true); - } + setDisplayText(targetText.slice(0, displayText.length + 1)); + } else { + // Finished typing, pause + setIsPaused(true); } }, isDeleting ? deletingSpeed : typingSpeed, diff --git a/biome.jsonc b/biome.jsonc index 4a5cf1ca..076d6ae4 100644 --- a/biome.jsonc +++ b/biome.jsonc @@ -55,8 +55,6 @@ "noNonNullAssertion": "off", // Don't enforce during migration - too opinionated - // "noNegationElse": "off", - "useCollapsedElseIf": "off", // Object shorthand - disable for gentle migration "useConsistentObjectDefinitions": "off", diff --git a/src/components/Status/LoadingScreen.tsx b/src/components/Status/LoadingScreen.tsx index ea65d06e..010d013d 100644 --- a/src/components/Status/LoadingScreen.tsx +++ b/src/components/Status/LoadingScreen.tsx @@ -69,12 +69,10 @@ function TypingAnimation({ phrases, singleMode = false }: { phrases: string[]; s setIsDeleting(false); setPhraseIndex(getNextPhraseIndex(phraseIndex)); } + } else if (displayText.length < targetText.length) { + setDisplayText(targetText.slice(0, displayText.length + 1)); } else { - if (displayText.length < targetText.length) { - setDisplayText(targetText.slice(0, displayText.length + 1)); - } else { - setIsPaused(true); - } + setIsPaused(true); } }, isDeleting ? deletingSpeed : typingSpeed, From f4dc766b20642f5270d0de931bbc12873fb56480 Mon Sep 17 00:00:00 2001 From: antoncoding Date: Tue, 9 Dec 2025 11:44:03 +0800 Subject: [PATCH 12/12] chore: no namespace import --- AGENTS.md | 2 +- app/markets/components/markets.tsx | 31 +++++----- .../components/PositionsSummaryTable.tsx | 9 ++- biome.jsonc | 1 - src/components/common/IconSwitch.tsx | 9 ++- .../common/MarketsTableWithSameLoanAsset.tsx | 27 +++++---- src/components/layout/header/ListItem.tsx | 6 +- src/components/ui/button.tsx | 4 +- src/components/ui/pagination.tsx | 6 +- src/hooks/usePagination.ts | 6 +- src/hooks/useStaredMarkets.ts | 8 +-- src/hooks/useUserMarketsCache.ts | 6 +- src/utils/storageKeys.ts | 60 ++++++++----------- 13 files changed, 87 insertions(+), 88 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index c4c320b0..f196796d 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -9,7 +9,7 @@ Next.js routes live under `app/`. Shared logic and reusable UI sit in `src/`, wi - `pnpm build` — produce a clean production bundle after clearing `.next`. - `pnpm start` — serve the production build locally for release validation. - `pnpm check` — run formatting, ESLint, and Stylelint together. -- `pnpm lint` / `pnpm stylelint` — target React or CSS changes individually. +- `pnpm lint` — target React or CSS changes individually. - `pnpm test` — execute Jest suites with the configured setup. ## Coding Style & Naming Conventions diff --git a/app/markets/components/markets.tsx b/app/markets/components/markets.tsx index 0b0e90f1..212d23a8 100644 --- a/app/markets/components/markets.tsx +++ b/app/markets/components/markets.tsx @@ -28,7 +28,7 @@ import { filterMarkets, sortMarkets, createPropertySort, createStarredSort } fro import { parseNumericThreshold } from '@/utils/markets'; import type { SupportedNetworks } from '@/utils/networks'; import type { PriceFeedVendors } from '@/utils/oracle'; -import * as keys from '@/utils/storageKeys'; +import { storageKeys } from '@/utils/storageKeys'; import type { ERC20Token, UnknownERC20Token } from '@/utils/tokens'; import type { Market } from '@/utils/types'; @@ -78,8 +78,8 @@ export default function Markets({ initialNetwork, initialCollaterals, initialLoa const [uniqueCollaterals, setUniqueCollaterals] = useState<(ERC20Token | UnknownERC20Token)[]>([]); const [uniqueLoanAssets, setUniqueLoanAssets] = useState<(ERC20Token | UnknownERC20Token)[]>([]); - const [sortColumn, setSortColumn] = useLocalStorage(keys.MarketSortColumnKey, SortColumn.Supply); - const [sortDirection, setSortDirection] = useLocalStorage(keys.MarketSortDirectionKey, -1); + const [sortColumn, setSortColumn] = useLocalStorage(storageKeys.MarketSortColumnKey, SortColumn.Supply); + const [sortDirection, setSortDirection] = useLocalStorage(storageKeys.MarketSortDirectionKey, -1); const [showSupplyModal, setShowSupplyModal] = useState(false); const [selectedMarket, setSelectedMarket] = useState(undefined); @@ -92,29 +92,32 @@ export default function Markets({ initialNetwork, initialCollaterals, initialLoa const { currentPage, setCurrentPage, entriesPerPage, handleEntriesPerPageChange, resetPage } = usePagination(); - const [includeUnknownTokens, setIncludeUnknownTokens] = useLocalStorage(keys.MarketsShowUnknownTokens, false); - const [showUnknownOracle, setShowUnknownOracle] = useLocalStorage(keys.MarketsShowUnknownOracle, false); + const [includeUnknownTokens, setIncludeUnknownTokens] = useLocalStorage(storageKeys.MarketsShowUnknownTokens, false); + const [showUnknownOracle, setShowUnknownOracle] = useLocalStorage(storageKeys.MarketsShowUnknownOracle, false); const { allTokens, findToken } = useTokens(); // USD Filter values - const [usdMinSupply, setUsdMinSupply] = useLocalStorage(keys.MarketsUsdMinSupplyKey, DEFAULT_MIN_SUPPLY_USD.toString()); - const [usdMinBorrow, setUsdMinBorrow] = useLocalStorage(keys.MarketsUsdMinBorrowKey, ''); - const [usdMinLiquidity, setUsdMinLiquidity] = useLocalStorage(keys.MarketsUsdMinLiquidityKey, DEFAULT_MIN_LIQUIDITY_USD.toString()); + const [usdMinSupply, setUsdMinSupply] = useLocalStorage(storageKeys.MarketsUsdMinSupplyKey, DEFAULT_MIN_SUPPLY_USD.toString()); + const [usdMinBorrow, setUsdMinBorrow] = useLocalStorage(storageKeys.MarketsUsdMinBorrowKey, ''); + const [usdMinLiquidity, setUsdMinLiquidity] = useLocalStorage( + storageKeys.MarketsUsdMinLiquidityKey, + DEFAULT_MIN_LIQUIDITY_USD.toString(), + ); // USD Filter enabled states const [minSupplyEnabled, setMinSupplyEnabled] = useLocalStorage( - keys.MarketsMinSupplyEnabledKey, + storageKeys.MarketsMinSupplyEnabledKey, true, // Default to enabled for backward compatibility ); - const [minBorrowEnabled, setMinBorrowEnabled] = useLocalStorage(keys.MarketsMinBorrowEnabledKey, false); - const [minLiquidityEnabled, setMinLiquidityEnabled] = useLocalStorage(keys.MarketsMinLiquidityEnabledKey, false); + const [minBorrowEnabled, setMinBorrowEnabled] = useLocalStorage(storageKeys.MarketsMinBorrowEnabledKey, false); + const [minLiquidityEnabled, setMinLiquidityEnabled] = useLocalStorage(storageKeys.MarketsMinLiquidityEnabledKey, false); - const [trustedVaultsOnly, setTrustedVaultsOnly] = useLocalStorage(keys.MarketsTrustedVaultsOnlyKey, false); + const [trustedVaultsOnly, setTrustedVaultsOnly] = useLocalStorage(storageKeys.MarketsTrustedVaultsOnlyKey, false); // Column visibility state const [columnVisibilityState, setColumnVisibilityState] = useLocalStorage( - keys.MarketsColumnVisibilityKey, + storageKeys.MarketsColumnVisibilityKey, DEFAULT_COLUMN_VISIBILITY, ); @@ -128,7 +131,7 @@ export default function Markets({ initialNetwork, initialCollaterals, initialLoa ); // Table view mode: 'compact' (scrollable) or 'expanded' (full width) - const [tableViewMode, setTableViewMode] = useLocalStorage<'compact' | 'expanded'>(keys.MarketsTableViewModeKey, 'compact'); + const [tableViewMode, setTableViewMode] = useLocalStorage<'compact' | 'expanded'>(storageKeys.MarketsTableViewModeKey, 'compact'); // Force compact mode on mobile - track window size const [isMobile, setIsMobile] = useState(false); diff --git a/app/positions/components/PositionsSummaryTable.tsx b/app/positions/components/PositionsSummaryTable.tsx index d3171a28..5d1b4392 100644 --- a/app/positions/components/PositionsSummaryTable.tsx +++ b/app/positions/components/PositionsSummaryTable.tsx @@ -23,7 +23,7 @@ import { formatReadable, formatBalance } from '@/utils/balance'; import { getNetworkImg } from '@/utils/networks'; import { getGroupedEarnings, groupPositionsByLoanAsset, processCollaterals } from '@/utils/positions'; import { convertApyToApr } from '@/utils/rateMath'; -import { PositionsShowEmptyKey, PositionsShowCollateralExposureKey } from '@/utils/storageKeys'; +import { storageKeys } from '@/utils/storageKeys'; import { type MarketPosition, type GroupedPosition, @@ -121,8 +121,11 @@ export function PositionsSummaryTable({ const [expandedRows, setExpandedRows] = useState>(new Set()); const [showRebalanceModal, setShowRebalanceModal] = useState(false); const [selectedGroupedPosition, setSelectedGroupedPosition] = useState(null); - const [showEmptyPositions, setShowEmptyPositions] = useLocalStorage(PositionsShowEmptyKey, false); - const [showCollateralExposure, setShowCollateralExposure] = useLocalStorage(PositionsShowCollateralExposureKey, true); + const [showEmptyPositions, setShowEmptyPositions] = useLocalStorage(storageKeys.PositionsShowEmptyKey, false); + const [showCollateralExposure, setShowCollateralExposure] = useLocalStorage( + storageKeys.PositionsShowCollateralExposureKey, + true, + ); const { address } = useAccount(); const { isAprDisplay } = useMarkets(); const { short: rateLabel } = useRateLabel(); diff --git a/biome.jsonc b/biome.jsonc index 076d6ae4..2afa738e 100644 --- a/biome.jsonc +++ b/biome.jsonc @@ -96,7 +96,6 @@ // Disable for gentle migration "useTopLevelRegex": "off", // 15 errors "noBarrelFile": "off", // 9 errors - "noNamespaceImport": "off" // 7 errors }, "suspicious": { diff --git a/src/components/common/IconSwitch.tsx b/src/components/common/IconSwitch.tsx index 08dc59c2..e964db37 100644 --- a/src/components/common/IconSwitch.tsx +++ b/src/components/common/IconSwitch.tsx @@ -1,6 +1,5 @@ 'use client'; - -import * as React from 'react'; +import { useCallback, useState } from 'react'; import { motion } from 'framer-motion'; import { PiButterflyDuotone } from 'react-icons/pi'; @@ -100,7 +99,7 @@ export function IconSwitch({ className, ...rest }: IconSwitchProps) { - const [internalSelected, setInternalSelected] = React.useState(defaultSelected); + const [internalSelected, setInternalSelected] = useState(defaultSelected); const isControlled = controlledSelected !== undefined; const isSelected = isControlled ? controlledSelected : internalSelected; @@ -111,7 +110,7 @@ export function IconSwitch({ // Determine which icon to use const IconComponent = thumbIconOn && thumbIconOff ? (isSelected ? thumbIconOn : thumbIconOff) : ThumbIcon; - const handleToggle = React.useCallback(() => { + const handleToggle = useCallback(() => { if (disabled) return; const newValue = !isSelected; @@ -121,7 +120,7 @@ export function IconSwitch({ onChange?.(newValue); }, [disabled, isControlled, isSelected, onChange]); - const handleKeyDown = React.useCallback( + const handleKeyDown = useCallback( (event: React.KeyboardEvent) => { if (event.key === 'Enter' || event.key === ' ') { event.preventDefault(); diff --git a/src/components/common/MarketsTableWithSameLoanAsset.tsx b/src/components/common/MarketsTableWithSameLoanAsset.tsx index 48eb0538..33733536 100644 --- a/src/components/common/MarketsTableWithSameLoanAsset.tsx +++ b/src/components/common/MarketsTableWithSameLoanAsset.tsx @@ -24,7 +24,7 @@ import { parseNumericThreshold } from '@/utils/markets'; import { getViemChain } from '@/utils/networks'; import { parsePriceFeedVendors, PriceFeedVendors, OracleVendorIcons } from '@/utils/oracle'; import { convertApyToApr } from '@/utils/rateMath'; -import * as keys from '@/utils/storageKeys'; +import { storageKeys } from '@/utils/storageKeys'; import { type ERC20Token, type UnknownERC20Token, infoToKey } from '@/utils/tokens'; import type { Market } from '@/utils/types'; import { buildTrustedVaultMap } from '@/utils/vaults'; @@ -669,17 +669,20 @@ export function MarketsTableWithSameLoanAsset({ const [searchQuery, setSearchQuery] = useState(''); // Settings state (persisted with storage key namespace) - const [entriesPerPage, setEntriesPerPage] = useLocalStorage(keys.MarketEntriesPerPageKey, 8); - const [includeUnknownTokens, setIncludeUnknownTokens] = useLocalStorage(keys.MarketsShowUnknownTokens, false); - const [showUnknownOracle, setShowUnknownOracle] = useLocalStorage(keys.MarketsShowUnknownOracle, false); + const [entriesPerPage, setEntriesPerPage] = useLocalStorage(storageKeys.MarketEntriesPerPageKey, 8); + const [includeUnknownTokens, setIncludeUnknownTokens] = useLocalStorage(storageKeys.MarketsShowUnknownTokens, false); + const [showUnknownOracle, setShowUnknownOracle] = useLocalStorage(storageKeys.MarketsShowUnknownOracle, false); const [userTrustedVaults, setUserTrustedVaults] = useLocalStorage('userTrustedVaults', defaultTrustedVaults); // Store USD filters as separate localStorage items to match markets.tsx pattern - const [usdMinSupply, setUsdMinSupply] = useLocalStorage(keys.MarketsUsdMinSupplyKey, DEFAULT_MIN_SUPPLY_USD.toString()); - const [usdMinBorrow, setUsdMinBorrow] = useLocalStorage(keys.MarketsUsdMinBorrowKey, ''); - const [usdMinLiquidity, setUsdMinLiquidity] = useLocalStorage(keys.MarketsUsdMinLiquidityKey, DEFAULT_MIN_LIQUIDITY_USD.toString()); + const [usdMinSupply, setUsdMinSupply] = useLocalStorage(storageKeys.MarketsUsdMinSupplyKey, DEFAULT_MIN_SUPPLY_USD.toString()); + const [usdMinBorrow, setUsdMinBorrow] = useLocalStorage(storageKeys.MarketsUsdMinBorrowKey, ''); + const [usdMinLiquidity, setUsdMinLiquidity] = useLocalStorage( + storageKeys.MarketsUsdMinLiquidityKey, + DEFAULT_MIN_LIQUIDITY_USD.toString(), + ); - const [trustedVaultsOnly, setTrustedVaultsOnly] = useLocalStorage(keys.MarketsTrustedVaultsOnlyKey, false); + const [trustedVaultsOnly, setTrustedVaultsOnly] = useLocalStorage(storageKeys.MarketsTrustedVaultsOnlyKey, false); const trustedVaultMap = useMemo(() => { return buildTrustedVaultMap(userTrustedVaults); @@ -699,15 +702,15 @@ export function MarketsTableWithSameLoanAsset({ // USD Filter enabled states const [minSupplyEnabled, setMinSupplyEnabled] = useLocalStorage( - keys.MarketsMinSupplyEnabledKey, + storageKeys.MarketsMinSupplyEnabledKey, true, // Default to enabled for backward compatibility ); - const [minBorrowEnabled, setMinBorrowEnabled] = useLocalStorage(keys.MarketsMinBorrowEnabledKey, false); - const [minLiquidityEnabled, setMinLiquidityEnabled] = useLocalStorage(keys.MarketsMinLiquidityEnabledKey, false); + const [minBorrowEnabled, setMinBorrowEnabled] = useLocalStorage(storageKeys.MarketsMinBorrowEnabledKey, false); + const [minLiquidityEnabled, setMinLiquidityEnabled] = useLocalStorage(storageKeys.MarketsMinLiquidityEnabledKey, false); // Column visibility state const [columnVisibility, setColumnVisibility] = useLocalStorage( - keys.MarketsColumnVisibilityKey, + storageKeys.MarketsColumnVisibilityKey, DEFAULT_COLUMN_VISIBILITY, ); diff --git a/src/components/layout/header/ListItem.tsx b/src/components/layout/header/ListItem.tsx index efa3eb4a..642df3b7 100644 --- a/src/components/layout/header/ListItem.tsx +++ b/src/components/layout/header/ListItem.tsx @@ -1,5 +1,5 @@ import { forwardRef } from 'react'; -import * as NavigationMenu from '@radix-ui/react-navigation-menu'; +import { Link } from '@radix-ui/react-navigation-menu'; import { clsx } from 'clsx'; export const ListItem = forwardRef(function ListItemComponent( @@ -16,7 +16,7 @@ export const ListItem = forwardRef(function ListItemComponent( ) { return (
- @@ -28,7 +28,7 @@ export const ListItem = forwardRef(function ListItemComponent( > {children} - +
); }); diff --git a/src/components/ui/button.tsx b/src/components/ui/button.tsx index fe212cc7..07569cb2 100644 --- a/src/components/ui/button.tsx +++ b/src/components/ui/button.tsx @@ -1,4 +1,4 @@ -import * as React from 'react'; +import { forwardRef } from 'react'; import { Slot } from '@radix-ui/react-slot'; import { cva, type VariantProps } from 'class-variance-authority'; @@ -35,7 +35,7 @@ export type ButtonProps = { } & React.ButtonHTMLAttributes & VariantProps; -const Button = React.forwardRef(({ className, variant, size, asChild = false, ...props }, ref) => { +const Button = forwardRef(({ className, variant, size, asChild = false, ...props }, ref) => { const Comp = asChild ? Slot : 'button'; return ( ) { } Pagination.displayName = 'Pagination'; -const PaginationContent = React.forwardRef>(({ className, ...props }, ref) => ( +const PaginationContent = forwardRef>(({ className, ...props }, ref) => (
    >(({ className, ...props }, ref) => ( +const PaginationItem = forwardRef>(({ className, ...props }, ref) => (
  • { - const storedEntriesPerPage = storage.getItem(MarketEntriesPerPageKey); + const storedEntriesPerPage = storage.getItem(storageKeys.MarketEntriesPerPageKey); if (storedEntriesPerPage) { setEntriesPerPage(Number.parseInt(storedEntriesPerPage, 10)); } @@ -19,7 +19,7 @@ export function usePagination(initialEntriesPerPage = 6) { const handleEntriesPerPageChange = (value: number) => { setEntriesPerPage(value); - storage.setItem(MarketEntriesPerPageKey, value.toString()); + storage.setItem(storageKeys.MarketEntriesPerPageKey, value.toString()); setCurrentPage(1); // Reset to first page }; diff --git a/src/hooks/useStaredMarkets.ts b/src/hooks/useStaredMarkets.ts index 08b20d0e..427387b6 100644 --- a/src/hooks/useStaredMarkets.ts +++ b/src/hooks/useStaredMarkets.ts @@ -1,11 +1,11 @@ import { useState, useCallback } from 'react'; import storage from 'local-storage-fallback'; import { useStyledToast } from '@/hooks/useStyledToast'; -import * as keys from '@/utils/storageKeys'; +import { storageKeys } from '@/utils/storageKeys'; const getInitialStaredMarkets = (): string[] => { try { - const item = storage.getItem(keys.MarketFavoritesKey) ?? '[]'; + const item = storage.getItem(storageKeys.MarketFavoritesKey) ?? '[]'; return JSON.parse(item) as string[]; } catch (error) { console.error('Error parsing stared markets from localStorage', error); @@ -23,7 +23,7 @@ export const useStaredMarkets = () => { const newStaredIds = [...staredIds, id]; setStaredIds(newStaredIds); - storage.setItem(keys.MarketFavoritesKey, JSON.stringify(newStaredIds)); + storage.setItem(storageKeys.MarketFavoritesKey, JSON.stringify(newStaredIds)); toastSuccess('Market starred', 'Market added to favorites'); }, [staredIds, toastSuccess], @@ -35,7 +35,7 @@ export const useStaredMarkets = () => { const newStaredIds = staredIds.filter((i) => i !== id); setStaredIds(newStaredIds); - storage.setItem(keys.MarketFavoritesKey, JSON.stringify(newStaredIds)); + storage.setItem(storageKeys.MarketFavoritesKey, JSON.stringify(newStaredIds)); toastSuccess('Market unstarred', 'Market removed from favorites'); }, [staredIds, toastSuccess], diff --git a/src/hooks/useUserMarketsCache.ts b/src/hooks/useUserMarketsCache.ts index d8cd718d..63af9a1a 100644 --- a/src/hooks/useUserMarketsCache.ts +++ b/src/hooks/useUserMarketsCache.ts @@ -1,6 +1,6 @@ import { useCallback } from 'react'; import storage from 'local-storage-fallback'; -import { CacheMarketPositionKeys } from '../utils/storageKeys'; +import { storageKeys } from '../utils/storageKeys'; type MarketIdentifier = { marketUniqueKey: string; @@ -15,7 +15,7 @@ export function useUserMarketsCache(address: string | undefined) { // Load cache from localStorage const loadCache = useCallback((): UserMarketsCache => { try { - const cached = storage.getItem(CacheMarketPositionKeys); + const cached = storage.getItem(storageKeys.CacheMarketPositionKeys); if (cached) { return JSON.parse(cached) as UserMarketsCache; } @@ -28,7 +28,7 @@ export function useUserMarketsCache(address: string | undefined) { // Save cache to localStorage const saveCache = useCallback((cache: UserMarketsCache) => { try { - storage.setItem(CacheMarketPositionKeys, JSON.stringify(cache)); + storage.setItem(storageKeys.CacheMarketPositionKeys, JSON.stringify(cache)); } catch (error) { console.error('Failed to save markets cache:', error); } diff --git a/src/utils/storageKeys.ts b/src/utils/storageKeys.ts index 6cf97db9..d746ad62 100644 --- a/src/utils/storageKeys.ts +++ b/src/utils/storageKeys.ts @@ -1,34 +1,26 @@ -export const MarketSortColumnKey = 'monarch_marketsSortColumn'; -export const MarketSortDirectionKey = 'monarch_marketsSortDirection'; - -export const MarketFavoritesKey = 'monarch_marketsFavorites'; -export const MarketEntriesPerPageKey = 'monarch_marketsEntriesPerPage'; - -export const MarketsUsdMinSupplyKey = 'monarch_marketsUsdMinSupply_2'; -export const MarketsUsdMinBorrowKey = 'monarch_marketsUsdMinBorrow'; -export const MarketsUsdMinLiquidityKey = 'monarch_marketsUsdMinLiquidity'; - -// USD Filter enabled/disabled states -export const MarketsMinSupplyEnabledKey = 'monarch_minSupplyEnabled'; -export const MarketsMinBorrowEnabledKey = 'monarch_minBorrowEnabled'; -export const MarketsMinLiquidityEnabledKey = 'monarch_minLiquidityEnabled'; - -export const PositionsShowEmptyKey = 'positions:show-empty'; -export const PositionsShowCollateralExposureKey = 'positions:show-collateral-exposure'; - -export const ThemeKey = 'theme'; - -export const CacheMarketPositionKeys = 'monarch_cache_market_unique_keys'; - -// Deprecated: Use MarketsMinSupplyEnabledKey instead -export const MarketsShowSmallMarkets = 'monarch_show_small_markets'; -export const MarketsShowUnknownTokens = 'includeUnknownTokens'; -export const MarketsShowUnknownOracle = 'showUnknownOracle'; - -// Column visibility settings -export const MarketsColumnVisibilityKey = 'monarch_marketsColumnVisibility'; - -// Table view mode -export const MarketsTableViewModeKey = 'monarch_marketsTableViewMode'; - -export const MarketsTrustedVaultsOnlyKey = 'monarch_marketsTrustedVaultsOnly'; +export const storageKeys = { + MarketSortColumnKey: 'monarch_marketsSortColumn', + MarketSortDirectionKey: 'monarch_marketsSortDirection', + MarketFavoritesKey: 'monarch_marketsFavorites', + MarketEntriesPerPageKey: 'monarch_marketsEntriesPerPage', + MarketsUsdMinSupplyKey: 'monarch_marketsUsdMinSupply_2', + MarketsUsdMinBorrowKey: 'monarch_marketsUsdMinBorrow', + MarketsUsdMinLiquidityKey: 'monarch_marketsUsdMinLiquidity', + // USD Filter enabled/disabled states + MarketsMinSupplyEnabledKey: 'monarch_minSupplyEnabled', + MarketsMinBorrowEnabledKey: 'monarch_minBorrowEnabled', + MarketsMinLiquidityEnabledKey: 'monarch_minLiquidityEnabled', + PositionsShowEmptyKey: 'positions:show-empty', + PositionsShowCollateralExposureKey: 'positions:show-collateral-exposure', + ThemeKey: 'theme', + CacheMarketPositionKeys: 'monarch_cache_market_unique_keys', + // Deprecated: Use MarketsMinSupplyEnabledKey instead + MarketsShowSmallMarkets: 'monarch_show_small_markets', + MarketsShowUnknownTokens: 'includeUnknownTokens', + MarketsShowUnknownOracle: 'showUnknownOracle', + // Column visibility settings + MarketsColumnVisibilityKey: 'monarch_marketsColumnVisibility', + // Table view mode + MarketsTableViewModeKey: 'monarch_marketsTableViewMode', + MarketsTrustedVaultsOnlyKey: 'monarch_marketsTrustedVaultsOnly', +} as const;