diff --git a/.github/workflows/build_check.yaml b/.github/workflows/build_check.yaml index 225968b1..d0badbaf 100644 --- a/.github/workflows/build_check.yaml +++ b/.github/workflows/build_check.yaml @@ -17,6 +17,10 @@ jobs: - name: Create .env file run: echo NEXT_PUBLIC_PROJECT_ID="dummydummydummydummydummydummydu" > .env - name: Install Dependencies - run: npm ci - - name: check-build - run: npm run build + run: | + npm cache clean --force + npm install + - name: Build + run: | + rm -rf .next + npm run build diff --git a/components/PoolPage.tsx b/components/PoolPage.tsx index 3c6a4b0d..6a38b136 100644 --- a/components/PoolPage.tsx +++ b/components/PoolPage.tsx @@ -49,7 +49,7 @@ const PoolContents = () => { {poolData ? ( - + ) : (
diff --git a/components/pool/CollateralAssetRow.tsx b/components/pool/CollateralAssetRow.tsx index 179ffcfb..4c143353 100644 --- a/components/pool/CollateralAssetRow.tsx +++ b/components/pool/CollateralAssetRow.tsx @@ -128,7 +128,7 @@ const CollateralAssetRow = ({ crossAxisAlignment="center" width={isMobile ? "33%" : "20%"} > - {collateralValue !== undefined ? ( + {collateralValue !== undefined ? ( <> {smallUsdPriceFormatter( diff --git a/components/pool/DisplayGraph.tsx b/components/pool/DisplayGraph.tsx index 236bff3e..bb423b2a 100644 --- a/components/pool/DisplayGraph.tsx +++ b/components/pool/DisplayGraph.tsx @@ -6,7 +6,7 @@ import { ModalDivider } from "components/shared/Modal"; import { PoolConfig } from "interfaces/pool"; import RenderGraphSections from "components/pool/graph/RenderGraphSections"; -const DisplayGraph = ({ poolData }: { poolData: PoolConfig }) => { +const DisplayGraph = () => { const { t } = useTranslation(); const isMobile = useIsMobile(); @@ -28,7 +28,7 @@ const DisplayGraph = ({ poolData }: { poolData: PoolConfig }) => { crossAxisAlignment="flex-start" width="100%" > - {RenderGraphSections(poolData)} + {RenderGraphSections()} ) : ( { px={4} my={4} > - {RenderGraphSections(poolData)} + {RenderGraphSections()} )} diff --git a/components/pool/graph/GraphModel.tsx b/components/pool/graph/GraphModel.tsx index 46871b57..7e3fcfd3 100644 --- a/components/pool/graph/GraphModel.tsx +++ b/components/pool/graph/GraphModel.tsx @@ -18,6 +18,7 @@ import { calculateInitialData, calculateYDomain, getTransform, + roundDownToTheFourthDecimalPlace, } from "hooks/util/graph"; import { AxisRange, @@ -34,8 +35,10 @@ import usePoolData from "hooks/pool/usePoolData"; import useInitialUtilization from "hooks/graph/useInitialUtilization"; import { OneHundred } from "constants/graph"; import { truncateTo3DecimalPlaces } from "utils/bigUtils"; +import useRewardData from "hooks/graph/useRewardData"; const GraphModel: React.FC = ({ + poolData, dataKeys, labels, rewardAPRValue, @@ -45,7 +48,7 @@ const GraphModel: React.FC = ({ const [initialData, setInitialData] = useState( calculateInitialData(initialUtilization, dataKeys), ); - const data = useMemo(() => generateData({ dataKeys }), []); + const data = useMemo(() => generateData({ dataKeys }), [dataKeys]); const { t } = useTranslation(); const isMobile = useIsMobile(); @@ -58,6 +61,7 @@ const GraphModel: React.FC = ({ undefined, ); const [rewardEarn, setRewardEarn] = useState(undefined); + const tempRewardData = useRewardData({ poolData }); useEffect(() => { if (rewardAPRValue?.borrow || rewardAPRValue?.borrow === 0) { @@ -67,13 +71,13 @@ const GraphModel: React.FC = ({ OneHundred, ); } - if (rewardAPRValue?.earn || rewardAPRValue?.earn === 0) { + if (tempRewardData?.earn || tempRewardData?.earn === 0) { setRewardEarn( - (truncateTo3DecimalPlaces(rewardAPRValue?.earn) * hoverData.earnValue) / + (truncateTo3DecimalPlaces(tempRewardData?.earn) * hoverData.earnValue) / OneHundred, ); } - }, [rewardAPRValue, hoverData]); + }, [rewardAPRValue, hoverData, tempRewardData]); const handleMouseMove = (state: any) => { if (state.isTooltipActive) { @@ -98,7 +102,7 @@ const GraphModel: React.FC = ({ useEffect(() => { setHoverUtilization(initialUtilization); setInitialData(calculateInitialData(initialUtilization, dataKeys)); - }, [initialUtilization]); + }, [initialUtilization, dataKeys]); useEffect(() => { setHoverData(initialData); @@ -122,9 +126,11 @@ const GraphModel: React.FC = ({ {hoverData - ? rewardAPRValue?.borrow || rewardAPRValue?.borrow === 0 - ? `${rewardBorrow?.toFixed(3)}%` - : `${hoverData.borrowValue.toFixed(3)}%` + ? roundDownToTheFourthDecimalPlace( + rewardAPRValue?.borrow || rewardAPRValue?.borrow === 0 + ? rewardBorrow + : hoverData.borrowValue, + ) : "-"} @@ -134,9 +140,11 @@ const GraphModel: React.FC = ({ {hoverData - ? rewardAPRValue?.earn || rewardAPRValue?.earn === 0 - ? `${rewardEarn?.toFixed(3)}%` - : `${hoverData.earnValue.toFixed(3)}%` + ? roundDownToTheFourthDecimalPlace( + rewardAPRValue?.earn || rewardAPRValue?.earn === 0 + ? rewardEarn + : hoverData.earnValue, + ) : "-"} diff --git a/components/pool/graph/APRGraph.tsx b/components/pool/graph/InterestAPRGraph.tsx similarity index 76% rename from components/pool/graph/APRGraph.tsx rename to components/pool/graph/InterestAPRGraph.tsx index 870e99ac..2e5f58b0 100644 --- a/components/pool/graph/APRGraph.tsx +++ b/components/pool/graph/InterestAPRGraph.tsx @@ -1,8 +1,12 @@ import React from "react"; -import { PoolConfig } from "interfaces/pool"; import GraphModel from "./GraphModel"; +import usePool from "hooks/pool/usePool"; + +const InterestAPRGraph = () => { + const { poolConfig: poolData } = usePool(); + + if (!poolData) return null; -const APRGraph = ({ poolData }: { poolData: PoolConfig }) => { const dataKeys = { earn: { supplyRateSlopeLow: poolData.supplyPerYearInterestRateSlopeLow, @@ -19,10 +23,11 @@ const APRGraph = ({ poolData }: { poolData: PoolConfig }) => { return ( ); }; -export default APRGraph; +export default InterestAPRGraph; diff --git a/components/pool/graph/RenderGraphSections.tsx b/components/pool/graph/RenderGraphSections.tsx index 1495d38e..95751690 100644 --- a/components/pool/graph/RenderGraphSections.tsx +++ b/components/pool/graph/RenderGraphSections.tsx @@ -2,15 +2,13 @@ import React from "react"; import { Box } from "@chakra-ui/react"; import { useTranslation } from "react-i18next"; import { Column, useIsMobile } from "utils/chakraUtils"; -import APRGraph from "components/pool/graph/APRGraph"; -import RewardGraph from "components/pool/graph/RewardGraph"; -import { PoolConfig } from "interfaces/pool"; +import InterestAPRGraph from "components/pool/graph/InterestAPRGraph"; +import RewardAPRGraph from "components/pool/graph/RewardAPRGraph"; import { RenderGraphSectionProps } from "interfaces/graph"; const RenderGraphSection = ({ title, GraphComponent, - poolData, }: RenderGraphSectionProps) => { const { t } = useTranslation(); const isMobile = useIsMobile(); @@ -31,22 +29,20 @@ const RenderGraphSection = ({ > {t(title)} - + ); }; -const RenderGraphSections = (poolData: PoolConfig) => ( +const RenderGraphSections = () => ( <> ); diff --git a/components/pool/graph/RewardGraph.tsx b/components/pool/graph/RewardAPRGraph.tsx similarity index 82% rename from components/pool/graph/RewardGraph.tsx rename to components/pool/graph/RewardAPRGraph.tsx index a7e568af..a5867783 100644 --- a/components/pool/graph/RewardGraph.tsx +++ b/components/pool/graph/RewardAPRGraph.tsx @@ -1,11 +1,14 @@ import React from "react"; -import { PoolConfig } from "interfaces/pool"; import GraphModel from "./GraphModel"; import { OneHundred, rateSlopeLow } from "constants/graph"; import usePoolData from "hooks/pool/usePoolData"; +import usePool from "hooks/pool/usePool"; -const RewardGraph = ({ poolData }: { poolData: PoolConfig }) => { +const RewardAPRGraph = () => { const { tokenRewardData } = usePoolData(); + const { poolConfig: poolData } = usePool(); + + if (!poolData) return null; const rateSlopeHigh = parseFloat( (OneHundred / (OneHundred - poolData.rewardKink)).toFixed(2), @@ -26,6 +29,7 @@ const RewardGraph = ({ poolData }: { poolData: PoolConfig }) => { return ( { ); }; -export default RewardGraph; +export default RewardAPRGraph; diff --git a/constants/graph.ts b/constants/graph.ts index 1f8c2785..82ec7f96 100644 --- a/constants/graph.ts +++ b/constants/graph.ts @@ -1,4 +1,5 @@ export const OneHundred = 100; +export const OneThousand = 1000; export const AxisRange = [0, 100]; export const LeftMin = 20; export const LeftMax = 80; @@ -8,7 +9,6 @@ export const HoverPositionLowerThresholdMobile = 70; export const HoverPositionUpperThresholdMobile = 180; export const rateSlopeLow = 0; export const DAYS_IN_YEAR = 365; -export const REWARD_BONUS_RATE_VALUE = 1; //PNDが1ドルを下回った時に発生するボーナス倍率 export const LightGrayColorCode = "#949494"; export const LightBlackColorCode = "#3a4450"; export const PinkColorCode = "#FF2E6C"; diff --git a/hooks/graph/useRewardData.ts b/hooks/graph/useRewardData.ts new file mode 100644 index 00000000..4549c7a2 --- /dev/null +++ b/hooks/graph/useRewardData.ts @@ -0,0 +1,42 @@ +import { useEffect, useState } from "react"; +import usePoolData from "hooks/pool/usePoolData"; +import { PoolConfig } from "interfaces/pool"; +import { RewardDataProps } from "interfaces/graph"; +import { calculateTotalBalance, calculateRewardData } from "hooks/util/graph"; + +const useRewardData = ({ poolData }: { poolData: PoolConfig }) => { + const [tempRewardData, setTempRewardData] = useState({ + earn: undefined, + }); + const { priceFeedData, totalPoolData } = usePoolData(); + + useEffect(() => { + if (!poolData) { + return; + } + + const totalSupply = + (totalPoolData?.totalBaseSupplyBalance ?? 0) >= + poolData?.baseMinForRewards + ? totalPoolData?.totalBaseSupplyBalance ?? 0 + : 0; + const totalBaseSupplyBalance = calculateTotalBalance( + totalSupply, + priceFeedData, + ); + + const tempSupplyRewardData = calculateRewardData( + poolData.baseTrackingRewardSpeed, + totalBaseSupplyBalance, + priceFeedData?.rewardAsset, + ); + + setTempRewardData({ + earn: tempSupplyRewardData, + }); + }, [priceFeedData, totalPoolData, poolData]); + + return tempRewardData; +}; + +export default useRewardData; diff --git a/hooks/pool/shared/usePriceFeed.ts b/hooks/pool/shared/usePriceFeed.ts index a011ee30..f4f592b0 100644 --- a/hooks/pool/shared/usePriceFeed.ts +++ b/hooks/pool/shared/usePriceFeed.ts @@ -64,20 +64,20 @@ const usePriceFeedData = (poolData: PoolConfig | undefined) => { formatUnits(rewardPrice, poolData.rewardToken.priceFeedDecimals), ) : undefined; - const collateralAssets: { [key: string]: number | undefined } = {}; - for (const assetConfig of poolData.assetConfigs) { - if (assetConfig.priceFeed === AddressZero) { - collateralAssets[assetConfig.symbol] = 0; - } else { - const assetPrice = await fetchPriceFeed( - assetConfig.priceFeed, - poolData.chainId, - ); - collateralAssets[assetConfig.symbol] = assetPrice - ? Number(formatUnits(assetPrice, assetConfig.priceFeedDecimals)) - : undefined; - } + const collateralAssets: { [key: string]: number | undefined } = {}; + for (const assetConfig of poolData.assetConfigs) { + if (assetConfig.priceFeed === AddressZero) { + collateralAssets[assetConfig.symbol] = 0; + } else { + const assetPrice = await fetchPriceFeed( + assetConfig.priceFeed, + poolData.chainId, + ); + collateralAssets[assetConfig.symbol] = assetPrice + ? Number(formatUnits(assetPrice, assetConfig.priceFeedDecimals)) + : undefined; } + } setPriceFeedData({ usdjpy, diff --git a/hooks/util/graph.ts b/hooks/util/graph.ts index 25583cb9..b2790691 100644 --- a/hooks/util/graph.ts +++ b/hooks/util/graph.ts @@ -1,9 +1,5 @@ import { GenerateDataProps } from "interfaces/graph"; -import { - OneHundred, - DAYS_IN_YEAR, - REWARD_BONUS_RATE_VALUE, -} from "constants/graph"; +import { OneHundred, OneThousand, DAYS_IN_YEAR } from "constants/graph"; import { HoverPositionLowerThreshold, HoverPositionUpperThreshold, @@ -103,3 +99,31 @@ export const getTransform = ( : "translateX(-50%)"; } }; + +export const calculateTotalBalance = ( + balance: number | undefined, + priceFeedData: PriceFeedData | undefined, +) => + balance !== undefined && + balance > 0 && + priceFeedData?.baseAsset !== undefined && + priceFeedData.baseAsset > 0 + ? balance * priceFeedData.baseAsset + : 0; + +export const calculateRewardData = ( + trackingRewardSpeed: number, + totalBalance: number, + rewardAsset: number | undefined, +) => + totalBalance > 0 + ? ((trackingRewardSpeed * DAYS_IN_YEAR * (rewardAsset || 0)) / + totalBalance) * + OneHundred + : 0; + +export const roundDownToTheFourthDecimalPlace = (value: number | undefined) => { + return value !== undefined + ? `${(Math.floor(value * OneThousand) / OneThousand).toFixed(3)}%` + : "-"; +}; diff --git a/interfaces/graph.ts b/interfaces/graph.ts index 0b76d547..39617997 100644 --- a/interfaces/graph.ts +++ b/interfaces/graph.ts @@ -15,6 +15,7 @@ export interface DataKeys { } export interface GraphModelProps { + poolData: PoolConfig; dataKeys: DataKeys; labels: { borrow: string; earn: string }; rewardAPRValue?: { borrow: number | undefined; earn: number | undefined }; @@ -26,6 +27,9 @@ export interface GenerateDataProps { export interface RenderGraphSectionProps { title: string; - GraphComponent: React.FC<{ poolData: PoolConfig }>; - poolData: PoolConfig; + GraphComponent: React.FC<{}>; +} + +export interface RewardDataProps { + earn: number | undefined; } diff --git a/next.config.js b/next.config.js index bdadc9f0..37eda475 100644 --- a/next.config.js +++ b/next.config.js @@ -1,7 +1,7 @@ /** @type {import('next').NextConfig} */ const nextConfig = { output: "export", - exportTrailingSlash: true, + trailingSlash: true, images: { unoptimized: true, }, diff --git a/package-lock.json b/package-lock.json index 8efb5c81..92ded8bf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1880,126 +1880,6 @@ "node": ">= 10" } }, - "node_modules/@next/swc-darwin-x64": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.4.19.tgz", - "integrity": "sha512-jyzO6wwYhx6F+7gD8ddZfuqO4TtpJdw3wyOduR4fxTUCm3aLw7YmHGYNjS0xRSYGAkLpBkH1E0RcelyId6lNsw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-gnu": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.4.19.tgz", - "integrity": "sha512-vdlnIlaAEh6H+G6HrKZB9c2zJKnpPVKnA6LBwjwT2BTjxI7e0Hx30+FoWCgi50e+YO49p6oPOtesP9mXDRiiUg==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-musl": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.4.19.tgz", - "integrity": "sha512-aU0HkH2XPgxqrbNRBFb3si9Ahu/CpaR5RPmN2s9GiM9qJCiBBlZtRTiEca+DC+xRPyCThTtWYgxjWHgU7ZkyvA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-gnu": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.4.19.tgz", - "integrity": "sha512-htwOEagMa/CXNykFFeAHHvMJeqZfNQEoQvHfsA4wgg5QqGNqD5soeCer4oGlCol6NGUxknrQO6VEustcv+Md+g==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-musl": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.4.19.tgz", - "integrity": "sha512-4Gj4vvtbK1JH8ApWTT214b3GwUh9EKKQjY41hH/t+u55Knxi/0wesMzwQRhppK6Ddalhu0TEttbiJ+wRcoEj5Q==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-arm64-msvc": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.4.19.tgz", - "integrity": "sha512-bUfDevQK4NsIAHXs3/JNgnvEY+LRyneDN788W2NYiRIIzmILjba7LaQTfihuFawZDhRtkYCv3JDC3B4TwnmRJw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-ia32-msvc": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.4.19.tgz", - "integrity": "sha512-Y5kikILFAr81LYIFaw6j/NrOtmiM4Sf3GtOc0pn50ez2GCkr+oejYuKGcwAwq3jiTKuzF6OF4iT2INPoxRycEA==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-x64-msvc": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.4.19.tgz", - "integrity": "sha512-YzA78jBDXMYiINdPdJJwGgPNT3YqBNNGhsthsDoWHL9p24tEJn9ViQf/ZqTbwSpX/RrkPupLfuuTH2sf73JBAw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, "node_modules/@noble/curves": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", @@ -2087,25 +1967,6 @@ "@parcel/watcher-win32-x64": "2.4.0" } }, - "node_modules/@parcel/watcher-android-arm64": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.4.0.tgz", - "integrity": "sha512-+fPtO/GsbYX1LJnCYCaDVT3EOBjvSFdQN9Mrzh9zWAOOfvidPWyScTrHIZHHfJBvlHzNA0Gy0U3NXFA/M7PHUA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, "node_modules/@parcel/watcher-darwin-arm64": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.4.0.tgz", @@ -2125,139 +1986,6 @@ "url": "https://opencollective.com/parcel" } }, - "node_modules/@parcel/watcher-darwin-x64": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.4.0.tgz", - "integrity": "sha512-vZMv9jl+szz5YLsSqEGCMSllBl1gU1snfbRL5ysJU03MEa6gkVy9OMcvXV1j4g0++jHEcvzhs3Z3LpeEbVmY6Q==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-freebsd-x64": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.4.0.tgz", - "integrity": "sha512-dHTRMIplPDT1M0+BkXjtMN+qLtqq24sLDUhmU+UxxLP2TEY2k8GIoqIJiVrGWGomdWsy5IO27aDV1vWyQ6gfHA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-arm-glibc": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.4.0.tgz", - "integrity": "sha512-9NQXD+qk46RwATNC3/UB7HWurscY18CnAPMTFcI9Y8CTbtm63/eex1SNt+BHFinEQuLBjaZwR2Lp+n7pmEJPpQ==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-arm64-glibc": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.4.0.tgz", - "integrity": "sha512-QuJTAQdsd7PFW9jNGaV9Pw+ZMWV9wKThEzzlY3Lhnnwy7iW23qtQFPql8iEaSFMCVI5StNNmONUopk+MFKpiKg==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-arm64-musl": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.4.0.tgz", - "integrity": "sha512-oyN+uA9xcTDo/45bwsd6TFHa7Lc7hKujyMlvwrCLvSckvWogndCEoVYFNfZ6JJ2KNL/6fFiGPcbjp8jJmEh5Ng==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-x64-glibc": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.4.0.tgz", - "integrity": "sha512-KphV8awJmxU3q52JQvJot0QMu07CIyEjV+2Tb2ZtbucEgqyRcxOBDMsqp1JNq5nuDXtcCC0uHQICeiEz38dPBQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-x64-musl": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.4.0.tgz", - "integrity": "sha512-7jzcOonpXNWcSijPpKD5IbC6xC7yTibjJw9jviVzZostYLGxbz8LDJLUnLzLzhASPlPGgpeKLtFUMjAAzM+gSA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, "node_modules/@parcel/watcher-wasm": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/@parcel/watcher-wasm/-/watcher-wasm-2.4.0.tgz", @@ -2283,63 +2011,6 @@ "inBundle": true, "license": "MIT" }, - "node_modules/@parcel/watcher-win32-arm64": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.4.0.tgz", - "integrity": "sha512-NOej2lqlq8bQNYhUMnOD0nwvNql8ToQF+1Zhi9ULZoG+XTtJ9hNnCFfyICxoZLXor4bBPTOnzs/aVVoefYnjIg==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-win32-ia32": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.4.0.tgz", - "integrity": "sha512-IO/nM+K2YD/iwjWAfHFMBPz4Zqn6qBDqZxY4j2n9s+4+OuTSRM/y/irksnuqcspom5DjkSeF9d0YbO+qpys+JA==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-win32-x64": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.4.0.tgz", - "integrity": "sha512-pAUyUVjfFjWaf/pShmJpJmNxZhbMvJASUpdes9jL6bTEJ+gDxPRSpXTIemNyNsb9AtbiGXs9XduP1reThmd+dA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, "node_modules/@parcel/watcher/node_modules/node-addon-api": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.0.tgz", @@ -11012,6 +10683,126 @@ "optional": true } } + }, + "node_modules/@next/swc-darwin-x64": { + "version": "13.4.19", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.4.19.tgz", + "integrity": "sha512-jyzO6wwYhx6F+7gD8ddZfuqO4TtpJdw3wyOduR4fxTUCm3aLw7YmHGYNjS0xRSYGAkLpBkH1E0RcelyId6lNsw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "13.4.19", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.4.19.tgz", + "integrity": "sha512-vdlnIlaAEh6H+G6HrKZB9c2zJKnpPVKnA6LBwjwT2BTjxI7e0Hx30+FoWCgi50e+YO49p6oPOtesP9mXDRiiUg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-musl": { + "version": "13.4.19", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.4.19.tgz", + "integrity": "sha512-aU0HkH2XPgxqrbNRBFb3si9Ahu/CpaR5RPmN2s9GiM9qJCiBBlZtRTiEca+DC+xRPyCThTtWYgxjWHgU7ZkyvA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-gnu": { + "version": "13.4.19", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.4.19.tgz", + "integrity": "sha512-htwOEagMa/CXNykFFeAHHvMJeqZfNQEoQvHfsA4wgg5QqGNqD5soeCer4oGlCol6NGUxknrQO6VEustcv+Md+g==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-musl": { + "version": "13.4.19", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.4.19.tgz", + "integrity": "sha512-4Gj4vvtbK1JH8ApWTT214b3GwUh9EKKQjY41hH/t+u55Knxi/0wesMzwQRhppK6Ddalhu0TEttbiJ+wRcoEj5Q==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "13.4.19", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.4.19.tgz", + "integrity": "sha512-bUfDevQK4NsIAHXs3/JNgnvEY+LRyneDN788W2NYiRIIzmILjba7LaQTfihuFawZDhRtkYCv3JDC3B4TwnmRJw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-ia32-msvc": { + "version": "13.4.19", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.4.19.tgz", + "integrity": "sha512-Y5kikILFAr81LYIFaw6j/NrOtmiM4Sf3GtOc0pn50ez2GCkr+oejYuKGcwAwq3jiTKuzF6OF4iT2INPoxRycEA==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-x64-msvc": { + "version": "13.4.19", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.4.19.tgz", + "integrity": "sha512-YzA78jBDXMYiINdPdJJwGgPNT3YqBNNGhsthsDoWHL9p24tEJn9ViQf/ZqTbwSpX/RrkPupLfuuTH2sf73JBAw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } } } }