diff --git a/.gitignore b/.gitignore index 875857171..df971b60d 100644 --- a/.gitignore +++ b/.gitignore @@ -46,9 +46,6 @@ yarn-error.log* # husky .husky -# vercel -.vercel - # lingui compiled translation files src/locales/_build/ src/locales/**/*.js diff --git a/.vercel/dao-branch-filtering.sh b/.vercel/dao-branch-filtering.sh new file mode 100644 index 000000000..1e412306a --- /dev/null +++ b/.vercel/dao-branch-filtering.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +echo "VERCEL_GIT_COMMIT_REF: $VERCEL_GIT_COMMIT_REF" + +if [[ "$VERCEL_GIT_COMMIT_REF" == "staging" || "$VERCEL_GIT_COMMIT_REF" == "task/init-dao-app" ]] ; then + # Proceed with the build + echo "✅ - Build can proceed" + exit 1; + +else + # Don't build + echo "🛑 - Build cancelled" + exit 0; +fi \ No newline at end of file diff --git a/.vercel/storybook-branch-filtering.sh b/.vercel/storybook-branch-filtering.sh new file mode 100644 index 000000000..988b9e3be --- /dev/null +++ b/.vercel/storybook-branch-filtering.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +echo "VERCEL_GIT_COMMIT_REF: $VERCEL_GIT_COMMIT_REF" + +if [[ "$VERCEL_GIT_COMMIT_REF" == "develop" ]] ; then + # Proceed with the build + echo "✅ - Build can proceed" + exit 1; + +else + # Don't build + echo "🛑 - Build cancelled" + exit 0; +fi \ No newline at end of file diff --git a/apps/dao/.gitkeep b/apps/dao/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/apps/lend/package.json b/apps/lend/package.json index f29b970dc..e46965ead 100644 --- a/apps/lend/package.json +++ b/apps/lend/package.json @@ -17,6 +17,12 @@ "i18n:compile": "lingui compile", "analyze": "ANALYZE=true next build" }, + "peerDependencies": { + "eslint-config-custom": "*", + "react": "*", + "react-dom": "*", + "tsconfig": "*" + }, "dependencies": { "@curvefi/lending-api": "^2.3.3", "@lingui/detect-locale": "^4.6.0", @@ -39,9 +45,9 @@ "next-images": "^1.8.5", "numbro": "^2.4.0", "onboard-helpers": "*", - "react": "^18.2.0", + "react": "*", "react-aria": "3.22.0", - "react-dom": "^18.2.0", + "react-dom": "*", "react-is": "16.13.1", "react-router-dom": "^6.3.0", "react-stately": "3.18.0", @@ -61,8 +67,8 @@ "@svgr/webpack": "^8.1.0", "@types/lodash": "^4.14.182", "@types/node": "17.0.24", - "@types/react": "^18.2.0", - "@types/react-dom": "^18.2.0", + "@types/react": "*", + "@types/react-dom": "*", "@types/styled-components": "5.1.14", "eslint-config-custom": "*", "pinst": "^2.1.4", @@ -71,8 +77,6 @@ "webpack": "^5.83.1" }, "resolutions": { - "@types/react": "^18", - "@types/react-dom": "^18", "styled-components": "^5" } } diff --git a/apps/lend/src/pages/_app.tsx b/apps/lend/src/pages/_app.tsx index dc30b5df0..4be0a1596 100644 --- a/apps/lend/src/pages/_app.tsx +++ b/apps/lend/src/pages/_app.tsx @@ -1,31 +1,28 @@ -import type { AppProps } from 'next/app' - -import { useCallback, useEffect, useState } from 'react' -import { HashRouter } from 'react-router-dom' import { i18n } from '@lingui/core' import { I18nProvider } from '@lingui/react' import { OverlayProvider } from '@react-aria/overlays' import delay from 'lodash/delay' +import { initOnboard } from 'onboard-helpers' +import zhHans from 'onboard-helpers/src/locales/zh-Hans' +import zhHant from 'onboard-helpers/src/locales/zh-Hant' +import { useCallback, useEffect, useState } from 'react' import 'intersection-observer' import 'focus-visible' import '@/globals.css' - +import { HashRouter } from 'react-router-dom' +import GlobalStyle from '@/globalStyle' +import Page from '@/layout/index' import { persister, queryClient } from '@/shared/api/query-client' import { QueryProvider } from '@/ui/QueryProvider' import { dynamicActivate, initTranslation } from '@/lib/i18n' -import { getLocaleFromUrl } from '@/utils/utilsRouter' -import { isMobile, removeExtraSpaces } from '@/utils/helpers' -import { getPageWidthClassName } from '@/store/createLayoutSlice' -import { getStorageValue } from '@/utils/utilsStorage' -import { initOnboard } from 'onboard-helpers' import { messages as messagesEn } from '@/locales/en/messages.js' import networks from '@/networks' +import { getPageWidthClassName } from '@/store/createLayoutSlice' import useStore from '@/store/useStore' -import zhHans from 'onboard-helpers/src/locales/zh-Hans' -import zhHant from 'onboard-helpers/src/locales/zh-Hant' - -import Page from '@/layout/index' -import GlobalStyle from '@/globalStyle' +import { isMobile, removeExtraSpaces } from '@/utils/helpers' +import { getLocaleFromUrl } from '@/utils/utilsRouter' +import { getStorageValue } from '@/utils/utilsStorage' +import type { AppProps } from 'next/app' i18n.load({ en: messagesEn }) i18n.activate('en') @@ -83,7 +80,7 @@ function CurveApp({ Component }: AppProps) { }, locale, themeType, - networks + networks, ) updateWalletStateByKey('onboard', onboardInstance) diff --git a/apps/lend/src/pages/index.tsx b/apps/lend/src/pages/index.tsx index 8bd96f471..d09c2b674 100644 --- a/apps/lend/src/pages/index.tsx +++ b/apps/lend/src/pages/index.tsx @@ -1,7 +1,7 @@ import type { NextPage } from 'next' -import { Navigate, Route, Routes } from 'react-router' import dynamic from 'next/dynamic' +import { Navigate, Route, Routes } from 'react-router' import { ROUTE } from '@/constants' diff --git a/apps/loan/package.json b/apps/loan/package.json index d2d0b4fb0..cd244f511 100644 --- a/apps/loan/package.json +++ b/apps/loan/package.json @@ -17,6 +17,12 @@ "i18n:compile": "lingui compile", "analyze": "ANALYZE=true next build" }, + "peerDependencies": { + "eslint-config-custom": "*", + "react": "*", + "react-dom": "*", + "tsconfig": "*" + }, "dependencies": { "@curvefi/stablecoin-api": "^1.5.5", "@lingui/detect-locale": "^4.6.0", @@ -38,9 +44,9 @@ "next-images": "^1.8.5", "numbro": "^2.4.0", "onboard-helpers": "*", - "react": "^18.2.0", + "react": "*", "react-aria": "3.22.0", - "react-dom": "^18.2.0", + "react-dom": "*", "react-is": "16.13.1", "react-router-dom": "^6.3.0", "react-stately": "3.18.0", @@ -60,8 +66,8 @@ "@svgr/webpack": "^8.1.0", "@types/lodash": "^4.14.182", "@types/node": "17.0.24", - "@types/react": "^18.2.0", - "@types/react-dom": "^18.2.0", + "@types/react": "*", + "@types/react-dom": "*", "@types/styled-components": "5.1.14", "eslint-config-custom": "*", "pinst": "^2.1.4", @@ -70,8 +76,6 @@ "webpack": "^5.83.1" }, "resolutions": { - "@types/react": "^18", - "@types/react-dom": "^18", "styled-components": "^5" } } diff --git a/apps/loan/src/pages/_app.tsx b/apps/loan/src/pages/_app.tsx index d302e388c..273f81dde 100644 --- a/apps/loan/src/pages/_app.tsx +++ b/apps/loan/src/pages/_app.tsx @@ -1,8 +1,3 @@ -import type { AppProps } from 'next/app' -import type { Locale } from '@/lib/i18n' - -import { useCallback, useEffect, useState } from 'react' -import { HashRouter } from 'react-router-dom' import { i18n } from '@lingui/core' import { I18nProvider } from '@lingui/react' import { OverlayProvider } from '@react-aria/overlays' @@ -10,23 +5,25 @@ import delay from 'lodash/delay' import 'intersection-observer' import 'focus-visible' import '@/globals.css' - -import { dynamicActivate, initTranslation } from '@/lib/i18n' -import { getLocaleFromUrl } from '@/utils/utilsRouter' -import { isMobile, removeExtraSpaces } from '@/utils/helpers' -import { getPageWidthClassName } from '@/store/createLayoutSlice' -import { getStorageValue } from '@/utils/storage' -import { REFRESH_INTERVAL } from '@/constants' import { initOnboard } from 'onboard-helpers' -import { messages as messagesEn } from '@/locales/en/messages.js' -import networks from '@/networks' -import usePageVisibleInterval from '@/hooks/usePageVisibleInterval' -import useStore from '@/store/useStore' import zhHans from 'onboard-helpers/src/locales/zh-Hans' import zhHant from 'onboard-helpers/src/locales/zh-Hant' - -import Page from '@/layout/index' +import { useCallback, useEffect, useState } from 'react' +import { HashRouter } from 'react-router-dom' +import { REFRESH_INTERVAL } from '@/constants' import GlobalStyle from '@/globalStyle' +import usePageVisibleInterval from '@/hooks/usePageVisibleInterval' +import Page from '@/layout/index' +import type { Locale } from '@/lib/i18n' +import { dynamicActivate, initTranslation } from '@/lib/i18n' +import { messages as messagesEn } from '@/locales/en/messages.js' +import networks from '@/networks' +import { getPageWidthClassName } from '@/store/createLayoutSlice' +import useStore from '@/store/useStore' +import { isMobile, removeExtraSpaces } from '@/utils/helpers' +import { getStorageValue } from '@/utils/storage' +import { getLocaleFromUrl } from '@/utils/utilsRouter' +import type { AppProps } from 'next/app' i18n.load({ en: messagesEn }) i18n.activate('en') diff --git a/apps/loan/src/pages/index.tsx b/apps/loan/src/pages/index.tsx index 7d39cbf3c..29ace570d 100644 --- a/apps/loan/src/pages/index.tsx +++ b/apps/loan/src/pages/index.tsx @@ -1,7 +1,7 @@ import type { NextPage } from 'next' -import { Navigate, Route, Routes } from 'react-router' import dynamic from 'next/dynamic' +import { Navigate, Route, Routes } from 'react-router' import { ROUTE } from '@/constants' diff --git a/apps/main/package.json b/apps/main/package.json index ba4b86826..496f13ebd 100644 --- a/apps/main/package.json +++ b/apps/main/package.json @@ -17,6 +17,12 @@ "i18n:compile": "lingui compile", "analyze": "ANALYZE=true next build" }, + "peerDependencies": { + "eslint-config-custom": "*", + "react": "*", + "react-dom": "*", + "tsconfig": "*" + }, "dependencies": { "@curvefi/api": "^2.63.10", "@hookform/error-message": "^2.0.1", @@ -41,9 +47,9 @@ "next-images": "^1.8.5", "numbro": "^2.4.0", "onboard-helpers": "*", - "react": "^18.2.0", + "react": "*", "react-aria": "3.22.0", - "react-dom": "^18.2.0", + "react-dom": "*", "react-hook-form": "^7.53.0", "react-is": "16.13.1", "react-router-dom": "^6.3.0", @@ -66,8 +72,8 @@ "@svgr/webpack": "^8.1.0", "@types/lodash": "^4.14.182", "@types/node": "17.0.24", - "@types/react": "^18.2.0", - "@types/react-dom": "^18.2.0", + "@types/react": "*", + "@types/react-dom": "*", "@types/styled-components": "5.1.14", "@types/validator": "^13.12.1", "eslint-config-custom": "*", @@ -76,8 +82,6 @@ "webpack": "^5.83.1" }, "resolutions": { - "@types/react": "^18", - "@types/react-dom": "^18", "styled-components": "^5" } } diff --git a/apps/main/src/components/PageCreatePool/constants.ts b/apps/main/src/components/PageCreatePool/constants.ts index 8f7ce6b0b..f42218c87 100644 --- a/apps/main/src/components/PageCreatePool/constants.ts +++ b/apps/main/src/components/PageCreatePool/constants.ts @@ -70,7 +70,7 @@ export const POOL_PRESETS: PRESETS = { stableSwapFee: '0.01', stableA: '1000', maExpTime: '600', - offpegFeeMultiplier: '2', + offpegFeeMultiplier: '5', }, }, 1: { diff --git a/apps/main/src/entities/chain/lib.ts b/apps/main/src/entities/chain/lib.ts index 730a78bc0..e22b29fd5 100644 --- a/apps/main/src/entities/chain/lib.ts +++ b/apps/main/src/entities/chain/lib.ts @@ -1,5 +1,5 @@ -import { useCurve } from '@/entities/curve' import networks from '@/networks' +import { useCurve } from '@/entities/curve' export const useChainId = () => { const { data: curve } = useCurve() diff --git a/apps/main/src/entities/chain/model/chain-validation.ts b/apps/main/src/entities/chain/model/chain-validation.ts index 0062ff7cd..e228a8d69 100644 --- a/apps/main/src/entities/chain/model/chain-validation.ts +++ b/apps/main/src/entities/chain/model/chain-validation.ts @@ -1,6 +1,6 @@ +import { enforce, group, test } from 'vest' import type { ChainQueryParams } from '@/entities/chain/types' import { createValidationSuite } from '@/shared/lib/validation' -import { enforce, group, test } from 'vest' export const chainValidationGroup = ({ chainId }: ChainQueryParams) => group('chainValidation', () => { diff --git a/apps/main/src/entities/gauge/api/estimate-gas.ts b/apps/main/src/entities/gauge/api/estimate-gas.ts index 24bdbfabd..ed0594b7b 100644 --- a/apps/main/src/entities/gauge/api/estimate-gas.ts +++ b/apps/main/src/entities/gauge/api/estimate-gas.ts @@ -1,9 +1,9 @@ +import type { QueryFunction } from '@tanstack/react-query' +import useStore from '@/store/useStore' import { assertGaugeValidity } from '@/entities/gauge/lib' import type { GaugeQueryKeyType, PoolMethodResult } from '@/entities/gauge/types' import { BD } from '@/shared/curve-lib' -import useStore from '@/store/useStore' import { logQuery } from '@/shared/lib/logging' -import type { QueryFunction } from '@tanstack/react-query' export const queryEstimateGasDepositRewardApprove: QueryFunction< PoolMethodResult<'gauge.estimateGas.depositRewardApprove'>, diff --git a/apps/main/src/entities/gauge/api/gauge-query.ts b/apps/main/src/entities/gauge/api/gauge-query.ts index 55fe429dc..58fdd5e28 100644 --- a/apps/main/src/entities/gauge/api/gauge-query.ts +++ b/apps/main/src/entities/gauge/api/gauge-query.ts @@ -9,13 +9,13 @@ * business logic and data fetching. */ +import { QueryFunction } from '@tanstack/react-query' +import { zeroAddress, type Address } from 'viem' +import useStore from '@/store/useStore' import { assertGaugeValidity } from '@/entities/gauge/lib' import { GaugeQueryKeyType, type PoolMethodResult } from '@/entities/gauge/types' import { BD } from '@/shared/curve-lib' -import useStore from '@/store/useStore' import { logQuery } from '@/shared/lib/logging' -import { QueryFunction } from '@tanstack/react-query' -import { zeroAddress, type Address } from 'viem' export const queryGaugeStatus: QueryFunction, GaugeQueryKeyType<'status'>> = async ({ queryKey, diff --git a/apps/main/src/entities/gauge/api/rewards-mutate.ts b/apps/main/src/entities/gauge/api/rewards-mutate.ts index 062f0b08c..54ff746df 100644 --- a/apps/main/src/entities/gauge/api/rewards-mutate.ts +++ b/apps/main/src/entities/gauge/api/rewards-mutate.ts @@ -9,10 +9,10 @@ * business logic and data fetching. */ +import { type MutateFunction } from '@tanstack/react-query' +import useStore from '@/store/useStore' import { assertGaugeValidity } from '@/entities/gauge/lib' import { GaugeQueryKeyType, type PoolMethodResult } from '@/entities/gauge/types' -import useStore from '@/store/useStore' -import { type MutateFunction } from '@tanstack/react-query' export const mutateAddRewardToken: MutateFunction< PoolMethodResult<'gauge.addReward'>, diff --git a/apps/main/src/entities/gauge/lib/reward-actions.ts b/apps/main/src/entities/gauge/lib/reward-actions.ts index d8cade790..774750498 100644 --- a/apps/main/src/entities/gauge/lib/reward-actions.ts +++ b/apps/main/src/entities/gauge/lib/reward-actions.ts @@ -10,6 +10,10 @@ * allowing components to easily access and manipulate gauge-related data. */ +import { t } from '@lingui/macro' +import { useIsMutating, useMutation, UseMutationResult } from '@tanstack/react-query' +import useTokensMapper from '@/hooks/useTokensMapper' +import useStore from '@/store/useStore' import * as models from '@/entities/gauge/model' import { gaugeKeys as keys } from '@/entities/gauge/model' import type { @@ -19,11 +23,7 @@ import type { GaugeQueryParams, PoolMethodResult, } from '@/entities/gauge/types' -import useTokensMapper from '@/hooks/useTokensMapper' import { queryClient } from '@/shared/api/query-client' -import useStore from '@/store/useStore' -import { t } from '@lingui/macro' -import { useIsMutating, useMutation, UseMutationResult } from '@tanstack/react-query' export const useAddRewardToken = ({ chainId, diff --git a/apps/main/src/entities/gauge/model/estimate-gas-options.ts b/apps/main/src/entities/gauge/model/estimate-gas-options.ts index bae3c1070..92e5dd5e8 100644 --- a/apps/main/src/entities/gauge/model/estimate-gas-options.ts +++ b/apps/main/src/entities/gauge/model/estimate-gas-options.ts @@ -10,17 +10,17 @@ * They encapsulate the data fetching logic, making it easier to manage and reuse across the application. */ +import { queryOptions } from '@tanstack/react-query' import { REFRESH_INTERVAL } from '@/constants' import * as api from '@/entities/gauge/api' -import * as conditions from '@/entities/gauge/model/enabled-conditions' import { gaugeKeys as keys } from '@/entities/gauge/model' +import * as conditions from '@/entities/gauge/model/enabled-conditions' import type { AddRewardParams, DepositRewardApproveParams, DepositRewardParams, GaugeQueryParams, } from '@/entities/gauge/types' -import { queryOptions } from '@tanstack/react-query' export const getEstimateGasDepositRewardApproveQueryOptions = ( params: DepositRewardApproveParams & GaugeQueryParams, diff --git a/apps/main/src/entities/gauge/model/gauge-validation.ts b/apps/main/src/entities/gauge/model/gauge-validation.ts index 512b87b34..f8e0ed54e 100644 --- a/apps/main/src/entities/gauge/model/gauge-validation.ts +++ b/apps/main/src/entities/gauge/model/gauge-validation.ts @@ -1,12 +1,12 @@ +import { t } from '@lingui/macro' +import { enforce, group, test } from 'vest' import { TIME_FRAMES } from '@/constants' +import useStore from '@/store/useStore' +import { formatNumber } from '@/utils' import type { AddRewardParams, CombinedGaugeParams, DepositRewardParams } from '@/entities/gauge/types' import { poolValidationGroup } from '@/entities/pool' -import { addressValidationFn, amountValidationFn, createValidationSuite, tokenIdValidationFn } from '@/shared/lib/validation' import { BD } from '@/shared/curve-lib' -import useStore from '@/store/useStore' -import { formatNumber } from '@/utils' -import { t } from '@lingui/macro' -import { enforce, group, test } from 'vest' +import { addressValidationFn, amountValidationFn, createValidationSuite, tokenIdValidationFn } from '@/shared/lib/validation' export const gaugeAddRewardTokenValidationGroup = ({ distributorId, rewardTokenId }: AddRewardParams) => group('gaugeAddRewardTokenValidationGroup', () => { diff --git a/apps/main/src/entities/gauge/model/query-options.ts b/apps/main/src/entities/gauge/model/query-options.ts index 35e066064..e81915a77 100644 --- a/apps/main/src/entities/gauge/model/query-options.ts +++ b/apps/main/src/entities/gauge/model/query-options.ts @@ -10,12 +10,12 @@ * They encapsulate the data fetching logic, making it easier to manage and reuse across the application. */ +import { queryOptions } from '@tanstack/react-query' import { REFRESH_INTERVAL } from '@/constants' import * as api from '@/entities/gauge/api' -import * as conditions from '@/entities/gauge/model/enabled-conditions' import { gaugeKeys as keys } from '@/entities/gauge/model' +import * as conditions from '@/entities/gauge/model/enabled-conditions' import type { DepositRewardApproveParams, GaugeQueryParams } from '@/entities/gauge/types' -import { queryOptions } from '@tanstack/react-query' export const getGaugeStatusQueryOptions = (params: GaugeQueryParams) => queryOptions({ diff --git a/apps/main/src/entities/gauge/types.ts b/apps/main/src/entities/gauge/types.ts index 05678b5e8..0ae8e64bd 100644 --- a/apps/main/src/entities/gauge/types.ts +++ b/apps/main/src/entities/gauge/types.ts @@ -10,12 +10,12 @@ * developer experience when working with gauge-related functionality. */ +import type { PoolTemplate } from '@curvefi/api/lib/pools' +import type { Address } from 'viem' import { gaugeKeys } from '@/entities/gauge/model' import type { PoolQueryParams } from '@/entities/pool/types' import type { ExtractQueryKeys, ExtractQueryKeyType } from '@/shared/types/api' import type { NestedFunction, NestedKeys } from '@/shared/types/nested' -import type { PoolTemplate } from '@curvefi/api/lib/pools' -import type { Address } from 'viem' export type PoolMethodResult> = Awaited>> diff --git a/apps/main/src/entities/pool/model/pool-validation.ts b/apps/main/src/entities/pool/model/pool-validation.ts index aac294bcf..b85d1333d 100644 --- a/apps/main/src/entities/pool/model/pool-validation.ts +++ b/apps/main/src/entities/pool/model/pool-validation.ts @@ -1,7 +1,7 @@ +import { enforce, group, test } from 'vest' import { chainValidationGroup } from '@/entities/chain' import type { PoolQueryParams } from '@/entities/pool/types' import { createValidationSuite } from '@/shared/lib/validation' -import { enforce, group, test } from 'vest' export const poolValidationGroup = ({ chainId, poolId }: PoolQueryParams) => group('poolValidation', () => { diff --git a/apps/main/src/entities/signer/lib.ts b/apps/main/src/entities/signer/lib.ts index 7fead2e6a..59ff355b0 100644 --- a/apps/main/src/entities/signer/lib.ts +++ b/apps/main/src/entities/signer/lib.ts @@ -1,6 +1,6 @@ -import useStore from '@/store/useStore' import { useMemo } from 'react' import type { Address } from 'viem' +import useStore from '@/store/useStore' export const useSignerAddress = (): { data: Address | undefined } => { const onboardInstance = useStore((state) => state.wallet.onboard) diff --git a/apps/main/src/entities/token/lib.ts b/apps/main/src/entities/token/lib.ts index 8e51a0d16..f474067a7 100644 --- a/apps/main/src/entities/token/lib.ts +++ b/apps/main/src/entities/token/lib.ts @@ -1,7 +1,7 @@ -import useTokensMapper from '@/hooks/useTokensMapper' -import useStore from '@/store/useStore' import { useMemo } from 'react' import type { Address } from 'viem' +import useTokensMapper from '@/hooks/useTokensMapper' +import useStore from '@/store/useStore' import { useChainId } from '@/entities/chain' export const useTokens = (addresses: (Address | undefined)[]): { data: (Token | undefined)[] } => { diff --git a/apps/main/src/features/add-gauge-reward-token/model/validation-suite.ts b/apps/main/src/features/add-gauge-reward-token/model/validation-suite.ts index dd9d35bb9..caecef970 100644 --- a/apps/main/src/features/add-gauge-reward-token/model/validation-suite.ts +++ b/apps/main/src/features/add-gauge-reward-token/model/validation-suite.ts @@ -1,5 +1,5 @@ -import { gaugeAddRewardTokenValidationGroup } from '@/entities/gauge' import type { AddRewardFormValues } from '@/features/add-gauge-reward-token/types' +import { gaugeAddRewardTokenValidationGroup } from '@/entities/gauge' import { createValidationSuite } from '@/shared/lib/validation' export const addGaugeRewardTokenValidationSuite = createValidationSuite( diff --git a/apps/main/src/features/add-gauge-reward-token/ui/AddRewardToken.tsx b/apps/main/src/features/add-gauge-reward-token/ui/AddRewardToken.tsx index 2e9faa729..8ccd17224 100644 --- a/apps/main/src/features/add-gauge-reward-token/ui/AddRewardToken.tsx +++ b/apps/main/src/features/add-gauge-reward-token/ui/AddRewardToken.tsx @@ -1,21 +1,21 @@ +import { FormErrorsDisplay } from '@/ui/FormErrorsDisplay' +import TxInfoBar from '@/ui/TxInfoBar' +import { vestResolver } from '@hookform/resolvers/vest' import { t } from '@lingui/macro' import React, { useCallback } from 'react' import { FormProvider, useForm } from 'react-hook-form' -import { useAddRewardToken, useGaugeRewardsDistributors, useIsDepositRewardAvailable } from '@/entities/gauge' +import { zeroAddress } from 'viem' +import AlertFormError from '@/components/AlertFormError' +import networks from '@/networks' import { addGaugeRewardTokenValidationSuite } from '@/features/add-gauge-reward-token/model' import type { AddRewardFormValues, AddRewardTokenProps } from '@/features/add-gauge-reward-token/types' -import networks from '@/networks' -import TxInfoBar from '@/ui/TxInfoBar' +import { DistributorInput, EstimatedGasInfo, FormActions, TokenSelector } from '@/features/add-gauge-reward-token/ui' +import { useAddRewardToken, useGaugeRewardsDistributors, useIsDepositRewardAvailable } from '@/entities/gauge' import { useSignerAddress } from '@/entities/signer' -import { DistributorInput, EstimatedGasInfo, FormActions, TokenSelector } from '@/features/add-gauge-reward-token/ui' import { formDefaultOptions } from '@/shared/model/form' -import { FormErrorsDisplay } from '@/ui/FormErrorsDisplay' import { FlexContainer, FormContainer, FormFieldsContainer } from '@/shared/ui/styled-containers' -import { vestResolver } from '@hookform/resolvers/vest' -import { zeroAddress } from 'viem' -import AlertFormError from '@/components/AlertFormError' export const AddRewardToken: React.FC = ({ chainId, poolId }) => { const { data: signerAddress } = useSignerAddress() diff --git a/apps/main/src/features/add-gauge-reward-token/ui/DistributorInput.tsx b/apps/main/src/features/add-gauge-reward-token/ui/DistributorInput.tsx index cfc21105d..d55f56fba 100644 --- a/apps/main/src/features/add-gauge-reward-token/ui/DistributorInput.tsx +++ b/apps/main/src/features/add-gauge-reward-token/ui/DistributorInput.tsx @@ -1,10 +1,10 @@ +import InputProvider, { InputDebounced } from '@/ui/InputComp' +import { t } from '@lingui/macro' import React from 'react' import { useFormContext } from 'react-hook-form' -import { t } from '@lingui/macro' -import InputProvider, { InputDebounced } from '@/ui/InputComp' -import { FlexItemDistributor, SubTitle } from './styled' -import type { AddRewardFormValues } from '@/features/add-gauge-reward-token/types' import type { Address } from 'viem' +import type { AddRewardFormValues } from '@/features/add-gauge-reward-token/types' +import { FlexItemDistributor, SubTitle } from './styled' export const DistributorInput: React.FC<{ disabled: boolean }> = ({ disabled }) => { const { setValue, formState, trigger, watch } = useFormContext() diff --git a/apps/main/src/features/add-gauge-reward-token/ui/FormActions.tsx b/apps/main/src/features/add-gauge-reward-token/ui/FormActions.tsx index 2b0368cb3..70262fc4a 100644 --- a/apps/main/src/features/add-gauge-reward-token/ui/FormActions.tsx +++ b/apps/main/src/features/add-gauge-reward-token/ui/FormActions.tsx @@ -1,8 +1,8 @@ -import { useAddRewardTokenIsMutating, useIsDepositRewardAvailable } from '@/entities/gauge' -import { useAddRewardTokenFormContext } from '@/features/add-gauge-reward-token/lib' -import { StyledButton } from '@/features/add-gauge-reward-token/ui/styled' import { t } from '@lingui/macro' import React from 'react' +import { useAddRewardTokenFormContext } from '@/features/add-gauge-reward-token/lib' +import { StyledButton } from '@/features/add-gauge-reward-token/ui/styled' +import { useAddRewardTokenIsMutating, useIsDepositRewardAvailable } from '@/entities/gauge' export const FormActions: React.FC<{ chainId: ChainId; poolId: string }> = ({ chainId, poolId }) => { const { diff --git a/apps/main/src/features/add-gauge-reward-token/ui/TokenSelector.tsx b/apps/main/src/features/add-gauge-reward-token/ui/TokenSelector.tsx index c202e78b6..d5386f086 100644 --- a/apps/main/src/features/add-gauge-reward-token/ui/TokenSelector.tsx +++ b/apps/main/src/features/add-gauge-reward-token/ui/TokenSelector.tsx @@ -1,14 +1,14 @@ -import { NETWORK_TOKEN } from '@/constants' -import { useGaugeRewardsDistributors } from '@/entities/gauge' -import type { AddRewardFormValues } from '@/features/add-gauge-reward-token/types' -import { FlexItemToken, StyledTokenComboBox, SubTitle } from '@/features/add-gauge-reward-token/ui' -import useTokensMapper from '@/hooks/useTokensMapper' -import { getImageBaseUrl } from '@/utils/utilsCurvejs' import { NETWORK_CONSTANTS } from '@curvefi/api/lib/curve' import { t } from '@lingui/macro' import React, { useEffect, useMemo } from 'react' import { useFormContext } from 'react-hook-form' import { isAddressEqual, zeroAddress, type Address } from 'viem' +import { NETWORK_TOKEN } from '@/constants' +import useTokensMapper from '@/hooks/useTokensMapper' +import { getImageBaseUrl } from '@/utils/utilsCurvejs' +import type { AddRewardFormValues } from '@/features/add-gauge-reward-token/types' +import { FlexItemToken, StyledTokenComboBox, SubTitle } from '@/features/add-gauge-reward-token/ui' +import { useGaugeRewardsDistributors } from '@/entities/gauge' export const TokenSelector: React.FC<{ chainId: ChainId; poolId: string; disabled: boolean }> = ({ chainId, diff --git a/apps/main/src/features/add-gauge-reward-token/ui/styled.tsx b/apps/main/src/features/add-gauge-reward-token/ui/styled.tsx index ab1a66292..02ea7de16 100644 --- a/apps/main/src/features/add-gauge-reward-token/ui/styled.tsx +++ b/apps/main/src/features/add-gauge-reward-token/ui/styled.tsx @@ -1,6 +1,6 @@ -import TokenComboBox from '@/components/ComboBoxSelectToken' import Button from '@/ui/Button' import styled from 'styled-components' +import TokenComboBox from '@/components/ComboBoxSelectToken' export const FlexItemToken = styled.div` flex: 0 0 auto; diff --git a/apps/main/src/features/deposit-gauge-reward/model/default-values.ts b/apps/main/src/features/deposit-gauge-reward/model/default-values.ts index b7a75e6d6..c49cd30a3 100644 --- a/apps/main/src/features/deposit-gauge-reward/model/default-values.ts +++ b/apps/main/src/features/deposit-gauge-reward/model/default-values.ts @@ -1,6 +1,6 @@ import { zeroAddress } from 'viem' -import { DepositRewardStep, type DepositRewardFormValues } from '@/features/deposit-gauge-reward/types' import { TIME_FRAMES } from '@/constants' +import { DepositRewardStep, type DepositRewardFormValues } from '@/features/deposit-gauge-reward/types' export const DepositRewardDefaultValues: DepositRewardFormValues = { rewardTokenId: zeroAddress, diff --git a/apps/main/src/features/deposit-gauge-reward/model/validation-suite.ts b/apps/main/src/features/deposit-gauge-reward/model/validation-suite.ts index 7d724af3b..cb7d86dc0 100644 --- a/apps/main/src/features/deposit-gauge-reward/model/validation-suite.ts +++ b/apps/main/src/features/deposit-gauge-reward/model/validation-suite.ts @@ -1,7 +1,7 @@ -import { gaugeDepositRewardValidationGroup } from '@/entities/gauge' +import { enforce, test } from 'vest' import { DepositRewardStep, type DepositRewardFormValues } from '@/features/deposit-gauge-reward/types' +import { gaugeDepositRewardValidationGroup } from '@/entities/gauge' import { createValidationSuite } from '@/shared/lib/validation' -import { enforce, test } from 'vest' const depositRewardValidationGroup = (data: T) => { gaugeDepositRewardValidationGroup(data) diff --git a/apps/main/src/features/deposit-gauge-reward/types/index.ts b/apps/main/src/features/deposit-gauge-reward/types/index.ts index 519fb9bc5..bc7eab46e 100644 --- a/apps/main/src/features/deposit-gauge-reward/types/index.ts +++ b/apps/main/src/features/deposit-gauge-reward/types/index.ts @@ -1,5 +1,5 @@ -import type { CombinedGaugeParams } from '@/entities/gauge' import { Address } from 'viem' +import type { CombinedGaugeParams } from '@/entities/gauge' export enum DepositRewardStep { APPROVAL = 'APPROVAL', diff --git a/apps/main/src/features/deposit-gauge-reward/ui/ActionsStepper.tsx b/apps/main/src/features/deposit-gauge-reward/ui/ActionsStepper.tsx index c9a96d693..3e997b75a 100644 --- a/apps/main/src/features/deposit-gauge-reward/ui/ActionsStepper.tsx +++ b/apps/main/src/features/deposit-gauge-reward/ui/ActionsStepper.tsx @@ -1,8 +1,3 @@ -import { REFRESH_INTERVAL } from '@/constants' -import { useDepositReward, useDepositRewardApprove, useGaugeDepositRewardIsApproved } from '@/entities/gauge' -import { DepositRewardFormValues, DepositRewardStep } from '@/features/deposit-gauge-reward/types' -import { StepperContainer } from '@/features/deposit-gauge-reward/ui' -import networks from '@/networks' import Stepper from '@/ui/Stepper' import { getStepStatus } from '@/ui/Stepper/helpers' import type { Step } from '@/ui/Stepper/types' @@ -10,6 +5,11 @@ import TxInfoBar from '@/ui/TxInfoBar' import { t } from '@lingui/macro' import { useCallback, useLayoutEffect, useMemo, useState } from 'react' import { useFormContext } from 'react-hook-form' +import { REFRESH_INTERVAL } from '@/constants' +import networks from '@/networks' +import { DepositRewardFormValues, DepositRewardStep } from '@/features/deposit-gauge-reward/types' +import { StepperContainer } from '@/features/deposit-gauge-reward/ui' +import { useDepositReward, useDepositRewardApprove, useGaugeDepositRewardIsApproved } from '@/entities/gauge' type TxInfo = { description: string diff --git a/apps/main/src/features/deposit-gauge-reward/ui/AmountTokenInput.tsx b/apps/main/src/features/deposit-gauge-reward/ui/AmountTokenInput.tsx index 7940b223d..1ef3c864b 100644 --- a/apps/main/src/features/deposit-gauge-reward/ui/AmountTokenInput.tsx +++ b/apps/main/src/features/deposit-gauge-reward/ui/AmountTokenInput.tsx @@ -1,12 +1,12 @@ +import { InputDebounced, InputMaxBtn } from '@/ui/InputComp' +import { t } from '@lingui/macro' +import { useCallback, useMemo, type Key } from 'react' +import { useFormContext } from 'react-hook-form' +import { Address, isAddressEqual } from 'viem' import { NETWORK_TOKEN } from '@/constants' -import { useImageBaseUrl } from '@/entities/chain' -import { - useDepositRewardApproveIsMutating, - useDepositRewardIsMutating, - useGaugeRewardsDistributors, -} from '@/entities/gauge' -import { useIsSignerConnected, useSignerAddress, useTokensBalances } from '@/entities/signer' -import { useTokens } from '@/entities/token' +import useTokensMapper from '@/hooks/useTokensMapper' +import useStore from '@/store/useStore' +import { formatNumber } from '@/utils' import { DepositRewardStep, type DepositRewardFormValues } from '@/features/deposit-gauge-reward/types' import { FlexItemAmount, @@ -15,15 +15,15 @@ import { StyledInputProvider, StyledTokenComboBox, } from '@/features/deposit-gauge-reward/ui/styled' -import useTokensMapper from '@/hooks/useTokensMapper' +import { useImageBaseUrl } from '@/entities/chain' +import { + useDepositRewardApproveIsMutating, + useDepositRewardIsMutating, + useGaugeRewardsDistributors, +} from '@/entities/gauge' +import { useIsSignerConnected, useSignerAddress, useTokensBalances } from '@/entities/signer' +import { useTokens } from '@/entities/token' import { FlexContainer } from '@/shared/ui/styled-containers' -import useStore from '@/store/useStore' -import { InputDebounced, InputMaxBtn } from '@/ui/InputComp' -import { formatNumber } from '@/utils' -import { t } from '@lingui/macro' -import { useCallback, useMemo, type Key } from 'react' -import { useFormContext } from 'react-hook-form' -import { Address, isAddressEqual } from 'viem' export const AmountTokenInput: React.FC<{ chainId: ChainId diff --git a/apps/main/src/features/deposit-gauge-reward/ui/DepositReward.tsx b/apps/main/src/features/deposit-gauge-reward/ui/DepositReward.tsx index cdcae1c55..d758e5e85 100644 --- a/apps/main/src/features/deposit-gauge-reward/ui/DepositReward.tsx +++ b/apps/main/src/features/deposit-gauge-reward/ui/DepositReward.tsx @@ -1,4 +1,7 @@ -import { useGaugeRewardsDistributors } from '@/entities/gauge' +import { FormErrorsDisplay } from '@/ui/FormErrorsDisplay' +import { vestResolver } from '@hookform/resolvers/vest' +import { FormProvider, useForm } from 'react-hook-form' +import AlertFormError from '@/components/AlertFormError' import { DepositRewardDefaultValues, depositRewardValidationSuite } from '@/features/deposit-gauge-reward/model' import { DepositRewardFormValues } from '@/features/deposit-gauge-reward/types' import { @@ -8,13 +11,10 @@ import { GasEstimation, HelperFields, } from '@/features/deposit-gauge-reward/ui' +import { useGaugeRewardsDistributors } from '@/entities/gauge' import { formDefaultOptions } from '@/shared/model/form' -import { FormErrorsDisplay } from '@/ui/FormErrorsDisplay' import { BlockSkeleton } from '@/shared/ui/skeleton' import { FormContainer, FormFieldsContainer, GroupedFieldsContainer } from '@/shared/ui/styled-containers' -import { vestResolver } from '@hookform/resolvers/vest' -import { FormProvider, useForm } from 'react-hook-form' -import AlertFormError from '@/components/AlertFormError' export const DepositReward: React.FC<{ chainId: ChainId diff --git a/apps/main/src/features/deposit-gauge-reward/ui/EpochInput.tsx b/apps/main/src/features/deposit-gauge-reward/ui/EpochInput.tsx index 0fbeb9f7b..034119c23 100644 --- a/apps/main/src/features/deposit-gauge-reward/ui/EpochInput.tsx +++ b/apps/main/src/features/deposit-gauge-reward/ui/EpochInput.tsx @@ -1,11 +1,11 @@ +import { InputDebounced } from '@/ui/InputComp' +import { useCallback } from 'react' +import { useFormContext } from 'react-hook-form' import { TIME_FRAMES } from '@/constants' -import { useDepositRewardApproveIsMutating, useDepositRewardIsMutating } from '@/entities/gauge' import type { DepositRewardFormValues } from '@/features/deposit-gauge-reward/types' import { EpochInputWrapper, EpochLabel, StyledInputProvider } from '@/features/deposit-gauge-reward/ui' +import { useDepositRewardApproveIsMutating, useDepositRewardIsMutating } from '@/entities/gauge' import { FlexContainer } from '@/shared/ui/styled-containers' -import { InputDebounced } from '@/ui/InputComp' -import { useCallback } from 'react' -import { useFormContext } from 'react-hook-form' export const EpochInput: React.FC<{ chainId: ChainId; poolId: string }> = ({ chainId, poolId }) => { const { setValue, formState, watch } = useFormContext() diff --git a/apps/main/src/features/deposit-gauge-reward/ui/GasEstimation.tsx b/apps/main/src/features/deposit-gauge-reward/ui/GasEstimation.tsx index 59a31f7b3..de56a9501 100644 --- a/apps/main/src/features/deposit-gauge-reward/ui/GasEstimation.tsx +++ b/apps/main/src/features/deposit-gauge-reward/ui/GasEstimation.tsx @@ -1,9 +1,9 @@ +import React from 'react' +import { useFormContext } from 'react-hook-form' import DetailInfoEstGas from '@/components/DetailInfoEstGas' +import { DepositRewardStep, type DepositRewardFormValues } from '@/features/deposit-gauge-reward/types' import { useEstimateGasDepositReward, useEstimateGasDepositRewardApprove } from '@/entities/gauge' import { FlexContainer } from '@/shared/ui/styled-containers' -import { DepositRewardStep, type DepositRewardFormValues } from '@/features/deposit-gauge-reward/types' -import React from 'react' -import { useFormContext } from 'react-hook-form' export const GasEstimation: React.FC<{ chainId: ChainId diff --git a/apps/main/src/features/deposit-gauge-reward/ui/HelperFields.tsx b/apps/main/src/features/deposit-gauge-reward/ui/HelperFields.tsx index 2afd95f60..9f1d08dcb 100644 --- a/apps/main/src/features/deposit-gauge-reward/ui/HelperFields.tsx +++ b/apps/main/src/features/deposit-gauge-reward/ui/HelperFields.tsx @@ -1,8 +1,8 @@ +import { useFormContext } from 'react-hook-form' import FieldHelperUsdRate from '@/components/FieldHelperUsdRate' -import { useTokensUSDRates } from '@/entities/token' import { type DepositRewardFormValues } from '@/features/deposit-gauge-reward/types' +import { useTokensUSDRates } from '@/entities/token' import { FlexContainer } from '@/shared/ui/styled-containers' -import { useFormContext } from 'react-hook-form' export const HelperFields: React.FC<{ chainId: ChainId; poolId: string }> = ({ chainId, poolId }) => { const { watch } = useFormContext() diff --git a/apps/main/src/features/deposit-gauge-reward/ui/styled.tsx b/apps/main/src/features/deposit-gauge-reward/ui/styled.tsx index 31288db32..9c7378070 100644 --- a/apps/main/src/features/deposit-gauge-reward/ui/styled.tsx +++ b/apps/main/src/features/deposit-gauge-reward/ui/styled.tsx @@ -1,6 +1,6 @@ -import TokenComboBox from '@/components/ComboBoxSelectToken' import InputProvider from '@/ui/InputComp' import styled from 'styled-components' +import TokenComboBox from '@/components/ComboBoxSelectToken' export const StyledInputProvider = styled(InputProvider)` width: 100%; diff --git a/apps/main/src/pages/404.tsx b/apps/main/src/pages/404.tsx index 2a831696f..3714455a9 100644 --- a/apps/main/src/pages/404.tsx +++ b/apps/main/src/pages/404.tsx @@ -1,7 +1,7 @@ +import Error404 from '@/ui/Error404' import type { NextPage } from 'next' import DocumentHead from '@/layout/default/DocumentHead' -import Error404 from '@/ui/Error404' const Page404: NextPage = () => { return ( diff --git a/apps/main/src/pages/_app.tsx b/apps/main/src/pages/_app.tsx index 7380b9924..6d69f07b8 100644 --- a/apps/main/src/pages/_app.tsx +++ b/apps/main/src/pages/_app.tsx @@ -1,33 +1,30 @@ -import type { AppProps } from 'next/app' - import '@/globals.css' +import 'focus-visible' +import 'intersection-observer' +import { QueryProvider } from '@/ui/QueryProvider' +import { getPageWidthClassName } from '@/ui/utils' import { i18n } from '@lingui/core' import { I18nProvider } from '@lingui/react' import { OverlayProvider } from '@react-aria/overlays' -import 'focus-visible' -import 'intersection-observer' import delay from 'lodash/delay' +import { initOnboard } from 'onboard-helpers' +import zhHans from 'onboard-helpers/src/locales/zh-Hans' +import zhHant from 'onboard-helpers/src/locales/zh-Hant' import { useCallback, useEffect, useState } from 'react' import { I18nProvider as AriaI18nProvider } from 'react-aria' import { HashRouter } from 'react-router-dom' - import { REFRESH_INTERVAL } from '@/constants' +import GlobalStyle from '@/globalStyle' import usePageVisibleInterval from '@/hooks/usePageVisibleInterval' +import Page from '@/layout/default' import { dynamicActivate, initTranslation, updateAppLocale } from '@/lib/i18n' import { messages as messagesEn } from '@/locales/en/messages.js' import networks from '@/networks' import useStore from '@/store/useStore' -import { getPageWidthClassName } from '@/ui/utils' import { getStorageValue, isMobile, removeExtraSpaces } from '@/utils' import { getLocaleFromUrl } from '@/utils/utilsRouter' -import { initOnboard } from 'onboard-helpers' -import zhHans from 'onboard-helpers/src/locales/zh-Hans' -import zhHant from 'onboard-helpers/src/locales/zh-Hant' - -import GlobalStyle from '@/globalStyle' -import Page from '@/layout/default' +import type { AppProps } from 'next/app' import { persister, queryClient } from '@/shared/api/query-client' -import { QueryProvider } from '@/ui/QueryProvider' i18n.load({ en: messagesEn }) i18n.activate('en') diff --git a/apps/main/src/pages/index.tsx b/apps/main/src/pages/index.tsx index 1e97290ca..36e20758a 100644 --- a/apps/main/src/pages/index.tsx +++ b/apps/main/src/pages/index.tsx @@ -1,7 +1,7 @@ import type { NextPage } from 'next' -import { Navigate, Route, Routes } from 'react-router' import dynamic from 'next/dynamic' +import { Navigate, Route, Routes } from 'react-router' import { ROUTE } from '@/constants' diff --git a/apps/main/src/widgets/manage-gauge/model.ts b/apps/main/src/widgets/manage-gauge/model.ts index 265aad551..b7d2b7e89 100644 --- a/apps/main/src/widgets/manage-gauge/model.ts +++ b/apps/main/src/widgets/manage-gauge/model.ts @@ -1,6 +1,6 @@ import type { Tab } from '@/ui/TabSlider/TabSlider' -import type { TabValue } from '@/widgets/manage-gauge/types' import { t } from '@lingui/macro' +import type { TabValue } from '@/widgets/manage-gauge/types' export const sliderTabs: Tab[] = [ { diff --git a/apps/main/src/widgets/manage-gauge/ui/ManageGauge.tsx b/apps/main/src/widgets/manage-gauge/ui/ManageGauge.tsx index 42e4e9ec8..8dec5aa34 100644 --- a/apps/main/src/widgets/manage-gauge/ui/ManageGauge.tsx +++ b/apps/main/src/widgets/manage-gauge/ui/ManageGauge.tsx @@ -1,12 +1,12 @@ -import { useGaugeManager, useGaugeRewardsDistributors } from '@/entities/gauge' -import { useSignerAddress } from '@/entities/signer' -import AddRewardToken from '@/features/add-gauge-reward-token' -import DepositReward from '@/features/deposit-gauge-reward' import TabSlider, { Tab } from '@/ui/TabSlider/TabSlider' -import type { TabValue } from '@/widgets/manage-gauge/types' import { useCallback, useMemo, useState } from 'react' import { isAddressEqual, type Address } from 'viem' import { sliderTabs } from '@/widgets/manage-gauge/model' +import type { TabValue } from '@/widgets/manage-gauge/types' +import AddRewardToken from '@/features/add-gauge-reward-token' +import DepositReward from '@/features/deposit-gauge-reward' +import { useGaugeManager, useGaugeRewardsDistributors } from '@/entities/gauge' +import { useSignerAddress } from '@/entities/signer' const ManageGauge: React.FC<{ poolId: string; chainId: ChainId }> = ({ poolId, chainId }) => { const [activeTab, setActiveTab] = useState('add_reward') diff --git a/package.json b/package.json index 9186e1017..6dc701209 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,7 @@ "build": "turbo build", "dev": "turbo dev --parallel", "lint": "turbo lint", + "lint:fix": "turbo lint -- --fix", "format": "prettier --write \"**/*.{ts,tsx,md}\"", "prepare": "is-ci || husky" }, @@ -21,12 +22,17 @@ "@commitlint/cli": "^19.5.0", "@commitlint/config-conventional": "^19.5.0", "@commitlint/load": "19.5.0", + "@types/react": "^18.3.1", + "@types/react-dom": "^18.3.1", "cross-env": "^7.0.3", + "eslint": "^8.57.1", "eslint-config-custom": "*", "husky": "^9.1.6", "is-ci": "^3.0.1", "lint-staged": "15.2.10", "prettier": "latest", + "react": "^18.3.1", + "react-dom": "^18.3.1", "turbo": "^2.1.2", "typescript": "^5" }, @@ -44,5 +50,12 @@ "prettier --write", "eslint --fix" ] + }, + "resolutions": { + "eslint": "^8.57.1", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "@types/react": "^18.3.1", + "@types/react-dom": "^18.3.1" } } diff --git a/packages/curve-lib/package.json b/packages/curve-lib/package.json index aa9735417..e6f8e0a32 100644 --- a/packages/curve-lib/package.json +++ b/packages/curve-lib/package.json @@ -17,8 +17,16 @@ "react": "^18.2.0" }, "devDependencies": { - "eslint": "^8.57.1", + "@types/react": "*", + "@types/react-dom": "*", "eslint-config-custom": "*", "tsconfig": "*" + }, + "peerDependencies": { + "eslint": "*", + "eslint-config-custom": "*", + "react": "*", + "react-dom": "*", + "tsconfig": "*" } } diff --git a/packages/curve-ui-kit/.gitkeep b/packages/curve-ui-kit/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/packages/eslint-config-custom/.gitignore b/packages/eslint-config-custom/.gitignore new file mode 100644 index 000000000..a7554c2fc --- /dev/null +++ b/packages/eslint-config-custom/.gitignore @@ -0,0 +1,2 @@ +# dependencies +/node_modules \ No newline at end of file diff --git a/packages/eslint-config-custom/node_modules/.bin/eslint b/packages/eslint-config-custom/node_modules/.bin/eslint deleted file mode 120000 index 7dd6b3986..000000000 --- a/packages/eslint-config-custom/node_modules/.bin/eslint +++ /dev/null @@ -1 +0,0 @@ -../../../../node_modules/eslint/bin/eslint.js \ No newline at end of file diff --git a/packages/eslint-config-custom/node_modules/.bin/eslint-config-prettier b/packages/eslint-config-custom/node_modules/.bin/eslint-config-prettier deleted file mode 120000 index 642ac0792..000000000 --- a/packages/eslint-config-custom/node_modules/.bin/eslint-config-prettier +++ /dev/null @@ -1 +0,0 @@ -../../../../node_modules/eslint-config-prettier/bin/cli.js \ No newline at end of file diff --git a/packages/eslint-config-custom/package.json b/packages/eslint-config-custom/package.json index 1f2a09e21..2dafc9efb 100644 --- a/packages/eslint-config-custom/package.json +++ b/packages/eslint-config-custom/package.json @@ -9,7 +9,7 @@ "@tanstack/eslint-plugin-query": "^5.59.1", "@typescript-eslint/eslint-plugin": "^8.6.0", "@typescript-eslint/parser": "^8.6.0", - "eslint": "^8.57.1", + "eslint": "*", "eslint-config-next": "^14.2.11", "eslint-config-prettier": "^9.1.0", "eslint-config-turbo": "^2.1.2", @@ -18,5 +18,10 @@ "eslint-plugin-import": "^2.31.0", "eslint-plugin-react": "7.36.1", "prettier-eslint": "^16.3.0" + }, + "peerDependencies": { + "eslint": "*", + "react": "*", + "react-dom": "*" } } diff --git a/packages/external-rewards/package.json b/packages/external-rewards/package.json index c8f66532e..86a2bcd46 100644 --- a/packages/external-rewards/package.json +++ b/packages/external-rewards/package.json @@ -9,7 +9,12 @@ "lint": "eslint \"**/*.ts*\"" }, "devDependencies": { - "eslint": "^8.57.1", + "eslint": "*", + "eslint-config-custom": "*", + "tsconfig": "*" + }, + "peerDependencies": { + "eslint": "*", "eslint-config-custom": "*", "tsconfig": "*" } diff --git a/packages/external-rewards/src/campaigns/Etherfi.json b/packages/external-rewards/src/campaigns/Etherfi.json index 35b74db60..2b1c17795 100644 --- a/packages/external-rewards/src/campaigns/Etherfi.json +++ b/packages/external-rewards/src/campaigns/Etherfi.json @@ -112,6 +112,18 @@ "multiplier": "4", "tags": ["points"], "lock": "false" + }, + { + "id": "null", + "action": "", + "description": "null", + "campaignStart": "0", + "campaignEnd": "1770000000", + "address": "0xabaf76590478f2fe0b396996f55f0b61101e9502", + "network": "ethereum", + "multiplier": "4", + "tags": ["points"], + "lock": "false" } ] } diff --git a/packages/external-rewards/src/campaigns/Fraxtal.json b/packages/external-rewards/src/campaigns/Fraxtal.json index b18e64406..8ec5e60da 100644 --- a/packages/external-rewards/src/campaigns/Fraxtal.json +++ b/packages/external-rewards/src/campaigns/Fraxtal.json @@ -100,8 +100,42 @@ "multiplier": "6.875", "tags": ["points"], "lock": "false" + }, + { + "id": "null", + "action": "lp", + "description": "null", + "campaignStart": "0", + "campaignEnd": "1770000000", + "address": "0x6e9b6660b94fa74a8087d7ee14dc28698249d242", + "network": "fraxtal", + "multiplier": "1.875", + "tags": ["points"], + "lock": "false" + }, + { + "id": "null", + "action": "lp", + "description": "null", + "campaignStart": "0", + "campaignEnd": "1770000000", + "address": "0xf2f426fe123de7b769b2d4f8c911512f065225d3", + "network": "fraxtal", + "multiplier": "2.3125", + "tags": ["points"], + "lock": "false" + }, + { + "id": "null", + "action": "lp", + "description": "null", + "campaignStart": "0", + "campaignEnd": "1770000000", + "address": "0x8fd56bcfba75718dd1b920c854256b0c5f4a7401", + "network": "fraxtal", + "multiplier": "1.875", + "tags": ["points"], + "lock": "false" } ] } - - diff --git a/packages/external-rewards/src/campaigns/Lombard.json b/packages/external-rewards/src/campaigns/Lombard.json index abdb16de2..c893dabda 100644 --- a/packages/external-rewards/src/campaigns/Lombard.json +++ b/packages/external-rewards/src/campaigns/Lombard.json @@ -16,6 +16,18 @@ "multiplier": "3", "tags": ["points"], "lock": "false" + }, + { + "id": "null", + "action": "lp", + "description": "null", + "campaignStart": "0", + "campaignEnd": "1770000000", + "address": "0xabaf76590478f2fe0b396996f55f0b61101e9502", + "network": "ethereum", + "multiplier": "3", + "tags": ["points"], + "lock": "false" } ] } diff --git a/packages/onboard-helpers/package.json b/packages/onboard-helpers/package.json index 7eba85dff..491a4d850 100644 --- a/packages/onboard-helpers/package.json +++ b/packages/onboard-helpers/package.json @@ -26,10 +26,12 @@ }, "devDependencies": { "@babel/core": "^7.25.2", - "@babel/runtime": "^7.25.6" + "@babel/runtime": "^7.25.6", + "@types/react": "*", + "@types/react-dom": "*" }, "peerDependencies": { - "react": "^18", - "react-dom": "^18" + "react": "*", + "react-dom": "*" } } diff --git a/packages/ui/package.json b/packages/ui/package.json index c564c1b2d..0b90164a0 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -19,17 +19,18 @@ }, "devDependencies": { "@types/carbon__icons-react": "11.16.0", - "@types/react": "^18.2.0", - "@types/react-dom": "^18.2.0", + "@types/react": "*", + "@types/react-dom": "*", "@types/styled-components": "5.1.14", - "eslint": "^8.57.1", + "eslint": "*", "eslint-config-custom": "*", "tsconfig": "*" }, "peerDependencies": { "curve-lib": "*", - "react": "^18", - "react-dom": "^18", + "eslint": "*", + "react": "*", + "react-dom": "*", "react-router-dom": "^6", "styled-components": "^5" } diff --git a/yarn.lock b/yarn.lock index 9875f2b09..8fa3101b1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2404,13 +2404,6 @@ __metadata: languageName: node linkType: hard -"@eslint/js@npm:8.57.0": - version: 8.57.0 - resolution: "@eslint/js@npm:8.57.0" - checksum: 10c0/9a518bb8625ba3350613903a6d8c622352ab0c6557a59fe6ff6178bf882bf57123f9d92aa826ee8ac3ee74b9c6203fe630e9ee00efb03d753962dcf65ee4bd94 - languageName: node - linkType: hard - "@eslint/js@npm:8.57.1": version: 8.57.1 resolution: "@eslint/js@npm:8.57.1" @@ -3850,17 +3843,6 @@ __metadata: languageName: node linkType: hard -"@humanwhocodes/config-array@npm:^0.11.14": - version: 0.11.14 - resolution: "@humanwhocodes/config-array@npm:0.11.14" - dependencies: - "@humanwhocodes/object-schema": "npm:^2.0.2" - debug: "npm:^4.3.1" - minimatch: "npm:^3.0.5" - checksum: 10c0/66f725b4ee5fdd8322c737cb5013e19fac72d4d69c8bf4b7feb192fcb83442b035b92186f8e9497c220e58b2d51a080f28a73f7899bc1ab288c3be172c467541 - languageName: node - linkType: hard - "@humanwhocodes/config-array@npm:^0.13.0": version: 0.13.0 resolution: "@humanwhocodes/config-array@npm:0.13.0" @@ -3879,7 +3861,7 @@ __metadata: languageName: node linkType: hard -"@humanwhocodes/object-schema@npm:^2.0.2, @humanwhocodes/object-schema@npm:^2.0.3": +"@humanwhocodes/object-schema@npm:^2.0.3": version: 2.0.3 resolution: "@humanwhocodes/object-schema@npm:2.0.3" checksum: 10c0/80520eabbfc2d32fe195a93557cef50dfe8c8905de447f022675aaf66abc33ae54098f5ea78548d925aa671cd4ab7c7daa5ad704fe42358c9b5e7db60f80696c @@ -7941,22 +7923,22 @@ __metadata: languageName: node linkType: hard -"@types/react-dom@npm:^18.2.0": - version: 18.3.0 - resolution: "@types/react-dom@npm:18.3.0" +"@types/react-dom@npm:^18.3.1": + version: 18.3.1 + resolution: "@types/react-dom@npm:18.3.1" dependencies: "@types/react": "npm:*" - checksum: 10c0/6c90d2ed72c5a0e440d2c75d99287e4b5df3e7b011838cdc03ae5cd518ab52164d86990e73246b9d812eaf02ec351d74e3b4f5bd325bf341e13bf980392fd53b + checksum: 10c0/8b416551c60bb6bd8ec10e198c957910cfb271bc3922463040b0d57cf4739cdcd24b13224f8d68f10318926e1ec3cd69af0af79f0291b599a992f8c80d47f1eb languageName: node linkType: hard -"@types/react@npm:*, @types/react@npm:^18.2.0": - version: 18.3.5 - resolution: "@types/react@npm:18.3.5" +"@types/react@npm:^18.3.1": + version: 18.3.11 + resolution: "@types/react@npm:18.3.11" dependencies: "@types/prop-types": "npm:*" csstype: "npm:^3.0.2" - checksum: 10c0/548b1d3d7c2f0242fbfdbbd658731b4ce69a134be072fa83e6ab516f2840402a3f20e3e7f72e95133b23d4880ef24a6d864050dc8e1f7c68f39fa87ca8445917 + checksum: 10c0/ce80512246ca5bda69db85b9f4f1835189334acfb6b2c4f3eda8cabff1ff1a3ea9ce4f3b895bdbc18c94140aa45592331aa3fdeb557f525c1b048de7ce84fc0e languageName: node linkType: hard @@ -11513,12 +11495,17 @@ __metadata: "@commitlint/cli": "npm:^19.5.0" "@commitlint/config-conventional": "npm:^19.5.0" "@commitlint/load": "npm:19.5.0" + "@types/react": "npm:^18.3.1" + "@types/react-dom": "npm:^18.3.1" cross-env: "npm:^7.0.3" + eslint: "npm:^8.57.1" eslint-config-custom: "npm:*" husky: "npm:^9.1.6" is-ci: "npm:^3.0.1" lint-staged: "npm:15.2.10" prettier: "npm:latest" + react: "npm:^18.3.1" + react-dom: "npm:^18.3.1" turbo: "npm:^2.1.2" typescript: "npm:^5" languageName: unknown @@ -11532,11 +11519,18 @@ __metadata: "@tanstack/react-query": "npm:^5.59.0" "@tanstack/react-query-devtools": "npm:^5.59.0" "@tanstack/react-query-persist-client": "npm:^5.59.0" - eslint: "npm:^8.57.1" + "@types/react": "npm:*" + "@types/react-dom": "npm:*" eslint-config-custom: "npm:*" ethers: "npm:^6.11.0" react: "npm:^18.2.0" tsconfig: "npm:*" + peerDependencies: + eslint: "*" + eslint-config-custom: "*" + react: "*" + react-dom: "*" + tsconfig: "*" languageName: unknown linkType: soft @@ -12792,7 +12786,7 @@ __metadata: "@tanstack/eslint-plugin-query": "npm:^5.59.1" "@typescript-eslint/eslint-plugin": "npm:^8.6.0" "@typescript-eslint/parser": "npm:^8.6.0" - eslint: "npm:^8.57.1" + eslint: "npm:*" eslint-config-next: "npm:^14.2.11" eslint-config-prettier: "npm:^9.1.0" eslint-config-turbo: "npm:^2.1.2" @@ -12801,6 +12795,10 @@ __metadata: eslint-plugin-import: "npm:^2.31.0" eslint-plugin-react: "npm:7.36.1" prettier-eslint: "npm:^16.3.0" + peerDependencies: + eslint: "*" + react: "*" + react-dom: "*" languageName: unknown linkType: soft @@ -13204,54 +13202,6 @@ __metadata: languageName: node linkType: hard -"eslint@npm:^8.7.0": - version: 8.57.0 - resolution: "eslint@npm:8.57.0" - dependencies: - "@eslint-community/eslint-utils": "npm:^4.2.0" - "@eslint-community/regexpp": "npm:^4.6.1" - "@eslint/eslintrc": "npm:^2.1.4" - "@eslint/js": "npm:8.57.0" - "@humanwhocodes/config-array": "npm:^0.11.14" - "@humanwhocodes/module-importer": "npm:^1.0.1" - "@nodelib/fs.walk": "npm:^1.2.8" - "@ungap/structured-clone": "npm:^1.2.0" - ajv: "npm:^6.12.4" - chalk: "npm:^4.0.0" - cross-spawn: "npm:^7.0.2" - debug: "npm:^4.3.2" - doctrine: "npm:^3.0.0" - escape-string-regexp: "npm:^4.0.0" - eslint-scope: "npm:^7.2.2" - eslint-visitor-keys: "npm:^3.4.3" - espree: "npm:^9.6.1" - esquery: "npm:^1.4.2" - esutils: "npm:^2.0.2" - fast-deep-equal: "npm:^3.1.3" - file-entry-cache: "npm:^6.0.1" - find-up: "npm:^5.0.0" - glob-parent: "npm:^6.0.2" - globals: "npm:^13.19.0" - graphemer: "npm:^1.4.0" - ignore: "npm:^5.2.0" - imurmurhash: "npm:^0.1.4" - is-glob: "npm:^4.0.0" - is-path-inside: "npm:^3.0.3" - js-yaml: "npm:^4.1.0" - json-stable-stringify-without-jsonify: "npm:^1.0.1" - levn: "npm:^0.4.1" - lodash.merge: "npm:^4.6.2" - minimatch: "npm:^3.1.2" - natural-compare: "npm:^1.4.0" - optionator: "npm:^0.9.3" - strip-ansi: "npm:^6.0.1" - text-table: "npm:^0.2.0" - bin: - eslint: bin/eslint.js - checksum: 10c0/00bb96fd2471039a312435a6776fe1fd557c056755eaa2b96093ef3a8508c92c8775d5f754768be6b1dddd09fdd3379ddb231eeb9b6c579ee17ea7d68000a529 - languageName: node - linkType: hard - "espree@npm:^9.3.1, espree@npm:^9.6.0, espree@npm:^9.6.1": version: 9.6.1 resolution: "espree@npm:9.6.1" @@ -13822,9 +13772,13 @@ __metadata: version: 0.0.0-use.local resolution: "external-rewards@workspace:packages/external-rewards" dependencies: - eslint: "npm:^8.57.1" + eslint: "npm:*" eslint-config-custom: "npm:*" tsconfig: "npm:*" + peerDependencies: + eslint: "*" + eslint-config-custom: "*" + tsconfig: "*" languageName: unknown linkType: soft @@ -16324,8 +16278,8 @@ __metadata: "@svgr/webpack": "npm:^8.1.0" "@types/lodash": "npm:^4.14.182" "@types/node": "npm:17.0.24" - "@types/react": "npm:^18.2.0" - "@types/react-dom": "npm:^18.2.0" + "@types/react": "npm:*" + "@types/react-dom": "npm:*" "@types/styled-components": "npm:5.1.14" bignumber.js: "npm:^9.0.1" cross-fetch: "npm:^3.1.5" @@ -16347,9 +16301,9 @@ __metadata: onboard-helpers: "npm:*" pinst: "npm:^2.1.4" prop-types: "npm:^15.6.0" - react: "npm:^18.2.0" + react: "npm:*" react-aria: "npm:3.22.0" - react-dom: "npm:^18.2.0" + react-dom: "npm:*" react-is: "npm:16.13.1" react-router-dom: "npm:^6.3.0" react-stately: "npm:3.18.0" @@ -16361,6 +16315,11 @@ __metadata: ui: "npm:*" webpack: "npm:^5.83.1" zustand: "npm:^4.5.5" + peerDependencies: + eslint-config-custom: "*" + react: "*" + react-dom: "*" + tsconfig: "*" languageName: unknown linkType: soft @@ -16572,8 +16531,8 @@ __metadata: "@svgr/webpack": "npm:^8.1.0" "@types/lodash": "npm:^4.14.182" "@types/node": "npm:17.0.24" - "@types/react": "npm:^18.2.0" - "@types/react-dom": "npm:^18.2.0" + "@types/react": "npm:*" + "@types/react-dom": "npm:*" "@types/styled-components": "npm:5.1.14" bignumber.js: "npm:^9.0.1" cross-fetch: "npm:^3.1.5" @@ -16594,9 +16553,9 @@ __metadata: onboard-helpers: "npm:*" pinst: "npm:^2.1.4" prop-types: "npm:^15.6.0" - react: "npm:^18.2.0" + react: "npm:*" react-aria: "npm:3.22.0" - react-dom: "npm:^18.2.0" + react-dom: "npm:*" react-is: "npm:16.13.1" react-router-dom: "npm:^6.3.0" react-stately: "npm:3.18.0" @@ -16608,6 +16567,11 @@ __metadata: ui: "npm:*" webpack: "npm:^5.83.1" zustand: "npm:^4.5.5" + peerDependencies: + eslint-config-custom: "*" + react: "*" + react-dom: "*" + tsconfig: "*" languageName: unknown linkType: soft @@ -16972,8 +16936,8 @@ __metadata: "@svgr/webpack": "npm:^8.1.0" "@types/lodash": "npm:^4.14.182" "@types/node": "npm:17.0.24" - "@types/react": "npm:^18.2.0" - "@types/react-dom": "npm:^18.2.0" + "@types/react": "npm:*" + "@types/react-dom": "npm:*" "@types/styled-components": "npm:5.1.14" "@types/validator": "npm:^13.12.1" bignumber.js: "npm:^9.0.1" @@ -16996,9 +16960,9 @@ __metadata: numbro: "npm:^2.4.0" onboard-helpers: "npm:*" pinst: "npm:^2.1.4" - react: "npm:^18.2.0" + react: "npm:*" react-aria: "npm:3.22.0" - react-dom: "npm:^18.2.0" + react-dom: "npm:*" react-hook-form: "npm:^7.53.0" react-is: "npm:16.13.1" react-router-dom: "npm:^6.3.0" @@ -17013,6 +16977,11 @@ __metadata: viem: "npm:^2.21.1" webpack: "npm:^5.83.1" zustand: "npm:^4.5.5" + peerDependencies: + eslint-config-custom: "*" + react: "*" + react-dom: "*" + tsconfig: "*" languageName: unknown linkType: soft @@ -18061,6 +18030,8 @@ __metadata: "@babel/runtime": "npm:^7.25.6" "@safe-global/safe-apps-provider": "npm:^0.18.3" "@safe-global/safe-apps-sdk": "npm:^9.1.0" + "@types/react": "npm:*" + "@types/react-dom": "npm:*" "@web3-onboard/bitget": "npm:^2.1.1" "@web3-onboard/coinbase": "npm:^2.4.1" "@web3-onboard/core": "npm:^2.22.3" @@ -18077,8 +18048,8 @@ __metadata: "@web3-onboard/trust": "npm:^2.1.2" "@web3-onboard/walletconnect": "npm:^2.6.1" peerDependencies: - react: ^18 - react-dom: ^18 + react: "*" + react-dom: "*" languageName: unknown linkType: soft @@ -19010,15 +18981,15 @@ __metadata: languageName: node linkType: hard -"react-dom@npm:^18.2.0": - version: 18.2.0 - resolution: "react-dom@npm:18.2.0" +"react-dom@npm:^18.3.1": + version: 18.3.1 + resolution: "react-dom@npm:18.3.1" dependencies: loose-envify: "npm:^1.1.0" - scheduler: "npm:^0.23.0" + scheduler: "npm:^0.23.2" peerDependencies: - react: ^18.2.0 - checksum: 10c0/66dfc5f93e13d0674e78ef41f92ed21dfb80f9c4ac4ac25a4b51046d41d4d2186abc915b897f69d3d0ebbffe6184e7c5876f2af26bfa956f179225d921be713a + react: ^18.3.1 + checksum: 10c0/a752496c1941f958f2e8ac56239172296fcddce1365ce45222d04a1947e0cc5547df3e8447f855a81d6d39f008d7c32eab43db3712077f09e3f67c4874973e85 languageName: node linkType: hard @@ -19161,12 +19132,12 @@ __metadata: languageName: node linkType: hard -"react@npm:^18.2.0": - version: 18.2.0 - resolution: "react@npm:18.2.0" +"react@npm:^18.3.1": + version: 18.3.1 + resolution: "react@npm:18.3.1" dependencies: loose-envify: "npm:^1.1.0" - checksum: 10c0/b562d9b569b0cb315e44b48099f7712283d93df36b19a39a67c254c6686479d3980b7f013dc931f4a5a3ae7645eae6386b4aa5eea933baa54ecd0f9acb0902b8 + checksum: 10c0/283e8c5efcf37802c9d1ce767f302dd569dd97a70d9bb8c7be79a789b9902451e0d16334b05d73299b20f048cbc3c7d288bbbde10b701fa194e2089c237dbea3 languageName: node linkType: hard @@ -19874,12 +19845,12 @@ __metadata: languageName: node linkType: hard -"scheduler@npm:^0.23.0": - version: 0.23.0 - resolution: "scheduler@npm:0.23.0" +"scheduler@npm:^0.23.2": + version: 0.23.2 + resolution: "scheduler@npm:0.23.2" dependencies: loose-envify: "npm:^1.1.0" - checksum: 10c0/b777f7ca0115e6d93e126ac490dbd82642d14983b3079f58f35519d992fa46260be7d6e6cede433a92db70306310c6f5f06e144f0e40c484199e09c1f7be53dd + checksum: 10c0/26383305e249651d4c58e6705d5f8425f153211aef95f15161c151f7b8de885f24751b377e4a0b3dd42cce09aad3f87a61dab7636859c0d89b7daf1a1e2a5c78 languageName: node linkType: hard @@ -21520,11 +21491,11 @@ __metadata: "@carbon/icons-react": "npm:11.17.0" "@lingui/detect-locale": "npm:^4.6.0" "@types/carbon__icons-react": "npm:11.16.0" - "@types/react": "npm:^18.2.0" - "@types/react-dom": "npm:^18.2.0" + "@types/react": "npm:*" + "@types/react-dom": "npm:*" "@types/styled-components": "npm:5.1.14" bignumber.js: "npm:^9.0.1" - eslint: "npm:^8.57.1" + eslint: "npm:*" eslint-config-custom: "npm:*" ethers: "npm:^6.11.0" lodash: "npm:4.17.21" @@ -21533,8 +21504,9 @@ __metadata: tsconfig: "npm:*" peerDependencies: curve-lib: "*" - react: ^18 - react-dom: ^18 + eslint: "*" + react: "*" + react-dom: "*" react-router-dom: ^6 styled-components: ^5 languageName: unknown