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/HomePage.tsx b/app/HomePage.tsx
index 06bb2dd3..ee24833a 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,12 @@ function CustomTypingAnimation() {
setIsDeleting(false);
setPhraseIndex(getNextPhraseIndex(phraseIndex));
}
+ } else if (displayText.length < targetText.length) {
+ // Typing
+ setDisplayText(targetText.slice(0, displayText.length + 1));
+ } else {
+ // Finished typing, pause
+ setIsPaused(true);
}
},
isDeleting ? deletingSpeed : typingSpeed,
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/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/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..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) => {
@@ -100,7 +99,9 @@ function VolumeChart({
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));
+ 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;
@@ -328,19 +329,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/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/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/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/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/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/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/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/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/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..2afa738e 100644
--- a/biome.jsonc
+++ b/biome.jsonc
@@ -41,14 +41,10 @@
// Team preference - allow some flexibility
"useConsistentCurlyBraces": "off",
- "noParameterAssign": "off",
// Keep filenamingConvention disabled during migration
"useFilenamingConvention": "off",
- // Don't force default exports
- "noDefaultExport": "off",
-
// Team uses enums
"noEnum": "off",
@@ -58,13 +54,7 @@
// Team allows non-null assertions when needed
"noNonNullAssertion": "off",
- // Allow parameter properties (TS)
- "noParameterProperties": "off",
-
// Don't enforce during migration - too opinionated
- "noUselessElse": "off",
- "noNegationElse": "off",
- "useCollapsedElseIf": "off",
// Object shorthand - disable for gentle migration
"useConsistentObjectDefinitions": "off",
@@ -74,29 +64,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
- "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
},
"complexity": {
@@ -118,16 +89,13 @@
// 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": {
// Disable for gentle migration
"useTopLevelRegex": "off", // 15 errors
"noBarrelFile": "off", // 9 errors
- "noNamespaceImport": "off" // 7 errors
},
"suspicious": {
@@ -200,10 +168,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 df227d92..bf820408 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",
"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",
"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",
@@ -59,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",
@@ -98,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-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/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/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/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/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/components/Status/LoadingScreen.tsx b/src/components/Status/LoadingScreen.tsx
index 927f7e43..010d013d 100644
--- a/src/components/Status/LoadingScreen.tsx
+++ b/src/components/Status/LoadingScreen.tsx
@@ -62,19 +62,17 @@ 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/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/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/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/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 105509c9..642df3b7 100644
--- a/src/components/layout/header/ListItem.tsx
+++ b/src/components/layout/header/ListItem.tsx
@@ -1,8 +1,8 @@
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 ListItem(
+export const ListItem = forwardRef(function ListItemComponent(
{
children,
target,
@@ -16,7 +16,7 @@ export const ListItem = forwardRef(function ListItem(
) {
return (
-
@@ -28,7 +28,7 @@ export const ListItem = forwardRef(function ListItem(
>
{children}
-
+
);
});
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/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) => (
- feed.address.toLowerCase() === address && feed.chainId === chainId);
}
-
-export type { GeneralPriceFeed };
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/historical.ts b/src/data-sources/morpho-api/historical.ts
index be074b1d..9647f961 100644
--- a/src/data-sources/morpho-api/historical.ts
+++ b/src/data-sources/morpho-api/historical.ts
@@ -1,12 +1,8 @@
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, 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/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/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/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/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/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/usePagination.ts b/src/hooks/usePagination.ts
index 80220cec..00916fd5 100644
--- a/src/hooks/usePagination.ts
+++ b/src/hooks/usePagination.ts
@@ -1,6 +1,6 @@
import { useState, useEffect, useCallback } from 'react';
import storage from 'local-storage-fallback';
-import { MarketEntriesPerPageKey } from '@/utils/storageKeys';
+import { storageKeys } from '@/utils/storageKeys';
export function usePagination(initialEntriesPerPage = 6) {
const [currentPage, setCurrentPage] = useState(1);
@@ -11,7 +11,7 @@ export function usePagination(initialEntriesPerPage = 6) {
}, [setCurrentPage]);
useEffect(() => {
- 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/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/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/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/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/useSupplyMarket.ts b/src/hooks/useSupplyMarket.ts
index 90c183c9..a28929fe 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,
@@ -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/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/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/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..a1699720 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':
@@ -37,6 +37,8 @@ const getPeriodTimestamp = (period: EarningsPeriod): number => {
return now - 7 * DAY;
case 'month':
return now - 30 * DAY;
+ default:
+ return 0;
}
};
@@ -126,7 +128,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 +150,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/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/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}`[] = [];
diff --git a/src/hooks/useVaultV2Deposit.ts b/src/hooks/useVaultV2Deposit.ts
index 71c35507..53b3139a 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,
@@ -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/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..c0b6261e 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;
@@ -32,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) >= 1_000) {
- return `${(num / 1_000).toFixed(2)}K`;
- } else {
- return num.toFixed(precision);
}
+ if (Math.abs(num) >= 1000) {
+ return `${(num / 1000).toFixed(2)}K`;
+ }
+ return num.toFixed(precision);
} catch (e) {
console.log('Error formatting number', e, typeof num);
return num.toString();
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..224e2923 100644
--- a/src/utils/external.ts
+++ b/src/utils/external.ts
@@ -1,10 +1,11 @@
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) {
+ }
+ if (chainId === SupportedNetworks.Mainnet) {
return 'ethereum';
}
return network;
diff --git a/src/utils/gtag.ts b/src/utils/gtag.ts
index 0824a6e3..f67958bc 100644
--- a/src/utils/gtag.ts
+++ b/src/utils/gtag.ts
@@ -2,26 +2,34 @@ 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;
}
+ const gtag = (window as WindowWithGtag).gtag;
+ if (!gtag) {
+ return;
+ }
// eslint-disable-next-line @typescript-eslint/no-unsafe-call
- window.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.gtag('event', action, {
+ gtag('event', action, {
event_category: category,
event_label: label,
value: value,
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/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';
diff --git a/src/utils/positions.ts b/src/utils/positions.ts
index 26d4a367..2b18b05b 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,
@@ -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),
@@ -253,7 +247,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/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 =
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;
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> = {