diff --git a/.env.development b/.env.development index c8feca14a..d54e44a76 100644 --- a/.env.development +++ b/.env.development @@ -23,7 +23,7 @@ NEXT_PUBLIC_AVATAR_COLLECTION_ID="2e55d4bf2e85715b63-ZEITASTAGE" NEXT_PUBLIC_SINGULAR_URL="https://singular-rmrk2-dev.vercel.app" NEXT_PUBLIC_RMRK_INDEXER_API="https://gql2.rmrk.dev/v1/graphql" NEXT_PUBLIC_IPFS_NODE="http://ipfs.zeitgeist.pm:5001" -NEXT_PUBLIC_RMRK_CHAIN_RPC_NODE="wss://kusama-node-staging.rmrk.link/" +NEXT_PUBLIC_RMRK_CHAIN_RPC_NODE="wss://kusama-node-staging.rmrk.link" NEXT_PUBLIC_AVATAR_API_HOST="https://avatar-bsr.zeitgeist.pm/" #enable in dev/staging to inspect react-query cache and query handling. diff --git a/.env.example b/.env.example index 04e49f347..28edc9fa0 100644 --- a/.env.example +++ b/.env.example @@ -24,7 +24,7 @@ NEXT_PUBLIC_AVATAR_COLLECTION_ID="2e55d4bf2e85715b63-ZEITASTAGE" NEXT_PUBLIC_SINGULAR_URL="https://singular-rmrk2-dev.vercel.app" NEXT_PUBLIC_RMRK_INDEXER_API="https://gql2.rmrk.dev/v1/graphql" NEXT_PUBLIC_IPFS_NODE="http://ipfs.zeitgeist.pm:5001" -NEXT_PUBLIC_RMRK_CHAIN_RPC_NODE="wss://kusama-node-staging.rmrk.link/" +NEXT_PUBLIC_RMRK_CHAIN_RPC_NODE="wss://kusama-node-staging.rmrk.link" NEXT_PUBLIC_AVATAR_API_HOST="https://avatar-bsr.zeitgeist.pm/" NEXT_PUBLIC_MIGRATION_IN_PROGRESS=false diff --git a/components/confirmation/ConfirmationProvider.tsx b/components/confirmation/ConfirmationProvider.tsx index ef9f4a242..ee4f08e09 100644 --- a/components/confirmation/ConfirmationProvider.tsx +++ b/components/confirmation/ConfirmationProvider.tsx @@ -16,13 +16,13 @@ export const ConfirmationProvider = () => { className="rounded-md px-4 py-2 text-gray-400" onClick={() => dismiss(id)} > - Cancel + {value.cancelLabel ?? "Cancel"} diff --git a/components/court/CourtAppealForm.tsx b/components/court/CourtAppealForm.tsx new file mode 100644 index 000000000..12b3a92de --- /dev/null +++ b/components/court/CourtAppealForm.tsx @@ -0,0 +1,56 @@ +import { useQueryClient } from "@tanstack/react-query"; +import { isRpcSdk } from "@zeitgeistpm/sdk"; +import TransactionButton from "components/ui/TransactionButton"; +import { courtCasesRootKey } from "lib/hooks/queries/court/useCourtCases"; +import { useExtrinsic } from "lib/hooks/useExtrinsic"; +import { useSdkv2 } from "lib/hooks/useSdkv2"; + +export const CourtAppealForm = ({ caseId }: { caseId: number }) => { + const [sdk, id] = useSdkv2(); + const queryClient = useQueryClient(); + + const { send, isReady, isLoading, isBroadcasting } = useExtrinsic( + () => { + if (isRpcSdk(sdk)) { + return sdk.api.tx.court.appeal(caseId); + } + return undefined; + }, + { + onSuccess: () => { + queryClient.invalidateQueries([id, courtCasesRootKey]); + }, + }, + ); + + return ( +
+
+

Appeal Court

+
+ +
+
+
+ If you think the court has made a mistake, you can appeal the + decision. This will start a new round of voting. +
+
+ + send()} + > +
+
Submit Appeal
+
+
+
+
+ ); +}; diff --git a/components/court/CourtCasesTable.tsx b/components/court/CourtCasesTable.tsx new file mode 100644 index 000000000..50fba245c --- /dev/null +++ b/components/court/CourtCasesTable.tsx @@ -0,0 +1,248 @@ +import { ZrmlCourtCourtInfo } from "@polkadot/types/lookup"; +import { isInfinity } from "@zeitgeistpm/utility/dist/infinity"; +import { blockDate } from "@zeitgeistpm/utility/dist/time"; +import InfoPopover from "components/ui/InfoPopover"; +import Skeleton from "components/ui/Skeleton"; +import Table, { TableColumn, TableData } from "components/ui/Table"; +import { useCaseMarketId } from "lib/hooks/queries/court/useCaseMarketId"; +import { CourtCaseInfo } from "lib/hooks/queries/court/useCourtCase"; +import { useCourtCases } from "lib/hooks/queries/court/useCourtCases"; +import { useVoteDrawsForCase } from "lib/hooks/queries/court/useVoteDraws"; +import { useMarket } from "lib/hooks/queries/useMarket"; +import { useChainTime } from "lib/state/chaintime"; +import { CourtStage, getCourtStage } from "lib/state/court/get-stage"; +import { useWallet } from "lib/state/wallet"; +import Link from "next/link"; +import { useMemo } from "react"; +import { AiOutlineEye } from "react-icons/ai"; +import { LuVote } from "react-icons/lu"; +import { courtStageCopy } from "./CourtStageTimer"; + +const columns: TableColumn[] = [ + { + header: "#", + accessor: "id", + type: "text", + }, + { + header: "Case", + accessor: "case", + type: "component", + }, + { + header: "Status", + accessor: "status", + type: "component", + }, + { + header: "Voting Ends", + accessor: "ends", + type: "text", + }, + { + header: "", + accessor: "actions", + type: "component", + }, +]; + +export const CourtCasesTable = () => { + const { data: cases } = useCourtCases(); + const time = useChainTime(); + + cases?.sort((a, b) => { + if (b.case.status.type === "Reassigned") return -1; + return a.case.roundEnds.vote.toNumber() > b.case.roundEnds.vote.toNumber() + ? 1 + : 0; + }); + + const tableData: TableData[] | undefined = cases?.map((courtCase) => { + return { + id: `${courtCase.id}`, + case: , + status: , + ends: + time && + new Intl.DateTimeFormat("default", { + dateStyle: "medium", + timeStyle: "short", + }).format(blockDate(time, courtCase.case.roundEnds.vote.toNumber())), + actions: , + }; + }); + + return ( +
+ + + ); +}; + +const CaseNameForCaseId = (props: { id: number }) => { + const { data: marketId } = useCaseMarketId(props.id); + const { data: market } = useMarket({ marketId: marketId! }); + return ( + <> + {market ? ( +
{market?.question}
+ ) : ( + + )} + + ); +}; + +const CaseStatus = ({ courtCase }: { courtCase: CourtCaseInfo }) => { + const { data: marketId } = useCaseMarketId(courtCase.id); + const { data: market } = useMarket({ marketId: marketId! }); + const chainTime = useChainTime(); + + const stage = useMemo(() => { + if (market && chainTime) { + return getCourtStage(chainTime, market, courtCase.case); + } + }, [chainTime, market]); + + const percentage = + stage && isInfinity(stage.remainingBlocks) + ? 100 + : stage + ? ((stage.totalTime - stage.remainingBlocks) / stage.totalTime) * 100 + : 0; + + return ( +
+ {stage ? ( + <> +
+
+ {caseStatusCopy[stage.type].title} +
+ + {caseStatusCopy[stage.type].description} + +
+ +
+
+
+
+
+ + ) : ( + + )} +
+ ); +}; + +const CaseActions = ({ + caseId, + courtCase, +}: { + caseId: number; + courtCase: ZrmlCourtCourtInfo; +}) => { + const wallet = useWallet(); + + const { data: marketId } = useCaseMarketId(caseId); + const { data: market } = useMarket({ marketId: marketId! }); + const chainTime = useChainTime(); + + const stage = useMemo(() => { + if (market && chainTime) { + return getCourtStage(chainTime, market, courtCase); + } + }, [chainTime, market]); + + const { data: draws } = useVoteDrawsForCase(caseId); + + const connectedParticipantDraw = draws?.find( + (draw) => draw.courtParticipant.toString() === wallet.realAddress, + ); + + const canVote = useMemo(() => { + return stage?.type === "vote" && connectedParticipantDraw?.vote.isDrawn; + }, [stage, connectedParticipantDraw]); + + const canReveal = useMemo(() => { + return ( + stage?.type === "aggregation" && connectedParticipantDraw?.vote.isSecret + ); + }, [stage, connectedParticipantDraw]); + + return ( +
+ + + +
+ ); +}; + +const caseStatusCopy: Record< + CourtStage["type"], + { + title: string; + description: string; + color: string; + } +> = { + "pre-vote": { + title: "Pre-Vote", + description: "Waiting for the vote period to start.", + color: "text-gray-400", + }, + vote: { + title: "Vote", + description: "Case is now open for voting by jurors.", + color: "text-blue-400", + }, + aggregation: { + title: "Aggregation", + description: "Votes can now be revealed by jurors.", + color: "text-purple-400", + }, + appeal: { + title: "Appeal", + description: "Jurors can now appeal the voted outcome.", + color: "text-orange-400", + }, + reassigned: { + title: "Reassigned", + description: "Case has been reassigned and winners paid out.", + color: "text-gray-400", + }, + closed: { + title: "Closed", + description: "Case has been closed. Waiting to be reassigned.", + color: "text-gray-400", + }, +}; diff --git a/components/court/CourtStageTimer.tsx b/components/court/CourtStageTimer.tsx new file mode 100644 index 000000000..dd893cd1a --- /dev/null +++ b/components/court/CourtStageTimer.tsx @@ -0,0 +1,96 @@ +import { isInfinity } from "@zeitgeistpm/utility/dist/infinity"; +import * as Time from "@zeitgeistpm/utility/dist/time"; +import Skeleton from "components/ui/Skeleton"; +import { useChainTime } from "lib/state/chaintime"; +import { CourtStage } from "lib/state/court/get-stage"; +import moment from "moment"; +import { useMemo } from "react"; + +export const CourtStageTimer = ({ stage }: { stage?: CourtStage }) => { + const time = useChainTime(); + + const timeLeft = useMemo(() => { + if (!time || !stage) return undefined; + const left = Time.toMs(time, { start: 0, end: stage.remainingBlocks }); + return moment.duration(left, "millisecond"); + }, [time, stage]); + + if (!stage || !time) { + return ; + } + + const percentage = isInfinity(stage.remainingBlocks) + ? 100 + : ((stage.totalTime - stage.remainingBlocks) / stage.totalTime) * 100; + + return ( + <> +
+
+
+ {courtStageCopy[stage.type].title} +
+
+ {courtStageCopy[stage.type].description} +
+ {stage.type !== "closed" && stage.type !== "reassigned" && ( +
+ {timeLeft?.humanize()} left +
+ )} +
+
+
+ {percentage.toFixed(0)}% +
+
+
+
+
+
+ + ); +}; + +export const courtStageCopy: Record< + CourtStage["type"], + { title: string; description: string; color: string } +> = { + "pre-vote": { + title: "Pre Vote", + description: "Case is waiting for the vote period to start.", + color: "bg-yellow-400", + }, + vote: { + title: "Voting", + description: "Voting is open for this case.", + color: "bg-blue-400", + }, + aggregation: { + title: "Aggregation", + description: "Votes can now be revealed by jurors.", + color: "bg-purple-400", + }, + appeal: { + title: "Appeal", + description: "Jurors can now appeal the case.", + color: "bg-orange-400", + }, + reassigned: { + title: "Reassigned", + description: "The case is now reassigned. Winners paid out.", + color: "bg-gray-400", + }, + closed: { + title: "Closed", + description: "The case is now closed. Waiting to be reassigned.", + color: "bg-orange-400", + }, +}; + +export default CourtStageTimer; diff --git a/components/court/CourtVoteForm.tsx b/components/court/CourtVoteForm.tsx new file mode 100644 index 000000000..2f45e0f1c --- /dev/null +++ b/components/court/CourtVoteForm.tsx @@ -0,0 +1,204 @@ +import { Dialog } from "@headlessui/react"; +import { u8aToHex } from "@polkadot/util"; +import { useQueryClient } from "@tanstack/react-query"; +import { FullMarketFragment } from "@zeitgeistpm/indexer"; +import { CategoricalAssetId, isRpcSdk, parseAssetId } from "@zeitgeistpm/sdk"; +import MarketContextActionOutcomeSelector from "components/markets/MarketContextActionOutcomeSelector"; +import Modal from "components/ui/Modal"; +import TransactionButton from "components/ui/TransactionButton"; +import { voteDrawsRootKey } from "lib/hooks/queries/court/useVoteDraws"; +import { useExtrinsic } from "lib/hooks/useExtrinsic"; +import { useSdkv2 } from "lib/hooks/useSdkv2"; +import { useCourtCommitmentHash } from "lib/state/court/useCourtCommitmentHash"; +import { useCourtSalt } from "lib/state/court/useCourtSalt"; +import { useCourtVote } from "lib/state/court/useVoteOutcome"; +import Image from "next/image"; +import React, { useState } from "react"; +import { AiOutlineEye } from "react-icons/ai"; +import { FaArrowRight } from "react-icons/fa"; +import { HiOutlineDocumentDownload } from "react-icons/hi"; + +export type CourtVoteFormProps = { + caseId: number; + market: FullMarketFragment; +}; + +export const CourtVoteForm: React.FC = ({ + caseId, + market, +}) => { + const [sdk, id] = useSdkv2(); + const queryClient = useQueryClient(); + + const outcomeAssets = market.outcomeAssets.map( + (assetIdString) => + parseAssetId(assetIdString).unwrap() as CategoricalAssetId, + ); + + const { vote, setVote, committed, commitVote } = useCourtVote({ + caseId, + marketId: market.marketId, + defaultValue: outcomeAssets[0], + }); + + const { salt, phraseStorage, downloadBackup, isBackedUp } = useCourtSalt({ + marketId: market.marketId, + caseId: caseId, + }); + + const { commitmentHash } = useCourtCommitmentHash({ + salt, + selectedOutcome: vote, + }); + + const [showDetails, setShowDetails] = useState(false); + + const { send, isReady, isLoading, isBroadcasting } = useExtrinsic( + () => { + if (isRpcSdk(sdk) && commitmentHash) { + return sdk.api.tx.court.vote(caseId, commitmentHash); + } + return undefined; + }, + { + onSuccess: () => { + commitVote(); + queryClient.invalidateQueries([id, voteDrawsRootKey, caseId]); + }, + }, + ); + + const onClickDownloadSeed = () => { + downloadBackup(); + }; + + return ( +
+
+

Vote

+
+
+
+ { + setVote(assetId as CategoricalAssetId); + }} + /> +
+ +
+
+
+
+ Your vote is secret and can only be revealed when the vote + period ends. For this a secret salt has been generated for you + that is needed when revealing the vote. +
+
+ This is stored locally for you in your browser and will be + automatically used when its time to reveal your vote. +
+
+ But please download a backup before proceeding. +
+ +
+ +
+ +
setShowDetails(true)} + > + Show Details +
+ setShowDetails(false)}> + +
+

Commitment Hash

+

+ The commitment hash is calculated using a combination of your + account, the outcome you are voting for and a salt generated + from the secret phrase. +

+

+ This is supplied to the chain instead of the direct outcome + when voting, so that the voted outcome is not known to other + participants. Yet ensures that when its revealed it can be + verified that the committed vote and what was revealed was + correct. +

+ + + vote_item = VoteItem::Outcome(OutcomeReport::Categorical( + {vote.CategoricalOutcome[1]})) {"->"}{" "} + {market.categories?.[vote.CategoricalOutcome[1]].ticker} + +
+ salt ={" "} + BlakeTwo256Hash + (secretPhrase) {"->"}{" "} + {u8aToHex(salt)} +
+
+ commitmentHash ={" "} + BlakeTwo256Hash(juror, + vote_item, salt) +
+
+ + {commitmentHash && u8aToHex(commitmentHash)} +
+

Salt Seed Backup

+

+ This is the content of the downloadable backup file, and the + data used to generate the commitment hash. +

+
+                  {JSON.stringify(phraseStorage, undefined, 2)}
+                
+
+
+ +
+
+
+
+ + {/*
{u8aToHex(commitmentHash)}
*/} + + send()} + > +
+
+ {!isBackedUp + ? "Please backup salt seed to proceed" + : "Place A Vote"} +
+
+
+
+
+ ); +}; diff --git a/components/court/CourtVoteRevealForm.tsx b/components/court/CourtVoteRevealForm.tsx new file mode 100644 index 000000000..8f653c1d1 --- /dev/null +++ b/components/court/CourtVoteRevealForm.tsx @@ -0,0 +1,201 @@ +import { ZrmlCourtDraw } from "@polkadot/types/lookup"; +import { u8aToHex } from "@polkadot/util"; +import { useQueryClient } from "@tanstack/react-query"; +import { FullMarketFragment } from "@zeitgeistpm/indexer"; +import { CategoricalAssetId, isRpcSdk, parseAssetId } from "@zeitgeistpm/sdk"; +import MarketContextActionOutcomeSelector from "components/markets/MarketContextActionOutcomeSelector"; +import TransactionButton from "components/ui/TransactionButton"; +import { voteDrawsRootKey } from "lib/hooks/queries/court/useVoteDraws"; +import { useExtrinsic } from "lib/hooks/useExtrinsic"; +import { useSdkv2 } from "lib/hooks/useSdkv2"; +import { IOCourtSaltPhraseStorage } from "lib/state/court/CourtSaltPhraseStorage"; +import { useCourtCommitmentHash } from "lib/state/court/useCourtCommitmentHash"; +import { useCourtSalt } from "lib/state/court/useCourtSalt"; +import { useCourtVote } from "lib/state/court/useVoteOutcome"; +import { shortenAddress } from "lib/util"; +import React, { useState } from "react"; +import { AiOutlineCheck } from "react-icons/ai"; +import { BsFillFileEarmarkDiffFill } from "react-icons/bs"; + +export type CourtVoteRevealFormProps = { + caseId: number; + market: FullMarketFragment; + secretVote?: ZrmlCourtDraw["vote"]["asSecret"]; +}; + +export const CourtVoteRevealForm: React.FC = ({ + caseId, + market, + secretVote, +}) => { + const [sdk, id] = useSdkv2(); + const queryClient = useQueryClient(); + + const outcomeAssets = market.outcomeAssets.map( + (assetIdString) => + parseAssetId(assetIdString).unwrap() as CategoricalAssetId, + ); + + const { vote, setVote, committed } = useCourtVote({ + caseId, + marketId: market.marketId, + defaultValue: outcomeAssets[0], + }); + + const { salt, setPhraseSeed } = useCourtSalt({ + marketId: market.marketId, + caseId: caseId, + }); + + const { commitmentHash } = useCourtCommitmentHash({ + salt, + selectedOutcome: vote, + }); + + const { send, isReady, isLoading, isBroadcasting } = useExtrinsic( + () => { + if (isRpcSdk(sdk) && salt) { + return sdk.api.tx.court.revealVote( + caseId, + { + Outcome: { + Categorical: vote.CategoricalOutcome[1], + }, + }, + salt, + ); + } + return undefined; + }, + { + onSuccess: () => { + queryClient.invalidateQueries([id, voteDrawsRootKey, caseId]); + }, + }, + ); + + const [hasDroppedFile, setHasDroppedFile] = useState(false); + + const onChangeSelectedOutcome = (assetId: CategoricalAssetId) => { + setVote(assetId as CategoricalAssetId); + }; + + const onCourtSaltBackupDragOver = (e: React.DragEvent) => { + e.preventDefault(); + }; + + const onCourtSaltBackupDrop = async (e: React.DragEvent) => { + e.preventDefault(); + + const item = e.dataTransfer.items[0]; + + if (item.kind === "file") { + const file = item.getAsFile(); + + if (file) { + const raw = await file?.text(); + const parsed = IOCourtSaltPhraseStorage.safeParse(JSON.parse(raw)); + + if (parsed.success) { + const wasSet = await setPhraseSeed(parsed.data); + setHasDroppedFile(wasSet); + } + } + } + }; + + const commitmentHashMatches = + secretVote?.commitment.toHex() === u8aToHex(commitmentHash); + + return ( +
+
+

Reveal Vote

+
+
+
+ +
+ + {!committed && ( + <> +
+
+ No local data regarding your vote was found, you have to provide + the same answer when revealing as when you voted. +
+
+ + )} + + {commitmentHashMatches ? ( +
+
+

+ {hasDroppedFile + ? "Commitment Hash Match" + : "Using locally saved commitment hash"}{" "} + +

+ + {shortenAddress(u8aToHex(commitmentHash))} + +
+
+ ) : ( +
+
+
+
+
Drop backup of seed file to restore.
+
+ You saved this to your local machine when voting. +
+
+ +
+ {hasDroppedFile && ( +
+ Invalid Backup. Hash mismatch. +
+ )} +
+
+ )} + + send()} + > +
+
Reveal Vote
+
+
+
+
+ ); +}; diff --git a/components/court/DelegateJuror.tsx b/components/court/DelegateButton.tsx similarity index 96% rename from components/court/DelegateJuror.tsx rename to components/court/DelegateButton.tsx index a76f9a3ed..69f006fba 100644 --- a/components/court/DelegateJuror.tsx +++ b/components/court/DelegateButton.tsx @@ -38,7 +38,7 @@ const DelegateButton = ({ address }: { address: string }) => { const notificationStore = useNotifications(); const wallet = useWallet(); const { data: balance } = useZtgBalance(wallet.realAddress); - const participant = useConnectedCourtParticipant(); + const connectedParticipant = useConnectedCourtParticipant(); const queryClient = useQueryClient(); const { isLoading, send, fee } = useExtrinsic( @@ -132,10 +132,10 @@ const DelegateButton = ({ address }: { address: string }) => { ) { return `Stake cannot be less than ${constants?.court.minJurorStake} ${constants.tokenSymbol}`; } else if ( - participant?.stake && - participant?.stake.div(ZTG).greaterThan(value) + connectedParticipant?.stake && + connectedParticipant?.stake.div(ZTG).greaterThan(value) ) { - return `Stake must be higher than your current stake of ${participant?.stake + return `Stake must be higher than your current stake of ${connectedParticipant?.stake .div(ZTG) .toNumber()} ${constants?.tokenSymbol}`; } diff --git a/components/court/JoinCourt.tsx b/components/court/JoinCourtAsJurorButton.tsx similarity index 66% rename from components/court/JoinCourt.tsx rename to components/court/JoinCourtAsJurorButton.tsx index 28335282a..4a73b90fa 100644 --- a/components/court/JoinCourt.tsx +++ b/components/court/JoinCourtAsJurorButton.tsx @@ -2,6 +2,7 @@ import { Dialog } from "@headlessui/react"; import { useQueryClient } from "@tanstack/react-query"; import { isRpcSdk, ZTG } from "@zeitgeistpm/sdk"; import FormTransactionButton from "components/ui/FormTransactionButton"; +import InfoPopover from "components/ui/InfoPopover"; import Input from "components/ui/Input"; import Modal from "components/ui/Modal"; import Decimal from "decimal.js"; @@ -16,7 +17,7 @@ import { useWallet } from "lib/state/wallet"; import { useEffect, useState } from "react"; import { useForm } from "react-hook-form"; -const JoinCourtButton = () => { +const JoinCourtAsJurorButton = ({ className }: { className?: string }) => { const [isOpen, setIsOpen] = useState(false); const { data: constants } = useChainConstants(); const { @@ -35,7 +36,7 @@ const JoinCourtButton = () => { const notificationStore = useNotifications(); const wallet = useWallet(); const { data: balance } = useZtgBalance(wallet.realAddress); - const participant = useConnectedCourtParticipant(); + const connectedParticipant = useConnectedCourtParticipant(); const queryClient = useQueryClient(); const { isLoading, send, fee } = useExtrinsic( @@ -49,10 +50,14 @@ const JoinCourtButton = () => { }, { onSuccess: () => { - notificationStore.pushNotification("Successfully joined court", { - type: "Success", - }); + notificationStore.pushNotification( + "Successfully joined court as juror.", + { + type: "Success", + }, + ); queryClient.invalidateQueries([id, participantsRootKey]); + setIsOpen(false); }, }, ); @@ -85,15 +90,42 @@ const JoinCourtButton = () => { return ( <> - +
+ + {connectedParticipant?.type === "Delegator" && ( +
+ + You are currently delegating to other jurors. If you join the + court as a juror, your delegations will be removed and delegated + to your personal juror stake. + +
+ )} +
+ setIsOpen(false)}> -

Become a Juror

+

+ {connectedParticipant?.type === "Juror" + ? "Increase Personal Stake" + : "Become a Juror"} +

{ ) { return `Stake cannot be less than ${constants?.court.minJurorStake} ${constants.tokenSymbol}`; } else if ( - participant?.stake && - participant?.stake.div(ZTG).greaterThan(value) + connectedParticipant?.stake && + connectedParticipant?.stake.div(ZTG).greaterThan(value) ) { - return `Stake must be higher than your current stake of ${participant?.stake + return `Stake must exceed your current stake of ${connectedParticipant?.stake .div(ZTG) - .toNumber()} ${constants?.tokenSymbol}`; + .toNumber() + .toFixed(3)} ${constants?.tokenSymbol}`; } }, })} @@ -137,26 +170,40 @@ const JoinCourtButton = () => { {constants?.tokenSymbol}
+ -
+ +
<>{formState.errors["amount"]?.message}
+
Network Fee: {fee ? fee.amount.div(ZTG).toFixed(3) : 0}{" "} {fee?.symbol}
+ + {connectedParticipant?.type === "Delegator" && ( +
+ You are currently delegating to other jurors. If you join the + court as a juror, your delegations will be removed and stake + will be moved to your personal stake. +
+ )} + - Join + {connectedParticipant?.type === "Juror" + ? "Increase Stake" + : "Join as Juror"}
@@ -166,4 +213,4 @@ const JoinCourtButton = () => { ); }; -export default JoinCourtButton; +export default JoinCourtAsJurorButton; diff --git a/components/court/JurorsTable.tsx b/components/court/JurorsTable.tsx index c886cfa21..40601ae87 100644 --- a/components/court/JurorsTable.tsx +++ b/components/court/JurorsTable.tsx @@ -1,7 +1,7 @@ import Avatar from "components/ui/Avatar"; import Table, { TableColumn, TableData } from "components/ui/Table"; import Link from "next/link"; -import DelegateButton from "./DelegateJuror"; +import DelegateButton from "./DelegateButton"; import { useParticipants } from "lib/hooks/queries/court/useParticipants"; import Decimal from "decimal.js"; import { ZTG } from "@zeitgeistpm/sdk"; diff --git a/components/court/ManageDelegationButton.tsx b/components/court/ManageDelegationButton.tsx new file mode 100644 index 000000000..92297363f --- /dev/null +++ b/components/court/ManageDelegationButton.tsx @@ -0,0 +1,75 @@ +import { Dialog } from "@headlessui/react"; +import { useQueryClient } from "@tanstack/react-query"; +import { isRpcSdk, ZTG } from "@zeitgeistpm/sdk"; +import Avatar from "components/ui/Avatar"; +import FormTransactionButton from "components/ui/FormTransactionButton"; +import InfoPopover from "components/ui/InfoPopover"; +import Input from "components/ui/Input"; +import Modal from "components/ui/Modal"; +import Decimal from "decimal.js"; +import { useConnectedCourtParticipant } from "lib/hooks/queries/court/useConnectedCourtParticipant"; +import { + participantsRootKey, + useParticipants, +} from "lib/hooks/queries/court/useParticipants"; +import { useChainConstants } from "lib/hooks/queries/useChainConstants"; +import { useZtgBalance } from "lib/hooks/queries/useZtgBalance"; +import { useExtrinsic } from "lib/hooks/useExtrinsic"; +import { useSdkv2 } from "lib/hooks/useSdkv2"; +import { useNotifications } from "lib/state/notifications"; +import { useWallet } from "lib/state/wallet"; +import { shortenAddress } from "lib/util"; +import { useEffect, useState } from "react"; +import { useForm } from "react-hook-form"; +import ManageDelegationsForm from "./ManageDelegationsForm"; + +const ManageDelegationButton = ({ className }: { className?: string }) => { + const [isOpen, setIsOpen] = useState(false); + const connectedParticipant = useConnectedCourtParticipant(); + + return ( + <> +
+ + {connectedParticipant?.type === "Juror" && ( +
+ + You are currently a juror. If you delegate to other jurors your + stake will be removed from your personal stake and delegated + evenly across your selected jurors. You will not be a juror after + this action. + +
+ )} +
+ + setIsOpen(false)}> + +

Delegate

+ +
+ setIsOpen(false)} + /> +
+
+
+ + ); +}; + +export default ManageDelegationButton; diff --git a/components/court/ManageDelegationsForm.tsx b/components/court/ManageDelegationsForm.tsx new file mode 100644 index 000000000..e485b9714 --- /dev/null +++ b/components/court/ManageDelegationsForm.tsx @@ -0,0 +1,257 @@ +import { useQueryClient } from "@tanstack/react-query"; +import { isRpcSdk, ZTG } from "@zeitgeistpm/sdk"; +import Avatar from "components/ui/Avatar"; +import FormTransactionButton from "components/ui/FormTransactionButton"; +import Input from "components/ui/Input"; +import Decimal from "decimal.js"; +import { useConnectedCourtParticipant } from "lib/hooks/queries/court/useConnectedCourtParticipant"; +import { + participantsRootKey, + useParticipants, +} from "lib/hooks/queries/court/useParticipants"; +import { useLockedBalance } from "lib/hooks/queries/useBalance"; +import { useChainConstants } from "lib/hooks/queries/useChainConstants"; +import { useZtgBalance } from "lib/hooks/queries/useZtgBalance"; +import { useExtrinsic } from "lib/hooks/useExtrinsic"; +import { useSdkv2 } from "lib/hooks/useSdkv2"; +import { useNotifications } from "lib/state/notifications"; +import { useWallet } from "lib/state/wallet"; +import { shortenAddress } from "lib/util"; +import { useEffect } from "react"; +import { useForm } from "react-hook-form"; + +export type ManageDelegationsFormProps = { + onSuccessfulSubmit?: () => void; +}; + +const ManageDelegationsForm = (props: ManageDelegationsFormProps) => { + const { data: constants } = useChainConstants(); + + const { data: participants } = useParticipants(); + const connectedParticipant = useConnectedCourtParticipant(); + + const { + register, + handleSubmit, + getValues, + formState, + watch, + setValue, + trigger, + reset, + } = useForm<{ + amount: number; + percentage: string; + delegates: string[]; + }>({ + reValidateMode: "onChange", + mode: "onChange", + defaultValues: { + delegates: connectedParticipant?.delegations, + amount: connectedParticipant?.stake?.div(ZTG).toNumber(), + }, + }); + + const [sdk, id] = useSdkv2(); + const notificationStore = useNotifications(); + const wallet = useWallet(); + const { data: freeBalance } = useZtgBalance(wallet.realAddress); + const { data: lockedBalance } = useLockedBalance(wallet.realAddress, { + Ztg: null, + }); + + const availableDelegationBalance = new Decimal( + freeBalance?.toString() ?? 0, + ).add(lockedBalance ?? 0); + + const queryClient = useQueryClient(); + + const { isLoading, send, fee } = useExtrinsic( + () => { + const amount = getValues("amount"); + const delegates = getValues("delegates"); + + if (!isRpcSdk(sdk) || !amount) return; + + return sdk.api.tx.court.delegate( + new Decimal(amount).mul(ZTG).toFixed(0), + delegates, + ); + }, + { + onSuccess: () => { + notificationStore.pushNotification( + "Successfully delegated stake to jurors.", + { + type: "Success", + }, + ); + queryClient.invalidateQueries([id, participantsRootKey]); + props.onSuccessfulSubmit?.(); + }, + }, + ); + + useEffect(() => { + const subscription = watch((value, { name, type }) => { + const changedByUser = type != null; + + if (!changedByUser || !availableDelegationBalance) return; + + if (name === "percentage") { + setValue( + "amount", + availableDelegationBalance + .mul(value.percentage ?? 0) + .div(100) + .div(ZTG) + .toNumber(), + ); + } else if (name === "amount") { + setValue( + "percentage", + new Decimal(value.amount ?? 0) + .mul(ZTG) + .div(availableDelegationBalance) + .mul(100) + .toString(), + ); + } + trigger("amount"); + }); + return () => subscription.unsubscribe(); + }, [watch, availableDelegationBalance]); + + const onSubmit = () => { + send(); + }; + + const jurors = participants?.filter( + (p) => p.type === "Juror" && p.address !== connectedParticipant?.address, + ); + + return ( +
+
+ { + if ( + value > (availableDelegationBalance?.div(ZTG).toNumber() ?? 0) + ) { + return `Insufficient balance. Current balance: ${availableDelegationBalance + ?.div(ZTG) + .toFixed(3)}`; + } else if (value <= 0) { + return "Value cannot be zero or less"; + } else if ( + constants?.court.minJurorStake && + value < constants?.court.minJurorStake + ) { + return `Stake cannot be less than ${constants?.court.minJurorStake} ${constants.tokenSymbol}`; + } else if ( + connectedParticipant?.stake && + connectedParticipant?.stake.div(ZTG).greaterThan(value) + ) { + return `Stake must exceed your current stake of ${connectedParticipant?.stake + .div(ZTG) + .toNumber() + .toFixed(3)} ${constants?.tokenSymbol}`; + } + }, + })} + /> + +
+ {constants?.tokenSymbol} +
+
+ + + +
+
+

Juror

+

Delegated

+
+ {jurors && + jurors.map((juror) => ( +
+
+ +
+ {shortenAddress(juror.address)} +
+
+ { + if (delegates?.length === 0) { + return "At least one juror must be selected for delegation."; + } + if ( + delegates?.length > (constants?.court.maxDelegations ?? 5) + ) { + return "Maximum of 5 jurors can be selected for delegation."; + } + }, + })} + value={juror.address} + /> +
+ ))} +
+ +
+ <> + {formState.errors["amount"]?.message || + formState.errors["delegates"]?.message} + +
+ +
+ + Network Fee: {fee ? fee.amount.div(ZTG).toFixed(3) : 0} {fee?.symbol} + +
+ + {connectedParticipant?.type === "Juror" && ( +
+ You are currently a juror. If you delegate to other jurors your stake + will be removed from your personal stake and delegated evenly across + your selected jurors. You will not be a juror after this action. +
+ )} + + + Delegate Stake + + + ); +}; + +export default ManageDelegationsForm; diff --git a/components/court/PrepareExitCourt.tsx b/components/court/PrepareExitCourt.tsx index c3f3cd28c..f3190606e 100644 --- a/components/court/PrepareExitCourt.tsx +++ b/components/court/PrepareExitCourt.tsx @@ -13,7 +13,7 @@ import { useNotifications } from "lib/state/notifications"; import { useWallet } from "lib/state/wallet"; import { useState } from "react"; -const PrepareExitCourtButton = () => { +const PrepareExitCourtButton = ({ className }: { className?: string }) => { const [isOpen, setIsOpen] = useState(false); const { data: constants } = useChainConstants(); const [sdk, id] = useSdkv2(); @@ -46,7 +46,7 @@ const PrepareExitCourtButton = () => { return ( <>
+ + ); +}; + +type DenounceVoteButtonProps = { + caseId: number; + draw: ZrmlCourtDraw; + market: FullMarketFragment; +}; + +const DenounceVoteButton: React.FC = ({ + caseId, + draw, + market, +}) => { + const [sdk, id] = useSdkv2(); + const queryClient = useQueryClient(); + const [open, setOpen] = useState(false); + + const outcomeAssets = market.outcomeAssets.map( + (assetIdString) => + parseAssetId(assetIdString).unwrap() as CategoricalAssetId, + ); + + const [selectedVoteOutcome, setSelectedVoteOutcome] = useState( + outcomeAssets[0], + ); + + const [salt, setSalt] = useState(""); + + const { send, isBroadcasting, isLoading } = useExtrinsic( + () => { + if (isRpcSdk(sdk)) { + return sdk.api.tx.court.denounceVote( + caseId, + draw.courtParticipant.toString(), + { Outcome: selectedVoteOutcome[1] }, + salt, + ); + } + }, + { + onSuccess: () => { + queryClient.invalidateQueries([id, voteDrawsRootKey, caseId]); + }, + }, + ); + + const onClose = () => { + setOpen(false); + setSelectedVoteOutcome(outcomeAssets[0]); + setSalt(""); + }; + + return ( + <> + + + +

Denounce Vote

+

+ Denouncing a vote should be done if a vote has been revealed during + the voting phase. To denounce you have to know the outcome{" "} + the juror voted for and the salt that was used when voting. +

+
+ +
+ { + setSelectedVoteOutcome(assetId as CategoricalAssetId); + }} + /> +
+
+
+ + { + setSalt(e.target.value); + }} + className="w-2/3 text-sm" + placeholder="0x....." + /> +
+ send()} + className="!bg-orange-400" + > + Denounce Vote + +
+
+ + ); +}; diff --git a/components/create/editor/Editor.tsx b/components/create/editor/Editor.tsx index 1f1ce01b4..83e3de649 100644 --- a/components/create/editor/Editor.tsx +++ b/components/create/editor/Editor.tsx @@ -15,7 +15,7 @@ import { useMarketDraftEditor } from "lib/state/market-creation/editor"; import * as MarketDraft from "lib/state/market-creation/types/draft"; import { persistentAtom } from "lib/state/util/persistent-atom"; import dynamic from "next/dynamic"; -import { useRef } from "react"; +import { useMemo, useRef } from "react"; import { AiOutlineInfoCircle } from "react-icons/ai"; import { LuFileWarning } from "react-icons/lu"; import { ErrorMessage } from "./ErrorMessage"; @@ -38,6 +38,10 @@ import TimezoneSelect from "./inputs/TimezoneSelect"; import { Loader } from "components/ui/Loader"; import { LiquidityInputAmm2 } from "./inputs/LiquidityAMM2"; import FeeSelect from "./inputs/FeeSelect"; +import { useWallet } from "lib/state/wallet"; +import { marketFormDataToExtrinsicParams } from "lib/state/market-creation/types/form"; +import { KeyringPairOrExtSigner } from "@zeitgeistpm/rpc"; +import { CreateMarketParams, RpcContext } from "@zeitgeistpm/sdk"; const QuillEditor = dynamic(() => import("components/ui/QuillEditor"), { ssr: false, @@ -50,6 +54,7 @@ const createMarketStateAtom = persistentAtom({ }); export const MarketEditor = () => { + const wallet = useWallet(); const [state, setState] = useAtom(createMarketStateAtom); const editor = useMarketDraftEditor({ draft: state, update: setState }); @@ -105,6 +110,27 @@ export const MarketEditor = () => { const isLoaded = Boolean(chainTime && isFetched); const isAMM2Market = form.answers && form.answers.answers.length === 2; + const creationParams = useMemo< + CreateMarketParams | undefined + >(() => { + let signer = wallet.getSigner(); + + if (!editor.isValid || !chainTime || !signer) return; + + const proxy = wallet.getProxyFor(wallet.activeAccount?.address); + + if (proxy && proxy.enabled) { + return marketFormDataToExtrinsicParams( + editor.form, + { address: wallet.realAddress } as KeyringPairOrExtSigner, + chainTime, + signer, + ); + } + + return marketFormDataToExtrinsicParams(editor.form, signer, chainTime); + }, [editor.form, chainTime, wallet.activeAccount]); + return ( <> {isLoaded === false && ( @@ -668,12 +694,12 @@ export const MarketEditor = () => { disabled={!isWizard} >
- +
{(!editor.isWizard || currentStep.label == "Summary") && ( - + )} diff --git a/components/create/editor/Publishing.tsx b/components/create/editor/Publishing.tsx index 642fff598..dbe7b93a2 100644 --- a/components/create/editor/Publishing.tsx +++ b/components/create/editor/Publishing.tsx @@ -2,8 +2,10 @@ import { Dialog } from "@headlessui/react"; import { useQuery } from "@tanstack/react-query"; import { PollingTimeout, poll } from "@zeitgeistpm/avatara-util"; import { + CreateMarketParams, IOForeignAssetId, IOZtgAssetId, + RpcContext, ZTG, isFullSdk, } from "@zeitgeistpm/sdk"; @@ -18,69 +20,48 @@ import { import { checkMarketExists } from "lib/gql/markets"; import { useBalance } from "lib/hooks/queries/useBalance"; import { useChainConstants } from "lib/hooks/queries/useChainConstants"; +import { useFeePayingAsset } from "lib/hooks/queries/useFeePayingAsset"; import { useSdkv2 } from "lib/hooks/useSdkv2"; -import { useChainTime } from "lib/state/chaintime"; import { MarketDraftEditor } from "lib/state/market-creation/editor"; -import { marketFormDataToExtrinsicParams } from "lib/state/market-creation/types/form"; import { NotificationType, useNotifications } from "lib/state/notifications"; import { useWallet } from "lib/state/wallet"; +import { assetsAreEqual } from "lib/util/assets-are-equal"; +import { formatNumberCompact } from "lib/util/format-compact"; import { isArray } from "lodash-es"; import { useRouter } from "next/router"; -import { useMemo, useState } from "react"; +import { useState } from "react"; import { LuFileWarning } from "react-icons/lu"; import { RiSendPlaneLine } from "react-icons/ri"; -import type { KeyringPairOrExtSigner } from "@zeitgeistpm/rpc"; -import { useFeePayingAsset } from "lib/hooks/queries/useFeePayingAsset"; -import { assetsAreEqual } from "lib/util/assets-are-equal"; -import { formatNumberCompact } from "lib/util/format-compact"; export type PublishingProps = { editor: MarketDraftEditor; + creationParams?: CreateMarketParams; }; -export const Publishing = ({ editor }: PublishingProps) => { +export const Publishing = ({ editor, creationParams }: PublishingProps) => { const [sdk] = useSdkv2(); const wallet = useWallet(); const router = useRouter(); - const chainTime = useChainTime(); const notifications = useNotifications(); const [isTransacting, setIsTransacting] = useState(false); const [totalCostIsOpen, setTotalCostIsOpen] = useState(false); const { data: constants } = useChainConstants(); - const params = useMemo(() => { - let signer = wallet.getSigner(); - - if (!editor.isValid || !chainTime || !signer) return; - - const proxy = wallet.getProxyFor(wallet.activeAccount?.address); - - if (proxy && proxy.enabled) { - return marketFormDataToExtrinsicParams( - editor.form, - { address: wallet.realAddress } as KeyringPairOrExtSigner, - chainTime, - signer, - ); - } - - return marketFormDataToExtrinsicParams(editor.form, signer, chainTime); - }, [editor.form, chainTime, wallet.activeAccount]); - const feesEnabled = !( !sdk || - !params || + !creationParams || !editor.isValid || !wallet.activeAccount ); const { data: baseFee } = useQuery( - [params, wallet.activeAccount], + [creationParams, wallet.activeAccount], async () => { if (!feesEnabled) { return new Decimal(0); } - const paymentInfo = await sdk.model.markets.create.calculateFees(params); + const paymentInfo = + await sdk.model.markets.create.calculateFees(creationParams); return new Decimal(paymentInfo.partialFee.toString() ?? 0).div(ZTG); }, { @@ -159,7 +140,7 @@ export const Publishing = ({ editor }: PublishingProps) => { (!foreignCurrencyCost || foreignAssetBalanceDelta?.gte(0)); const submit = async () => { - if (params && isFullSdk(sdk)) { + if (creationParams && isFullSdk(sdk)) { setIsTransacting(true); try { @@ -170,7 +151,7 @@ export const Publishing = ({ editor }: PublishingProps) => { }); const result = await sdk.model.markets.create( - params, + creationParams, IOForeignAssetId.is(feeDetails?.assetId) ? feeDetails?.assetId : undefined, diff --git a/components/create/editor/Summary.tsx b/components/create/editor/Summary.tsx index 7ac7766ef..efbad34b4 100644 --- a/components/create/editor/Summary.tsx +++ b/components/create/editor/Summary.tsx @@ -19,6 +19,7 @@ import dynamic from "next/dynamic"; import Image from "next/image"; import React, { useMemo } from "react"; import { LuFileWarning } from "react-icons/lu"; +import { CreateMarketParams, RpcContext } from "@zeitgeistpm/sdk"; const QuillViewer = dynamic(() => import("components/ui/QuillViewer"), { ssr: false, @@ -26,9 +27,13 @@ const QuillViewer = dynamic(() => import("components/ui/QuillViewer"), { export type MarketSummaryProps = { editor: MarketDraftEditor; + creationParams?: CreateMarketParams; }; -export const MarketSummary = ({ editor }: MarketSummaryProps) => { +export const MarketSummary = ({ + editor, + creationParams, +}: MarketSummaryProps) => { const chainTime = useChainTime(); const { form } = editor; @@ -185,6 +190,12 @@ export const MarketSummary = ({ editor }: MarketSummaryProps) => {
{form.moderation}
+ {creationParams?.disputeMechanism && ( +
+ {" "} +
{creationParams.disputeMechanism.toString()}
+
+ )}
diff --git a/components/markets/MarketContextActionOutcomeSelector.tsx b/components/markets/MarketContextActionOutcomeSelector.tsx index 70d34925a..93cf1a975 100644 --- a/components/markets/MarketContextActionOutcomeSelector.tsx +++ b/components/markets/MarketContextActionOutcomeSelector.tsx @@ -7,6 +7,7 @@ import Fuse from "fuse.js"; import { calcMarketColors } from "lib/util/color-calc"; import { omit } from "lodash-es"; import { useEffect, useMemo, useRef, useState } from "react"; +import { AiOutlineEye, AiOutlineEyeInvisible } from "react-icons/ai"; import { BsArrowLeft } from "react-icons/bs"; import { RiArrowDownSLine } from "react-icons/ri"; @@ -14,6 +15,8 @@ export type MarketContextActionOutcomeSelectorProps = { market: FullMarketFragment; selected: MarketOutcomeAssetId; options?: MarketOutcomeAssetId[]; + disabled?: boolean; + hideValue?: boolean; onChange: (selected: MarketOutcomeAssetId) => void; }; @@ -23,6 +26,8 @@ const MarketContextActionOutcomeSelector = ({ market, selected, options, + disabled, + hideValue, onChange, }: MarketContextActionOutcomeSelectorProps) => { const [open, setOpen] = useState(false); @@ -78,26 +83,55 @@ const MarketContextActionOutcomeSelector = ({ } }, [open, inputRef]); + const [revealed, setRevealed] = useState(false); + return ( <> { onChange(value); setOpen(false); }} > - setOpen(!open)}> -
- - {(text) => <>{text}} - - -
-
+
+ setOpen(!open)}> +
+ + {(text) => ( + <> + {hideValue ? ( +
+ {revealed ? text : "∗∗∗∗∗∗"} +
+ ) : ( + text + )} + + )} +
+ {!disabled && } +
+
+ + {hideValue && ( + <> + {revealed ? ( + setRevealed(false)} /> + ) : ( + setRevealed(true)} + /> + )} + + )} +
+ > = ({ label, border = true, children }) => { return ( diff --git a/components/top-bar/Alerts.tsx b/components/top-bar/Alerts.tsx index 98afe019a..62235855e 100644 --- a/components/top-bar/Alerts.tsx +++ b/components/top-bar/Alerts.tsx @@ -1,6 +1,10 @@ -import { Menu, Transition, Portal } from "@headlessui/react"; -import Modal from "components/ui/Modal"; +import { Menu, Transition } from "@headlessui/react"; +import { useCaseMarketId } from "lib/hooks/queries/court/useCaseMarketId"; +import { useCourtCase } from "lib/hooks/queries/court/useCourtCase"; +import { useMarket } from "lib/hooks/queries/useMarket"; import { + CourtCaseReadyForReveal, + CourtCaseReadyForVote, ReadyToReportMarketAlertData, RedeemableMarketsAlertData, RelevantMarketDisputeAlertData, @@ -9,9 +13,11 @@ import { import { useWallet } from "lib/state/wallet"; import { useRouter } from "next/router"; import { Fragment, PropsWithChildren, useEffect, useState } from "react"; -import { AiOutlineFileAdd } from "react-icons/ai"; +import { Users } from "react-feather"; +import { AiOutlineEye, AiOutlineFileAdd } from "react-icons/ai"; import { BiMoneyWithdraw } from "react-icons/bi"; import { IoMdNotificationsOutline } from "react-icons/io"; +import { LuVote } from "react-icons/lu"; export const Alerts = () => { const wallet = useWallet(); @@ -98,13 +104,21 @@ export const Alerts = () => { > {alerts.map((alert) => ( -
+
{alert.type === "ready-to-report-market" ? ( ) : alert.type === "market-dispute" ? ( ) : alert.type === "redeemable-markets" ? ( + ) : alert.type === "court-case-ready-for-vote" ? ( + + ) : alert.type === "court-case-ready-for-reveal" ? ( + ) : ( // Including this prevents us from not exhausting the switch on alert type. // Should never be reached but caught by the type system. @@ -140,6 +154,88 @@ const AlertCard: React.FC void }> = ({
); +const CourtCaseReadyForVoteAlertItem = ({ + alert, +}: { + alert: CourtCaseReadyForVote; +}) => { + const router = useRouter(); + const { data: marketId } = useCaseMarketId(alert.caseId); + const { data: market } = useMarket({ marketId: marketId! }); + + useEffect(() => { + router.prefetch(`/court/${alert.caseId}`); + }, [alert]); + + return ( + { + router.push(`/court/${alert.caseId}`); + }} + > +
+
+ + Ready for vote +
+
+
+

{market?.question}

+

+ You have been drawn as juror for this market and can now vote. +

+
+
+ ); +}; + +const CourtCaseReadyForRevealAlertItem = ({ + alert, +}: { + alert: CourtCaseReadyForReveal; +}) => { + const router = useRouter(); + const { data: marketId } = useCaseMarketId(alert.caseId); + const { data: market } = useMarket({ marketId: marketId! }); + + useEffect(() => { + router.prefetch(`/court/${alert.caseId}`); + }, [alert]); + + return ( + { + router.push(`/court/${alert.caseId}`); + }} + > +
+
+ + Ready to reveal vote +
+
+
+

{market?.question}

+

+ You are required to reveal your vote for this court case. +

+
+
+ ); +}; + const ReadyToReportMarketAlertItem = ({ alert, }: { @@ -169,8 +265,8 @@ const ReadyToReportMarketAlertItem = ({ Submit Report
-
-

{alert.market.question}

+
+

{alert.market.question}

); @@ -206,8 +302,8 @@ const RedeemableMarketAlertItem = ({ Redeemable Tokens
-
-

+
+

You have {alert.markets.length} redeemable markets.

diff --git a/components/trade-form/Amm2TradeForm.tsx b/components/trade-form/Amm2TradeForm.tsx index 02a9478b1..64c834f1a 100644 --- a/components/trade-form/Amm2TradeForm.tsx +++ b/components/trade-form/Amm2TradeForm.tsx @@ -88,7 +88,7 @@ const Amm2TradeForm = ({ selectedIndex={tabType} > diff --git a/components/trade-form/BuyForm.tsx b/components/trade-form/BuyForm.tsx index cb802f071..82d1aa562 100644 --- a/components/trade-form/BuyForm.tsx +++ b/components/trade-form/BuyForm.tsx @@ -206,10 +206,10 @@ const BuyForm = ({ send(); }; return ( -
+
{amountOut.div(ZTG).toFixed(3)}
@@ -228,10 +228,10 @@ const BuyForm = ({
For
-
+
-
+
{constants?.tokenSymbol}
-
-
+
+
<>{formState.errors["amount"]?.message}
@@ -287,8 +287,8 @@ const BuyForm = ({ disableFeeCheck={true} >
-
Buy
-
+
Buy
+
Network fee:{" "} {formatNumberCompact(fee?.amount.div(ZTG).toNumber() ?? 0)}{" "} {fee?.symbol} diff --git a/components/trade-form/SellForm.tsx b/components/trade-form/SellForm.tsx index b156667a9..3242cad50 100644 --- a/components/trade-form/SellForm.tsx +++ b/components/trade-form/SellForm.tsx @@ -195,12 +195,12 @@ const SellForm = ({ send(); }; return ( -
+
-
+
{constants?.tokenSymbol}
-
-
+
+
<>{formState.errors["amount"]?.message}
@@ -269,8 +269,8 @@ const SellForm = ({ disableFeeCheck={true} >
-
Sell
-
+
Sell
+
Network fee:{" "} {formatNumberCompact(fee?.amount.div(ZTG).toNumber() ?? 0)}{" "} {fee?.symbol} diff --git a/components/ui/InfoPopover.tsx b/components/ui/InfoPopover.tsx index d754bfe59..c41a1ea6b 100644 --- a/components/ui/InfoPopover.tsx +++ b/components/ui/InfoPopover.tsx @@ -7,6 +7,8 @@ export type InfoPopoverProps = React.PropsWithChildren<{ title?: ReactNode; icon?: ReactNode; className?: string; + overlay?: boolean; + popoverCss?: string; position?: | "top" | "bottom" @@ -21,20 +23,22 @@ export const InfoPopover: React.FC = ({ icon, children, className, + overlay = true, position = "bottom", + popoverCss, }) => { let [isOpen, setIsOpen] = useState(false); const positionCss = useMemo(() => { switch (position) { case "top": - return "top-0 translate-y-[-100%] left-1/2 transform translate-x-[-50%]"; + return "-top-1 translate-y-[-100%] left-1/2 transform translate-x-[-50%]"; case "bottom": return "top-[100%] left-1/2 transform translate-x-[-50%]"; case "top-start": return "top-0 translate-y-[-100%] translate-x-[-100%] left-0"; case "top-end": - return "top-0 translate-y-[-100%] left-0"; + return "-top-1 translate-y-[-100%] left-0"; case "bottom-start": return "top-[100%] right-0"; case "bottom-end": @@ -61,7 +65,7 @@ export const InfoPopover: React.FC = ({ = ({ leaveTo="opacity-0 scale-1" >
{children} diff --git a/components/ui/TransactionButton.tsx b/components/ui/TransactionButton.tsx index 64341b3fc..92fd801a1 100644 --- a/components/ui/TransactionButton.tsx +++ b/components/ui/TransactionButton.tsx @@ -110,7 +110,7 @@ const TransactionButton: FC> = ({ className={`ztg-transition h-[56px] w-full rounded-full text-white focus:outline-none disabled:cursor-default disabled:bg-slate-300 ${ !isDisabled && "active:scale-95" - } ${className} ${colorClass}`} + } ${colorClass} ${className}`} onClick={(e) => click(e)} disabled={isDisabled} data-test={dataTest} diff --git a/jest.config.ts b/jest.config.ts deleted file mode 100644 index 1301e7247..000000000 --- a/jest.config.ts +++ /dev/null @@ -1,25 +0,0 @@ -import nextJest from "next/jest"; - -const createJestConfig = nextJest({ - // Provide the path to your Next.js app to load next.config.js and .env files in your test environment - dir: "./", -}); - -// Add any custom config to be passed to Jest -/** @type {import('jest').Config} */ -const customJestConfig = { - // Add more setup options before each test is run - // setupFilesAfterEnv: ['/jest.setup.js'], - // if using TypeScript with a baseUrl set to the root directory then you need the below for alias' to work - moduleNameMapper: { - "^(\\.{1,2}/.*)\\.js$": "$1", - }, - setupFiles: ["/jest.setup.js"], - moduleDirectories: ["node_modules", "/"], - testEnvironment: "jest-environment-jsdom", - modulePathIgnorePatterns: ["e2e/"], - extensionsToTreatAsEsm: [".ts", ".tsx"], -}; - -// createJestConfig is exported this way to ensure that next/jest can load the Next.js config which is async -export default createJestConfig(customJestConfig); diff --git a/jest.setup.js b/jest.setup.js deleted file mode 100644 index e959e4618..000000000 --- a/jest.setup.js +++ /dev/null @@ -1,12 +0,0 @@ -process.env.NEXT_PUBLIC_VERCEL_ENV = "production"; - -import { TextEncoder, TextDecoder } from "util"; - -Object.assign(global, { TextDecoder, TextEncoder }); - -window.HTMLElement.prototype.scroll = jest.fn().mockImplementation(() => {}); - -//@ts-ignore -window.ResizeObserver = function () { - return { observe: () => {}, disconnect: () => {} }; -}; diff --git a/lib/hooks/queries/court/useCaseMarketId.ts b/lib/hooks/queries/court/useCaseMarketId.ts index 989966df6..3d4691e1d 100644 --- a/lib/hooks/queries/court/useCaseMarketId.ts +++ b/lib/hooks/queries/court/useCaseMarketId.ts @@ -1,6 +1,9 @@ import { useQuery } from "@tanstack/react-query"; -import { isRpcSdk } from "@zeitgeistpm/sdk"; +import { create, windowScheduler } from "@yornaath/batshit"; +import { RpcContext, Sdk, isRpcSdk } from "@zeitgeistpm/sdk"; import { useSdkv2 } from "lib/hooks/useSdkv2"; +import { memoize } from "lodash-es"; +import { u128, Option } from "@polkadot/types"; export const caseMarketIdRootKey = "case-market-id"; @@ -12,9 +15,7 @@ export const useCaseMarketId = (caseId?: number) => { [id, caseMarketIdRootKey, caseId], async () => { if (!enabled) return; - const res = await sdk.api.query.court.courtIdToMarketId(caseId); - - return res.unwrapOr(null)?.toNumber(); + return batcher(sdk).fetch(caseId); }, { enabled: enabled, @@ -24,3 +25,24 @@ export const useCaseMarketId = (caseId?: number) => { return query; }; + +const batcher = memoize((sdk: Sdk) => { + return create({ + fetcher: async (caseIds: number[]) => { + const data = await sdk.api.query.court.courtIdToMarketId.multi(caseIds); + const index = caseIds.reduce>>( + (acc, caseId, index) => ({ + ...acc, + [caseId]: data[index], + }), + {}, + ); + + return index; + }, + scheduler: windowScheduler(10), + resolver: (data, query) => { + return data[query].unwrapOr(null)?.toNumber(); + }, + }); +}); diff --git a/lib/hooks/queries/court/useCourtCase.ts b/lib/hooks/queries/court/useCourtCase.ts new file mode 100644 index 000000000..fd1478fcd --- /dev/null +++ b/lib/hooks/queries/court/useCourtCase.ts @@ -0,0 +1,37 @@ +import { ZrmlCourtCourtInfo } from "@polkadot/types/lookup"; +import { useQuery } from "@tanstack/react-query"; +import { isRpcSdk } from "@zeitgeistpm/sdk"; +import { useSdkv2 } from "lib/hooks/useSdkv2"; +import { isNumber } from "lodash-es"; + +export const courtCaseRootKey = "court-case"; + +export type CourtCaseInfo = { + id: number; + case: ZrmlCourtCourtInfo; +}; + +export const useCourtCase = (caseId?: number) => { + const [sdk, id] = useSdkv2(); + + const enabled = !!sdk && isRpcSdk(sdk) && isNumber(caseId); + + const query = useQuery( + [id, courtCaseRootKey, caseId], + async () => { + if (!enabled) return; + + const res = await sdk.api.query.court.courts(caseId); + const courtCase = res.unwrapOr(null); + + if (!courtCase) return; + + return courtCase; + }, + { + enabled: Boolean(enabled), + }, + ); + + return query; +}; diff --git a/lib/hooks/queries/court/useCourtCases.ts b/lib/hooks/queries/court/useCourtCases.ts new file mode 100644 index 000000000..5ef5102d0 --- /dev/null +++ b/lib/hooks/queries/court/useCourtCases.ts @@ -0,0 +1,47 @@ +import { useQuery } from "@tanstack/react-query"; +import { isRpcSdk } from "@zeitgeistpm/sdk"; +import { isNotNull } from "@zeitgeistpm/utility/dist/null"; +import { useSdkv2 } from "lib/hooks/useSdkv2"; +import { ZrmlCourtCourtInfo } from "@polkadot/types/lookup"; + +export const courtCasesRootKey = "court-cases"; + +export type CourtCaseInfo = { + id: number; + case: ZrmlCourtCourtInfo; +}; + +export const useCourtCases = () => { + const [sdk, id] = useSdkv2(); + + const enabled = !!sdk && isRpcSdk(sdk); + + const query = useQuery( + [id, courtCasesRootKey], + async () => { + if (!enabled) return []; + + const res = await sdk.api.query.court.courts.entries(); + + const cases = res + .map(([id, rawCase]) => { + const courtCase = rawCase.unwrapOr(null); + + if (!courtCase) return null; + + return { + id: id.args[0].toNumber(), + case: courtCase, + }; + }) + .filter(isNotNull); + + return cases; + }, + { + enabled: enabled, + }, + ); + + return query; +}; diff --git a/lib/hooks/queries/court/useVoteDraws.ts b/lib/hooks/queries/court/useVoteDraws.ts new file mode 100644 index 000000000..c0c49fc3f --- /dev/null +++ b/lib/hooks/queries/court/useVoteDraws.ts @@ -0,0 +1,60 @@ +import { ZrmlCourtDraw } from "@polkadot/types/lookup"; +import { useQuery, useQueryClient } from "@tanstack/react-query"; +import { isRpcSdk } from "@zeitgeistpm/sdk"; +import { useSdkv2 } from "lib/hooks/useSdkv2"; +import { Vec, u128, StorageKey } from "@polkadot/types"; + +export const voteDrawsRootKey = "vote-draws"; + +export const useVoteDrawsForCase = (caseId?: number) => { + const [sdk, id] = useSdkv2(); + const queryClient = useQueryClient(); + + const enabled = !!sdk && isRpcSdk(sdk) && caseId; + + const query = useQuery( + [id, voteDrawsRootKey, caseId], + async () => { + if (!enabled) return []; + const draws = await sdk.api.query.court.selectedDraws(caseId); + return draws.toArray(); + }, + { + enabled: Boolean(enabled), + initialData: () => { + const cache = queryClient.getQueryData< + [StorageKey<[u128]>, Vec][] + >([id, voteDrawsRootKey, "all"]); + + const hit = cache + ?.find( + ([storageKey]) => storageKey.args[0].toNumber() === caseId, + )?.[1] + ?.toArray(); + + return hit; + }, + }, + ); + + return query; +}; + +export const useAllVoteDraws = () => { + const [sdk, id] = useSdkv2(); + + const enabled = !!sdk && isRpcSdk(sdk); + + const query = useQuery<[StorageKey<[u128]>, Vec][]>( + [id, voteDrawsRootKey, "all"], + async () => { + if (!enabled) return []; + return await sdk.api.query.court.selectedDraws.entries(); + }, + { + enabled: Boolean(enabled), + }, + ); + + return query; +}; diff --git a/lib/hooks/queries/useBalance.ts b/lib/hooks/queries/useBalance.ts index c579364f5..c133b1767 100644 --- a/lib/hooks/queries/useBalance.ts +++ b/lib/hooks/queries/useBalance.ts @@ -15,7 +15,7 @@ export const useBalance = ( const [sdk, id] = useSdkv2(); const query = useQuery( - [id, balanceRootKey, address, assetId, blockNumber], + [id, balanceRootKey, "free", address, assetId, blockNumber], async () => { if (address && assetId && isRpcSdk(sdk)) { const api = await getApiAtBlock(sdk.api, blockNumber); @@ -41,3 +41,34 @@ export const useBalance = ( return query; }; + +export const useLockedBalance = ( + address?: string, + assetId?: AssetId, + blockNumber?: number, +) => { + const [sdk, id] = useSdkv2(); + + const query = useQuery( + [id, balanceRootKey, "locked", address, assetId, blockNumber], + async () => { + if (address && assetId && isRpcSdk(sdk)) { + const api = await getApiAtBlock(sdk.api, blockNumber); + + if (IOZtgAssetId.is(assetId)) { + const { data } = await api.query.system.account(address); + return new Decimal(data.miscFrozen.toString()); + } else { + const balance = await api.query.tokens.accounts(address, assetId); + return new Decimal(balance.frozen.toString()); + } + } + }, + { + keepPreviousData: true, + enabled: Boolean(sdk && address && isRpcSdk(sdk) && assetId), + }, + ); + + return query; +}; diff --git a/lib/hooks/queries/useChainConstants.ts b/lib/hooks/queries/useChainConstants.ts index dd12c70e7..4924b6d77 100644 --- a/lib/hooks/queries/useChainConstants.ts +++ b/lib/hooks/queries/useChainConstants.ts @@ -33,6 +33,7 @@ export type ChainConstants = { maxAppeals: number; minJurorStake: number; inflationPeriodBlocks: number; + maxDelegations: number; }; }; @@ -89,6 +90,7 @@ export const useChainConstants = () => { maxAppeals: consts.court.maxAppeals.toNumber(), minJurorStake: consts.court.minJurorStake.toNumber() / ZTG, inflationPeriodBlocks: consts.court.inflationPeriod.toNumber(), + maxDelegations: consts.court.maxDelegations.toNumber(), }, }; diff --git a/lib/hooks/queries/useMarket.ts b/lib/hooks/queries/useMarket.ts index 9b787e127..c15d491f8 100644 --- a/lib/hooks/queries/useMarket.ts +++ b/lib/hooks/queries/useMarket.ts @@ -16,7 +16,7 @@ export const useMarket = ( ) => { const [sdk, id] = useSdkv2(); - const query = useQuery( + return useQuery( [id, marketsRootQuery, filter], async () => { if ( @@ -40,14 +40,12 @@ export const useMarket = ( ), }, ); - - return query; }; const batcher = memoize((sdk: Sdk) => { - return batshit.create({ + return batshit.create({ name: marketsRootQuery, - fetcher: async (ids) => { + fetcher: async (ids: UseMarketFilter[]) => { const { markets } = await sdk.indexer.markets({ where: { AND: [ diff --git a/lib/hooks/queries/useTotalIssuanceForPools.ts b/lib/hooks/queries/useTotalIssuanceForPools.ts index 36a3150b2..78e7d675d 100644 --- a/lib/hooks/queries/useTotalIssuanceForPools.ts +++ b/lib/hooks/queries/useTotalIssuanceForPools.ts @@ -41,11 +41,7 @@ export const useTotalIssuanceForPools = ( }; const batcher = memoize((sdk: Sdk) => { - return batshit.create< - PoolTotalIssuance, - number, - PoolTotalIssuance | undefined - >({ + return batshit.create({ name: poolTotalIssuanceRootQueryKey, fetcher: async (ids) => { const data = await sdk.api.query.tokens.totalIssuance.multi( diff --git a/lib/hooks/useExtrinsic.ts b/lib/hooks/useExtrinsic.ts index 40a82be07..9ae0c34ef 100644 --- a/lib/hooks/useExtrinsic.ts +++ b/lib/hooks/useExtrinsic.ts @@ -118,6 +118,7 @@ export const useExtrinsic = ( return { send, + isReady: !!extrinsic, isError, isSuccess, isLoading, diff --git a/lib/math.spec.ts b/lib/math.spec.ts index a73bdce7c..1f4f22a55 100644 --- a/lib/math.spec.ts +++ b/lib/math.spec.ts @@ -1,3 +1,4 @@ +import { describe, expect, test } from "vitest"; import { calcInGivenOut, calcOutGivenIn, calcSpotPrice } from "./math"; describe("math", () => { diff --git a/lib/state/alerts/types.ts b/lib/state/alerts/types.ts index 5b7e56f9f..adbca632d 100644 --- a/lib/state/alerts/types.ts +++ b/lib/state/alerts/types.ts @@ -26,6 +26,8 @@ export type AlertData = { account: string; dismissible?: true } & ( | ReadyToReportMarketAlertData | RelevantMarketDisputeAlertData | RedeemableMarketsAlertData + | CourtCaseReadyForVote + | CourtCaseReadyForReveal ); export type ReadyToReportMarketAlertData = { @@ -43,6 +45,16 @@ export type RedeemableMarketsAlertData = { markets: FullMarketFragment[]; }; +export type CourtCaseReadyForVote = { + type: "court-case-ready-for-vote"; + caseId: number; +}; + +export type CourtCaseReadyForReveal = { + type: "court-case-ready-for-reveal"; + caseId: number; +}; + /** * Attach an id to an alert. * @@ -66,5 +78,15 @@ export const withId = (alert: AlertData): Alert => { id: create(`${alert.account}-${alert.type}`), ...alert, }; + case "court-case-ready-for-vote": + return { + id: create(`${alert.account}-${alert.type}-${alert.caseId}`), + ...alert, + }; + case "court-case-ready-for-reveal": + return { + id: create(`${alert.account}-${alert.type}-${alert.caseId}`), + ...alert, + }; } }; diff --git a/lib/state/alerts/useAlerts.ts b/lib/state/alerts/useAlerts.ts index 12802f9fe..eb53afd3e 100644 --- a/lib/state/alerts/useAlerts.ts +++ b/lib/state/alerts/useAlerts.ts @@ -1,7 +1,10 @@ import { useAtom } from "jotai"; +import { useCourtCases } from "lib/hooks/queries/court/useCourtCases"; +import { useAllVoteDraws } from "lib/hooks/queries/court/useVoteDraws"; import { useMemo } from "react"; import { useReadyToReportMarkets } from "../../hooks/queries/useReadyToReportMarkets"; import { useRedeemableMarkets } from "../../hooks/queries/useRedeemableMarkets"; +import { useChainTime } from "../chaintime"; import { persistentAtom } from "../util/persistent-atom"; import { Alert, AlertId, withId } from "./types"; @@ -33,6 +36,10 @@ const readAlertsAtom = persistentAtom<{ read: AlertId[] }>({ export const useAlerts = (account?: string): UseAlerts => { const { data: marketsReadyToReport } = useReadyToReportMarkets(account); const { data: redeemableMarkets } = useRedeemableMarkets(account); + const { data: courtDraws } = useAllVoteDraws(); + const { data: cases } = useCourtCases(); + + const chainTime = useChainTime(); const [readAlerts, setRead] = useAtom(readAlertsAtom); @@ -50,9 +57,9 @@ export const useAlerts = (account?: string): UseAlerts => { if (redeemableMarkets && redeemableMarkets.length > 0) { add( withId({ + type: "redeemable-markets", account, markets: redeemableMarkets, - type: "redeemable-markets", }), ); } @@ -61,16 +68,78 @@ export const useAlerts = (account?: string): UseAlerts => { marketsReadyToReport.forEach((market) => { add( withId({ + type: "ready-to-report-market", account, market, - type: "ready-to-report-market", }), ); }); } + if (courtDraws && cases && chainTime) { + courtDraws.forEach(([caseIdStorageKey, draws]) => { + const caseId = caseIdStorageKey.args[0].toNumber(); + const courtCase = cases?.find((c) => c.id === caseId); + + if (!courtCase) return; + + const drawsForAccount = draws.filter( + (draw) => draw.courtParticipant.toString() === account, + ); + + const drawnAsJuror = drawsForAccount.filter( + (draw) => draw.vote.isDrawn, + ); + + const drawReadyToReveal = drawsForAccount.filter( + (draw) => draw.vote.isSecret, + ); + + const voteStart = courtCase.case.roundEnds.preVote.toNumber() + 1; + const voteEnd = courtCase.case.roundEnds.vote.toNumber(); + + const aggregationStart = voteEnd + 1; + const aggregationEnd = courtCase.case.roundEnds.aggregation.toNumber(); + + if (chainTime.block >= voteStart && chainTime.block <= voteEnd) { + drawnAsJuror.forEach((draw) => { + add( + withId({ + type: "court-case-ready-for-vote", + account, + caseId, + }), + ); + }); + } + + if ( + chainTime.block >= aggregationStart && + chainTime.block <= aggregationEnd + ) { + drawReadyToReveal.forEach((draw) => { + add( + withId({ + type: "court-case-ready-for-reveal", + account, + caseId, + }), + ); + }); + } + }); + } + return alerts; - }, [readAlerts, account, marketsReadyToReport, redeemableMarkets]); + }, [ + readAlerts, + account, + marketsReadyToReport, + redeemableMarkets, + courtDraws, + cases, + chainTime, + ]); const setAsRead = (alert: Alert & { dismissible: true }) => { if (!alert.dismissible) diff --git a/lib/state/confirm-modal/useConfirmation.ts b/lib/state/confirm-modal/useConfirmation.ts index 032beec28..34310e29f 100644 --- a/lib/state/confirm-modal/useConfirmation.ts +++ b/lib/state/confirm-modal/useConfirmation.ts @@ -5,11 +5,19 @@ export type ConfirmationPromptProps = { /** * The title of the confirmation prompt */ - title: string; + title: string | JSX.Element; /** * The description of the confirmation prompt */ - description: string; + description: string | JSX.Element; + /** + * The label of the confirm button + */ + confirmLabel?: string | JSX.Element; + /** + * The label of the cancel button + */ + cancelLabel?: string | JSX.Element; }; /** diff --git a/lib/state/court/CourtCaseJurorCompositeId.ts b/lib/state/court/CourtCaseJurorCompositeId.ts new file mode 100644 index 000000000..06c32d227 --- /dev/null +++ b/lib/state/court/CourtCaseJurorCompositeId.ts @@ -0,0 +1,15 @@ +import Opaque, { create } from "ts-opaque"; + +export type CourtCaseJurorCompositeId = Opaque< + string, + "CourtCaseJurorCompositeId" +>; + +export const courtCaseJurorCompositeId = (params: { + marketId: number; + caseId: number; + juror: string; +}) => + create( + `${params.marketId}-${params.caseId}-${params.juror}`, + ); diff --git a/lib/state/court/CourtSaltPhraseStorage.ts b/lib/state/court/CourtSaltPhraseStorage.ts new file mode 100644 index 000000000..5fb98ffa1 --- /dev/null +++ b/lib/state/court/CourtSaltPhraseStorage.ts @@ -0,0 +1,11 @@ +import * as z from "zod"; + +export type CourtSaltPhraseStorage = z.TypeOf; + +export const IOCourtSaltPhraseStorage = z.object({ + juror: z.string(), + caseId: z.number(), + marketId: z.number(), + phrase: z.string(), + createdAt: z.number(), +}); diff --git a/lib/state/court/get-stage.ts b/lib/state/court/get-stage.ts new file mode 100644 index 000000000..181d86d69 --- /dev/null +++ b/lib/state/court/get-stage.ts @@ -0,0 +1,91 @@ +import { ZrmlCourtCourtInfo } from "@polkadot/types/lookup"; +import { FullMarketFragment } from "@zeitgeistpm/indexer"; +import { Infinity, infinity } from "@zeitgeistpm/utility/dist/infinity"; +import { ChainTime, dateBlock } from "@zeitgeistpm/utility/dist/time"; + +/** + * TODO: move to SDK when finalized and working + */ + +export type CourtStage = + | { + type: "pre-vote" | "vote" | "aggregation" | "appeal"; + remainingBlocks: number; + totalTime: number; + } + | { + type: "closed" | "reassigned"; + remainingBlocks: Infinity; + totalTime: Infinity; + }; + +export const getCourtStage = ( + time: ChainTime, + market: FullMarketFragment, + courtCase: ZrmlCourtCourtInfo, +): CourtStage => { + const currentBlock = time.block; + + const voteStart = courtCase.roundEnds.preVote.toNumber() + 1; + const voteEnd = courtCase.roundEnds.vote.toNumber(); + + const aggregationStart = voteEnd + 1; + const aggregationEnd = courtCase.roundEnds.aggregation.toNumber(); + + const appealStart = aggregationEnd + 1; + const appealEnd = courtCase.roundEnds.appeal.toNumber(); + + if (courtCase.status.isClosed) { + return { + type: "closed", + remainingBlocks: infinity, + totalTime: infinity, + }; + } + + if (courtCase.status.isReassigned) { + return { + type: "reassigned", + remainingBlocks: infinity, + totalTime: infinity, + }; + } + + if (currentBlock < voteStart) { + const disputedAt = + market.disputes?.[0]?.at ?? + dateBlock(time, new Date(Number(market.period.end))); + + return { + type: "pre-vote", + remainingBlocks: voteStart - currentBlock, + totalTime: voteStart - disputedAt, + }; + } + + if (currentBlock >= voteStart && currentBlock <= voteEnd) { + return { + type: "vote", + remainingBlocks: voteEnd - currentBlock, + totalTime: voteEnd - voteStart, + }; + } + + if (currentBlock >= aggregationStart && currentBlock <= aggregationEnd) { + return { + type: "aggregation", + remainingBlocks: aggregationEnd - currentBlock, + totalTime: aggregationEnd - aggregationStart, + }; + } + + if (currentBlock >= appealStart && currentBlock <= appealEnd) { + return { + type: "appeal", + remainingBlocks: appealEnd - currentBlock, + totalTime: appealEnd - appealStart, + }; + } + + throw new Error("Invalid court stage. Should not be reachable."); +}; diff --git a/lib/state/court/useCourtCommitmentHash.ts b/lib/state/court/useCourtCommitmentHash.ts new file mode 100644 index 000000000..28b2d9891 --- /dev/null +++ b/lib/state/court/useCourtCommitmentHash.ts @@ -0,0 +1,39 @@ +import { CategoricalAssetId, isRpcSdk } from "@zeitgeistpm/sdk"; +import { useSdkv2 } from "lib/hooks/useSdkv2"; +import { createCourtCommitmentHash } from "lib/util/create-vote-commitment-hash"; +import { useMemo } from "react"; +import { useWallet } from "../wallet"; +import { CourtSaltPhraseStorage } from "./CourtSaltPhraseStorage"; +import { CourtSalt, useCourtSalt } from "./useCourtSalt"; + +export type UseCourtCommitmentHash = { + commitmentHash?: Uint8Array; +}; + +export type UseCourtCommitmentHashParams = { + salt: CourtSalt; + selectedOutcome?: CategoricalAssetId; +}; + +export const useCourtCommitmentHash = ({ + salt, + selectedOutcome, +}: UseCourtCommitmentHashParams): UseCourtCommitmentHash => { + const [sdk] = useSdkv2(); + const wallet = useWallet(); + + const commitmentHash = useMemo(() => { + if (isRpcSdk(sdk) && selectedOutcome && wallet.realAddress) { + return createCourtCommitmentHash( + sdk, + wallet.realAddress!, + selectedOutcome, + salt, + ); + } + }, [salt, selectedOutcome, wallet.realAddress]); + + return { + commitmentHash, + }; +}; diff --git a/lib/state/court/useCourtSalt.tsx b/lib/state/court/useCourtSalt.tsx new file mode 100644 index 000000000..dd337ea73 --- /dev/null +++ b/lib/state/court/useCourtSalt.tsx @@ -0,0 +1,156 @@ +import { useAtom } from "jotai"; +import { blake2AsU8a, mnemonicGenerate } from "@polkadot/util-crypto"; +import Opaque, { create } from "ts-opaque"; +import { persistentAtom } from "../util/persistent-atom"; +import { useWallet } from "../wallet"; +import { CourtSaltPhraseStorage } from "./CourtSaltPhraseStorage"; +import { useConfirmation } from "../confirm-modal/useConfirmation"; +import { downloadText } from "lib/util/download"; +import { shortenAddress } from "lib/util"; +import { + CourtCaseJurorCompositeId, + courtCaseJurorCompositeId, +} from "./CourtCaseJurorCompositeId"; + +export type UseCourtSaltParams = { + marketId: number; + caseId: number; +}; + +export type CourtSalt = Opaque; + +export type UseCourtSalt = { + salt: CourtSalt; + phraseStorage: CourtSaltPhraseStorage; + isBackedUp: boolean; + setPhraseSeed: (phraseSeed: CourtSaltPhraseStorage) => Promise; + downloadBackup: () => void; +}; + +const courtSaltPhrasesAtom = persistentAtom< + Record +>({ + key: "court-phrase-seeds", + defaultValue: {}, +}); + +const courtSaltBackupDownloadedAtom = persistentAtom< + Record +>({ + key: "court-phrase-backup-downloaded", + defaultValue: {}, +}); + +export const useCourtSalt = ({ + marketId, + caseId, +}: UseCourtSaltParams): UseCourtSalt => { + const wallet = useWallet(); + const { prompt } = useConfirmation(); + const [saltPhrases, setSaltPhrases] = useAtom(courtSaltPhrasesAtom); + const [backupDownloads, setBackupDownloads] = useAtom( + courtSaltBackupDownloadedAtom, + ); + + const id = courtCaseJurorCompositeId({ + marketId, + caseId, + juror: wallet.realAddress!, + }); + + let phraseStorage = saltPhrases[id]; + + if (!phraseStorage) { + phraseStorage = { + caseId, + marketId, + juror: wallet.realAddress!, + createdAt: Date.now(), + phrase: mnemonicGenerate(), + }; + + setSaltPhrases((state) => ({ + ...state, + [id]: phraseStorage, + })); + } + + const salt = create(blake2AsU8a(phraseStorage.phrase)); + + const setPhraseSeed = async (backup: CourtSaltPhraseStorage) => { + let error: Error | undefined; + let proceed = true; + + if (backup.juror !== wallet.realAddress) { + error = new Error( + "Juror stored in backup file does not match current juror. This might be a backup for a different juror account.", + ); + } + + if (backup.marketId !== marketId) { + error = new Error( + "Market id stored in backup file phrase does not match current market. This might be a backup for a different market.", + ); + } + + if (backup.caseId !== caseId) { + error = new Error( + "Case id stored in backup phrase does not match current case. This might be a backup for a different court case.", + ); + } + + if (error) { + proceed = await prompt({ + title: "Invalid Backup", + description: ( +
+
{error.message}
+
+ Are you sure you want to replace the current phrase? +
+
+ ), + confirmLabel: "Proceed and replace", + }); + } + + if (proceed) { + setSaltPhrases((state) => ({ + ...state, + [id]: { + ...backup, + caseId, + marketId, + juror: wallet.realAddress!, + }, + })); + + return true; + } + + return true; + }; + + const isBackedUp = backupDownloads[id]; + + const downloadBackup = () => { + downloadText( + `zeitgeist-court-case[${caseId}]-juror[${shortenAddress( + wallet.realAddress!, + )}].txt`, + JSON.stringify(phraseStorage, undefined, 2), + ); + setBackupDownloads((state) => ({ + ...state, + [id]: true, + })); + }; + + return { + salt, + phraseStorage, + isBackedUp, + setPhraseSeed, + downloadBackup, + }; +}; diff --git a/lib/state/court/useVoteOutcome.ts b/lib/state/court/useVoteOutcome.ts new file mode 100644 index 000000000..221e1ff6b --- /dev/null +++ b/lib/state/court/useVoteOutcome.ts @@ -0,0 +1,79 @@ +import { CategoricalAssetId } from "@zeitgeistpm/sdk"; +import { persistentAtom } from "../util/persistent-atom"; +import { + CourtCaseJurorCompositeId, + courtCaseJurorCompositeId, +} from "./CourtCaseJurorCompositeId"; +import { useWallet } from "../wallet"; +import { useAtom } from "jotai"; + +export type UseVourtVote = { + vote: CategoricalAssetId; + committed: boolean; + setVote: (assetId: CategoricalAssetId) => void; + commitVote: () => void; +}; + +export type UseCourtVoteProps = { + caseId: number; + marketId: number; + defaultValue: CategoricalAssetId; +}; + +const courtVotesAtom = persistentAtom< + Record< + CourtCaseJurorCompositeId, + { + assetId: CategoricalAssetId; + committed: boolean; + } + > +>({ + key: "court-vote", + defaultValue: {}, +}); + +export const useCourtVote = ({ + marketId, + caseId, + defaultValue, +}: UseCourtVoteProps): UseVourtVote => { + const wallet = useWallet(); + + const [courtVotes, setCourtVotes] = useAtom(courtVotesAtom); + + const id = courtCaseJurorCompositeId({ + marketId, + caseId, + juror: wallet.realAddress!, + }); + + const setVote = (assetId: CategoricalAssetId) => { + setCourtVotes((prev) => ({ + ...prev, + [id]: { + ...prev[id], + assetId, + }, + })); + }; + + const vote = courtVotes[id]; + + const commitVote = () => { + setCourtVotes((prev) => ({ + ...prev, + [id]: { + ...prev[id], + committed: true, + }, + })); + }; + + return { + vote: vote?.assetId ?? defaultValue, + committed: vote?.committed ?? false, + setVote, + commitVote, + }; +}; diff --git a/lib/state/market-creation/types/form.ts b/lib/state/market-creation/types/form.ts index a11ac6931..ad3858b67 100644 --- a/lib/state/market-creation/types/form.ts +++ b/lib/state/market-creation/types/form.ts @@ -176,10 +176,20 @@ export const marketFormDataToExtrinsicParams = ( }; } + let disputeMechanism: CreateMarketParams["disputeMechanism"] = + "Authorized"; + + if ( + process.env.NEXT_PUBLIC_SHOW_COURT === "true" && + (form.answers.type === "categorical" || form.answers.type === "yes/no") + ) { + disputeMechanism = "Court"; + } + const params: CreateMarketParams = { signer, proxy, - disputeMechanism: "Authorized", + disputeMechanism, oracle: form.oracle, period: { Timestamp: [Date.now(), new Date(form.endDate).getTime()], diff --git a/lib/state/wallet.ts b/lib/state/wallet.ts index 9e1287649..8800f4a52 100644 --- a/lib/state/wallet.ts +++ b/lib/state/wallet.ts @@ -2,6 +2,7 @@ import { encodeAddress } from "@polkadot/util-crypto"; import { KeyringPairOrExtSigner } from "@zeitgeistpm/rpc"; import { tryCatch } from "@zeitgeistpm/utility/dist/option"; import { atom, getDefaultStore, useAtom } from "jotai"; +import { u8aToHex, stringToHex } from "@polkadot/util"; import { isString } from "lodash-es"; import { useMemo } from "react"; import { persistentAtom } from "./util/persistent-atom"; @@ -77,6 +78,8 @@ export type UseWallet = WalletState & { * Sets up web3 auth wallet */ loadWeb3AuthWallet: () => void; + + signRaw: (data: string) => Promise; }; export type ProxyConfig = { @@ -473,6 +476,23 @@ export const useWallet = (): UseWallet => { const walletId = userConfig.walletId; + const signRaw = async (data: string) => { + if (walletState.wallet instanceof BaseDotsamaWallet) { + return walletState.wallet.signer + ?.signRaw?.({ + address: activeAccount?.address, + data: stringToHex(data), + type: "bytes", + }) + .then((data) => data.signature); + } + + if (walletState.wallet && "sign" in walletState.wallet) { + const u8 = walletState.wallet.sign(data, {}); + return u8aToHex(u8); + } + }; + return { ...walletState, ...userConfig, @@ -487,5 +507,6 @@ export const useWallet = (): UseWallet => { walletId, setProxyFor, getProxyFor, + signRaw, }; }; diff --git a/lib/util/amm2.spec.ts b/lib/util/amm2.spec.ts index 6f22322ff..7c3968743 100644 --- a/lib/util/amm2.spec.ts +++ b/lib/util/amm2.spec.ts @@ -1,3 +1,4 @@ +import { describe, expect, test } from "vitest"; import Decimal from "decimal.js"; import { calculateSpotPrice, diff --git a/lib/util/calc-free-balance.spec.ts b/lib/util/calc-free-balance.spec.ts index 504911d2e..0f17c84ff 100644 --- a/lib/util/calc-free-balance.spec.ts +++ b/lib/util/calc-free-balance.spec.ts @@ -1,3 +1,4 @@ +import { describe, expect, test } from "vitest"; import { calculateFreeBalance } from "./calc-free-balance"; describe("calculateFreeBalance", () => { diff --git a/lib/util/calc-scalar-winnings.spec.ts b/lib/util/calc-scalar-winnings.spec.ts index 85abea228..51392e59b 100644 --- a/lib/util/calc-scalar-winnings.spec.ts +++ b/lib/util/calc-scalar-winnings.spec.ts @@ -1,3 +1,4 @@ +import { describe, expect, test } from "vitest"; import { calcScalarResolvedPrices, calcScalarWinnings, diff --git a/lib/util/color-calc.spec.ts b/lib/util/color-calc.spec.ts index 2f272bf39..488cfce8a 100644 --- a/lib/util/color-calc.spec.ts +++ b/lib/util/color-calc.spec.ts @@ -1,3 +1,4 @@ +import { describe, expect, test } from "vitest"; import { calcMarketColors, hslToHex } from "./color-calc"; describe("color calculation", () => { diff --git a/lib/util/convert-decimals.spec.ts b/lib/util/convert-decimals.spec.ts index 8d206064d..0d36c8092 100644 --- a/lib/util/convert-decimals.spec.ts +++ b/lib/util/convert-decimals.spec.ts @@ -1,3 +1,4 @@ +import { describe, expect, test } from "vitest"; import Decimal from "decimal.js"; import { convertDecimals } from "./convert-decimals"; diff --git a/lib/util/create-vote-commitment-hash.spec.ts b/lib/util/create-vote-commitment-hash.spec.ts new file mode 100644 index 000000000..9a5e7c93c --- /dev/null +++ b/lib/util/create-vote-commitment-hash.spec.ts @@ -0,0 +1,39 @@ +import { describe, expect, test } from "vitest"; +import { MarketId, batterystationRpc, create } from "@zeitgeistpm/sdk"; +import { blake2AsU8a } from "@polkadot/util-crypto"; +import { u8aToHex } from "@polkadot/util"; +import { createCourtCommitmentHash } from "./create-vote-commitment-hash"; + +describe("createCourtCommitmentHash", () => { + test("should produce the correct commitment hash provided the", async () => { + const sdk = await create(batterystationRpc()); + const phrase = + "purity home goddess equal grant squirrel page cause domain hope throw wink"; + const salt = blake2AsU8a(phrase); + + const yesHash = createCourtCommitmentHash( + sdk, + "dDyXkkoewJvnksMEirA7k6K76STzJz78bxYtG1Y1V2LCHJyMA", + { + CategoricalOutcome: [754 as MarketId, 0], + }, + salt, + ); + + const noHash = createCourtCommitmentHash( + sdk, + "dDyXkkoewJvnksMEirA7k6K76STzJz78bxYtG1Y1V2LCHJyMA", + { + CategoricalOutcome: [754 as MarketId, 1], + }, + salt, + ); + + expect(u8aToHex(yesHash)).toEqual( + "0x77d99bba0142ab7ad7e148a9cdb246ca362c03eef834481678766f639d383061", + ); + expect(u8aToHex(noHash)).toEqual( + "0x407fe12e135068fa36728063a30a1ce8e19c2b18ad3b471eeea2f20686e01426", + ); + }); +}); diff --git a/lib/util/create-vote-commitment-hash.ts b/lib/util/create-vote-commitment-hash.ts new file mode 100644 index 000000000..a289a94c4 --- /dev/null +++ b/lib/util/create-vote-commitment-hash.ts @@ -0,0 +1,21 @@ +import { blake2AsU8a } from "@polkadot/util-crypto"; +import { u8aConcat } from "@polkadot/util/u8a"; +import { CategoricalAssetId, RpcContext, Sdk } from "@zeitgeistpm/sdk"; + +export const createCourtCommitmentHash = ( + sdk: Sdk, + address: string, + selectedOutcome: CategoricalAssetId, + salt: Uint8Array, +) => { + const accountId = sdk.api.createType("AccountId32", address); + const voteItem = sdk.api.createType("ZrmlCourtVoteItem", { + Outcome: sdk.api.createType("ZeitgeistPrimitivesOutcomeReport", { + Categorical: selectedOutcome.CategoricalOutcome[1], + }), + }); + + const hash = blake2AsU8a(u8aConcat(accountId, voteItem.toU8a(), salt), 256); + + return hash; +}; diff --git a/lib/util/download.ts b/lib/util/download.ts new file mode 100644 index 000000000..d53a085b3 --- /dev/null +++ b/lib/util/download.ts @@ -0,0 +1,15 @@ +export const downloadText = (filename: string, text: string) => { + var element = document.createElement("a"); + element.setAttribute( + "href", + "data:text/plain;charset=utf-8," + encodeURIComponent(text), + ); + element.setAttribute("download", filename); + + element.style.display = "none"; + document.body.appendChild(element); + + element.click(); + + document.body.removeChild(element); +}; diff --git a/lib/util/fetch-all-pages.spec.ts b/lib/util/fetch-all-pages.spec.ts index c38e75ec9..44115d108 100644 --- a/lib/util/fetch-all-pages.spec.ts +++ b/lib/util/fetch-all-pages.spec.ts @@ -1,3 +1,4 @@ +import { describe, expect, test } from "vitest"; import { fetchAllPages } from "./fetch-all-pages"; describe("fetchAllPages", () => { diff --git a/lib/util/market.spec.ts b/lib/util/market.spec.ts index 92e16c559..fc86a3e40 100644 --- a/lib/util/market.spec.ts +++ b/lib/util/market.spec.ts @@ -1,3 +1,4 @@ +import { describe, expect, test } from "vitest"; import { calculateMarketCost, get24HrPriceChange, PricePoint } from "./market"; describe("Market utils", () => { diff --git a/lib/util/poll.spec.ts b/lib/util/poll.spec.ts index 70c944553..fad8ced76 100644 --- a/lib/util/poll.spec.ts +++ b/lib/util/poll.spec.ts @@ -1,8 +1,9 @@ +import { describe, expect, test, vi } from "vitest"; import { poll, PollingTimeout } from "./poll"; describe("poll", () => { test("should only call input function once if it succeeds", async () => { - const testFn = jest.fn(async () => { + const testFn = vi.fn(async () => { return new Promise((resolve) => { resolve("foo"); }); @@ -18,7 +19,7 @@ describe("poll", () => { }); test("should call function at least twice and timeout", async () => { - const testFn = jest.fn(async () => { + const testFn = vi.fn(async () => { throw new Error("1) What"); }); diff --git a/lib/util/weight-math.spec.ts b/lib/util/weight-math.spec.ts index 73a453849..c1f483d49 100644 --- a/lib/util/weight-math.spec.ts +++ b/lib/util/weight-math.spec.ts @@ -1,3 +1,4 @@ +import { describe, expect, test } from "vitest"; import Decimal from "decimal.js"; import { calcPrices, calcWeightGivenSpotPrice, PriceLock } from "./weight-math"; diff --git a/package.json b/package.json index 844ee1f00..8b91b5843 100644 --- a/package.json +++ b/package.json @@ -13,8 +13,8 @@ "prettier:check": "npx prettier ./**/*.tsx --check", "prettier:fix": "npx prettier ./**/*.tsx --write", "start": "next start", - "test:watch": "jest --watch", - "test": "jest", + "test:watch": "vitest", + "test": "vitest run", "prunable": "ts-prune | grep -v 'used in module' | grep -v '^pages.*\\- [default|getStaticPaths|getStaticProps]' | grep -v 'playwright.config.ts'" }, "dependencies": { @@ -37,7 +37,7 @@ "@vercel/og": "^0.5.19", "@walletconnect/sign-client": "^2.10.2", "@web3auth/modal": "^7.0.4", - "@yornaath/batshit": "^0.7.1", + "@yornaath/batshit": "^0.8.0", "@yornaath/batshit-devtools-react": "^0.5.4", "@zeitgeistpm/augment-api": "2.23.1", "@zeitgeistpm/avatara-nft-sdk": "^1.3.1", @@ -82,7 +82,6 @@ "react-resize-detector": "^7.0.0", "react-select": "^5.7.0", "react-spinners": "^0.10.6", - "react-syntax-highlighter": "^15.5.0", "react-table": "^7.7.0", "recharts": "^2.4.3", "rxjs": "7.5.6", @@ -100,10 +99,8 @@ "@playwright/test": "^1.28.1", "@polkadot/wasm-crypto": "^6.3.1", "@tailwindcss/line-clamp": "^0.4.2", - "@testing-library/jest-dom": "^5.16.5", "@testing-library/react": "^14.0.0", "@types/flexsearch": "^0.7.2", - "@types/jest": "^29.5.0", "@types/lodash-es": "^4.17.6", "@types/lodash.merge": "^4.6.6", "@types/object-hash": "^2.2.1", @@ -113,8 +110,6 @@ "autoprefixer": "10.2.5", "commander": "^8.3.0", "cross-env": "^7.0.3", - "jest": "^29.5.0", - "jest-environment-jsdom": "^29.5.0", "moment": "^2.29.1", "next-transpile-modules": "^9.1.0", "postcss": "8.2.13", @@ -125,7 +120,8 @@ "tailwindcss": "^3.1.8", "ts-node": "^10.9.1", "ts-prune": "^0.10.3", - "typescript": "^5.0.4" + "typescript": "^5.0.4", + "vitest": "^0.34.6" }, "packageManager": "yarn@3.2.2" } diff --git a/pages/court/[caseid].tsx b/pages/court/[caseid].tsx index 8f26d3a94..7128c9c3d 100644 --- a/pages/court/[caseid].tsx +++ b/pages/court/[caseid].tsx @@ -1,85 +1,455 @@ -import { ScalarRangeType, ZTG, isRpcSdk } from "@zeitgeistpm/sdk"; -import MarketAssetDetails from "components/markets/MarketAssetDetails"; -import ScalarPriceRange from "components/markets/ScalarPriceRange"; -import TransactionButton from "components/ui/TransactionButton"; -import Decimal from "decimal.js"; +import { ZrmlCourtDraw } from "@polkadot/types/lookup"; +import { FullMarketFragment } from "@zeitgeistpm/indexer"; +import { + IOBaseAssetId, + IOForeignAssetId, + ZeitgeistIpfs, + create, + parseAssetId, +} from "@zeitgeistpm/sdk"; +import CourtStageTimer from "components/court/CourtStageTimer"; +import { CourtVoteForm } from "components/court/CourtVoteForm"; +import { CourtVoteRevealForm } from "components/court/CourtVoteRevealForm"; +import { SelectedDrawsTable } from "components/court/SelectedDrawsTable"; +import { AddressDetails } from "components/markets/MarketAddresses"; +import { HeaderStat } from "components/markets/MarketHeader"; +import { lookupAssetImagePath } from "lib/constants/foreign-asset"; import { useCaseMarketId } from "lib/hooks/queries/court/useCaseMarketId"; +import { useCourtCase } from "lib/hooks/queries/court/useCourtCase"; +import { useVoteDrawsForCase } from "lib/hooks/queries/court/useVoteDraws"; +import { useAssetMetadata } from "lib/hooks/queries/useAssetMetadata"; import { useMarket } from "lib/hooks/queries/useMarket"; -import { useExtrinsic } from "lib/hooks/useExtrinsic"; -import { useSdkv2 } from "lib/hooks/useSdkv2"; -import { useNotifications } from "lib/state/notifications"; +import { useChainTime } from "lib/state/chaintime"; +import { getCourtStage } from "lib/state/court/get-stage"; import { useWallet } from "lib/state/wallet"; import { isMarketCategoricalOutcome } from "lib/types"; +import dynamic from "next/dynamic"; +import Image from "next/image"; +import Link from "next/link"; import { useRouter } from "next/router"; import { NextPage } from "next/types"; import NotFoundPage from "pages/404"; +import { IGetPlaiceholderReturn, getPlaiceholder } from "plaiceholder"; +import { useMemo } from "react"; +import { AiOutlineEye } from "react-icons/ai"; +import { LuVote } from "react-icons/lu"; +import { PiBooks } from "react-icons/pi"; +import { + DAY_SECONDS, + endpointOptions, + environment, + graphQlEndpoint, + ZTG, +} from "lib/constants"; +import { CourtAppealForm } from "components/court/CourtAppealForm"; -const CasePage: NextPage = () => { +const QuillViewer = dynamic(() => import("../../components/ui/QuillViewer"), { + ssr: false, +}); + +export async function getStaticProps({ + params, +}: { + params: { caseid: string }; +}) { + const sdk = await create({ + provider: endpointOptions.map((e) => e.value), + indexer: graphQlEndpoint, + storage: ZeitgeistIpfs(), + }); + + const [docsArticleImagePlaceholder] = await Promise.all([ + getPlaiceholder(`/court_gnomes.png`), + ]); + + const marketId = await sdk.api.query.court.courtIdToMarketId(params.caseid); + const markets = marketId.isSome + ? await sdk.indexer.markets({ + where: { + marketId_eq: marketId.unwrap().toNumber(), + }, + }) + : undefined; + + const market = markets?.markets[0]; + + return { + props: { + docsArticleImagePlaceholder, + initialMarket: market, + }, + }; +} + +export async function getStaticPaths() { + const sdk = await create({ + provider: endpointOptions.map((e) => e.value), + indexer: graphQlEndpoint, + storage: ZeitgeistIpfs(), + }); + + const cases = await sdk.api.query.court.courts.keys(); + + const paths = cases.map((caseId) => ({ + params: { caseid: caseId.args[0].toString() }, + })); + + return { paths, fallback: "blocking" }; +} + +const CasePage: NextPage = ({ + initialMarket, + docsArticleImagePlaceholder, +}: { + initialMarket: FullMarketFragment; + docsArticleImagePlaceholder: IGetPlaiceholderReturn; +}) => { if (process.env.NEXT_PUBLIC_SHOW_COURT !== "true") { return ; } + const router = useRouter(); + + const wallet = useWallet(); + const time = useChainTime(); + const { caseid } = router.query; const caseId = Number(caseid); + + const { data: courtCase } = useCourtCase(caseId); + const { data: selectedDraws } = useVoteDrawsForCase(caseId); + const { data: marketId } = useCaseMarketId(caseId); - const { data: market } = useMarket( + let { data: dynamicMarket } = useMarket( marketId != null ? { marketId } : undefined, ); - const [sdk] = useSdkv2(); - const notificationStore = useNotifications(); - const wallet = useWallet(); + + const market = dynamicMarket ?? initialMarket; + + const baseAsset = parseAssetId(market?.baseAsset).unwrapOr(undefined); + const { data: metadata } = useAssetMetadata(baseAsset); + const token = metadata?.symbol; const reportedOutcome = market?.report?.outcome != null && isMarketCategoricalOutcome(market.report?.outcome) ? market.report?.outcome.categorical - : market?.report?.outcome?.scalar?.toString(); + : undefined; - const { - isLoading: isAppealLoading, - send: appeal, - fee, - } = useExtrinsic( - () => { - if (!isRpcSdk(sdk)) return; + const imagePath = IOForeignAssetId.is(baseAsset) + ? lookupAssetImagePath(baseAsset.ForeignAsset) + : IOBaseAssetId.is(baseAsset) + ? lookupAssetImagePath(baseAsset.Ztg) + : ""; - return sdk.api.tx.court.appeal(caseId); - }, - { - onSuccess: () => { - notificationStore.pushNotification("Successfully appeal case result", { - type: "Success", - }); - }, - }, + const connectedParticipantDraw = selectedDraws?.find( + (draw) => draw.courtParticipant.toString() === wallet.realAddress, ); + + const isDrawnJuror = connectedParticipantDraw?.vote.isDrawn; + const hasSecretVote = connectedParticipantDraw?.vote.isSecret; + const hasRevealedVote = connectedParticipantDraw?.vote.isRevealed; + + const stage = useMemo(() => { + if (time && market && courtCase) { + return getCourtStage(time, market, courtCase); + } + }, [time, market, courtCase]); + return ( -
-
Case - {caseid}
-
{market && market.question}
-
Original Report:{reportedOutcome}
-
Timings?
-
Jurors Table?
- - Appeal - - {market?.marketType?.scalar !== null && - market?.scalarType && - market.marketType.scalar?.[0] != null && - market.marketType.scalar[1] != null && ( - +
+
+
+

Case — #{caseId}

+

{market?.question}

+ +
+ + {new Intl.DateTimeFormat("default", { + dateStyle: "medium", + }).format(market.period.start)} + + + {new Intl.DateTimeFormat("default", { + dateStyle: "medium", + }).format(market.period.end)} + + + {reportedOutcome !== undefined + ? market.categories?.[reportedOutcome].name + : "-"} + +
+ + + View Market + + +
+ + +
+ +
+
+ Currency: + {token} +
+
+
+ +
+ +
+
+ Verified Market +
+
+
+
+ +
+ +
+ + {market.description && ( +
+ +
+ )} + + {stage?.type !== "reassigned" && ( +
+

Votes

+ +
+ )} +
+ + {stage?.type !== "reassigned" && ( +
+

Jurors

+ +
)} - {marketId != null && } +
+ +
+
+ {stage?.type === "vote" && ( + <> + {isDrawnJuror && ( + <> + + + )} + + {hasSecretVote && ( +
+
+
+ +
+

You have voted

+

+ Your vote is secret during voting, but when court goes + into aggregation you can reveal your vote to the public by + coming back to this page. +

+
+
+ )} + + )} + + {stage?.type === "aggregation" && ( + <> + {hasSecretVote && ( + + )} + + {hasRevealedVote && ( +
+
+
+ +
+

Your vote is revealed

+

+ { + market?.categories?.[ + connectedParticipantDraw?.vote.asRevealed.voteItem.asOutcome.asCategorical.toNumber() + ].ticker + } +

+

+ Your vote has been revealed to the other jurors and the + public and has been taken into account. +

+
+
+ )} + + )} + + {stage?.type === "appeal" && } + +
+
+ +
+
+
+

+ Decentralized Court +

+
+

+ Zeitgeist implements a decentralized court to handle disputes + that may arise in the resolution of prediction market outcomes. +

+
+ + + Learn More + +
+
+
+
+
+
+ ); +}; + +const CaseSkeleton = () => {}; + +const Votes = ({ + market, + selectedDraws, + isRevealed, +}: { + market: FullMarketFragment; + selectedDraws: ZrmlCourtDraw[] | undefined; + isRevealed: boolean; +}) => { + const votes = market.categories + ?.map((category, index) => { + const count = + selectedDraws?.filter( + (draw) => + draw.vote.isRevealed && + draw.vote.asRevealed.voteItem.isOutcome && + draw.vote.asRevealed.voteItem.asOutcome.asCategorical.toNumber() === + index, + )?.length ?? 0; + + return { category, count }; + }) + .sort((a, b) => b.count - a.count); + + const showLeaderIndicator = votes?.some((vote) => vote.count > 0); + + return ( +
*:first-child]:bg-green-200" + }`} + > + {votes?.map(({ category, count }, index) => { + const leader = votes?.[0]; + const isTied = index > 0 && count === leader.count; + + return ( +
+ {showLeaderIndicator && isRevealed && index === 0 && ( +
+ {isTied ? "Tied" : "Leading"} +
+ )} +
+
Outcome
+
Votes
+
+ +
+
+
+ {category.name} +
+
+
+ {isRevealed ? ( + count + ) : ( + secret + )} +
+
+
+ ); + })}
); }; diff --git a/pages/court/index.tsx b/pages/court/index.tsx index e6958fa05..ee2995bf9 100644 --- a/pages/court/index.tsx +++ b/pages/court/index.tsx @@ -1,20 +1,43 @@ import { useQueryClient } from "@tanstack/react-query"; import { ZTG, isRpcSdk } from "@zeitgeistpm/sdk"; -import JoinCourtButton from "components/court/JoinCourt"; +import ManageDelegationButton from "components/court/ManageDelegationButton"; +import JoinCourtAsJurorButton from "components/court/JoinCourtAsJurorButton"; import JurorsTable from "components/court/JurorsTable"; import PrepareExitCourtButton from "components/court/PrepareExitCourt"; +import InfoPopover from "components/ui/InfoPopover"; import { environment } from "lib/constants"; import { useConnectedCourtParticipant } from "lib/hooks/queries/court/useConnectedCourtParticipant"; import { participantsRootKey } from "lib/hooks/queries/court/useParticipants"; import { useChainConstants } from "lib/hooks/queries/useChainConstants"; +import { useZtgPrice } from "lib/hooks/queries/useZtgPrice"; import { useExtrinsic } from "lib/hooks/useExtrinsic"; import { useSdkv2 } from "lib/hooks/useSdkv2"; import { useNotifications } from "lib/state/notifications"; import { useWallet } from "lib/state/wallet"; +import { formatNumberLocalized } from "lib/util"; import { NextPage } from "next"; import NotFoundPage from "pages/404"; +import { CourtCasesTable } from "components/court/CourtCasesTable"; +import Image from "next/image"; +import { IGetPlaiceholderReturn, getPlaiceholder } from "plaiceholder"; -const CourtPage: NextPage = () => { +export async function getStaticProps() { + const [bannerPlaiceholder] = await Promise.all([ + getPlaiceholder(`/court_banner.png`), + ]); + + return { + props: { + bannerPlaiceholder, + }, + }; +} + +const CourtPage: NextPage = ({ + bannerPlaiceholder, +}: { + bannerPlaiceholder: IGetPlaiceholderReturn; +}) => { if (process.env.NEXT_PUBLIC_SHOW_COURT !== "true") { return ; } @@ -25,7 +48,8 @@ const CourtPage: NextPage = () => { const wallet = useWallet(); const queryClient = useQueryClient(); - const participant = useConnectedCourtParticipant(); + const connectedParticipant = useConnectedCourtParticipant(); + const { data: ztgPrice } = useZtgPrice(); const { isLoading: isLeaveLoading, send: leaveCourt } = useExtrinsic( () => { @@ -44,31 +68,93 @@ const CourtPage: NextPage = () => { return (
-
Court
-
- - {!participant?.prepareExit && } - {participant?.prepareExit && ( - - )} -
-
- My Stake: - - {participant?.stake.div(ZTG).toString()} {constants?.tokenSymbol} - -
-
- Delegations: - {participant?.delegations?.map((address) => {address})} +
+
+ +
+
+
+ Court +
+

+ Anyone can participate by joining the court system as a juror or + delegator. As a juror, you are responsible for supplying the + truthful outcome of a prediction market by voting and revealing the + raw vote information. As a delegator, you can delegate your voting + rights to active jurors. +

+ +
+
+

My Stake

+ {connectedParticipant && ( +
+
+ {connectedParticipant?.type} + + {connectedParticipant?.type === "Juror" + ? "You are participating as a juror. All stake is delegated to your personal juror stake." + : "You are participating as a delegator. The probability of one delegator being selected is equally distributed among all delegations."} + +
+
+ )} +
+ +
+
+
+ {formatNumberLocalized( + connectedParticipant?.stake.div(ZTG).toNumber() ?? 0, + )}{" "} + {constants?.tokenSymbol} +
+
+ $ + {ztgPrice && + formatNumberLocalized( + ztgPrice + .mul( + connectedParticipant?.stake.div(ZTG).toNumber() ?? 0, + ) + .toNumber(), + )} +
+
+
+ +
+
+ + + + {!connectedParticipant?.prepareExit && ( + + )} +
+
+
+
- + +
+

Court Cases

+ +
); }; diff --git a/public/court_banner.png b/public/court_banner.png new file mode 100644 index 000000000..a34943e18 Binary files /dev/null and b/public/court_banner.png differ diff --git a/public/court_gnomes.png b/public/court_gnomes.png new file mode 100644 index 000000000..becb75997 Binary files /dev/null and b/public/court_gnomes.png differ diff --git a/public/crypto_wizard.png b/public/crypto_wizard.png new file mode 100644 index 000000000..2e8fbe68c Binary files /dev/null and b/public/crypto_wizard.png differ diff --git a/vitest.config.ts b/vitest.config.ts new file mode 100644 index 000000000..d99fe695e --- /dev/null +++ b/vitest.config.ts @@ -0,0 +1,8 @@ +import { defineConfig, defaultExclude } from "vitest/config"; + +export default defineConfig({ + test: { + include: ["**/*.{test,spec}.?(c|m)[jt]s?(x)"], + exclude: [...defaultExclude, "e2e/**"], + }, +}); diff --git a/yarn.lock b/yarn.lock index ed13eb576..ff082a73d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5,13 +5,6 @@ __metadata: version: 6 cacheKey: 8 -"@adobe/css-tools@npm:^4.0.1": - version: 4.3.1 - resolution: "@adobe/css-tools@npm:4.3.1" - checksum: ad43456379ff391132aff687ece190cb23ea69395e23c9b96690eeabe2468da89a4aaf266e4f8b6eaab53db3d1064107ce0f63c3a974e864f4a04affc768da3f - languageName: node - linkType: hard - "@alloc/quick-lru@npm:^5.2.0": version: 5.2.0 resolution: "@alloc/quick-lru@npm:5.2.0" @@ -19,16 +12,6 @@ __metadata: languageName: node linkType: hard -"@ampproject/remapping@npm:^2.2.0": - version: 2.2.1 - resolution: "@ampproject/remapping@npm:2.2.1" - dependencies: - "@jridgewell/gen-mapping": ^0.3.0 - "@jridgewell/trace-mapping": ^0.3.9 - checksum: 03c04fd526acc64a1f4df22651186f3e5ef0a9d6d6530ce4482ec9841269cf7a11dbb8af79237c282d721c5312024ff17529cd72cc4768c11e999b58e2302079 - languageName: node - linkType: hard - "@apollo/client@npm:^3.5.10": version: 3.8.6 resolution: "@apollo/client@npm:3.8.6" @@ -72,7 +55,7 @@ __metadata: languageName: node linkType: hard -"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.22.13": +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.22.13": version: 7.22.13 resolution: "@babel/code-frame@npm:7.22.13" dependencies: @@ -89,30 +72,7 @@ __metadata: languageName: node linkType: hard -"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3": - version: 7.23.2 - resolution: "@babel/core@npm:7.23.2" - dependencies: - "@ampproject/remapping": ^2.2.0 - "@babel/code-frame": ^7.22.13 - "@babel/generator": ^7.23.0 - "@babel/helper-compilation-targets": ^7.22.15 - "@babel/helper-module-transforms": ^7.23.0 - "@babel/helpers": ^7.23.2 - "@babel/parser": ^7.23.0 - "@babel/template": ^7.22.15 - "@babel/traverse": ^7.23.2 - "@babel/types": ^7.23.0 - convert-source-map: ^2.0.0 - debug: ^4.1.0 - gensync: ^1.0.0-beta.2 - json5: ^2.2.3 - semver: ^6.3.1 - checksum: 003897718ded16f3b75632d63cd49486bf67ff206cc7ebd1a10d49e2456f8d45740910d5ec7e42e3faf0deec7a2e96b1a02e766d19a67a8309053f0d4e57c0fe - languageName: node - linkType: hard - -"@babel/generator@npm:^7.23.0, @babel/generator@npm:^7.7.2": +"@babel/generator@npm:^7.23.0": version: 7.23.0 resolution: "@babel/generator@npm:7.23.0" dependencies: @@ -133,7 +93,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-compilation-targets@npm:^7.19.3, @babel/helper-compilation-targets@npm:^7.22.15": +"@babel/helper-compilation-targets@npm:^7.19.3": version: 7.22.15 resolution: "@babel/helper-compilation-targets@npm:7.22.15" dependencies: @@ -172,7 +132,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-module-imports@npm:^7.0.0, @babel/helper-module-imports@npm:^7.16.7, @babel/helper-module-imports@npm:^7.22.15, @babel/helper-module-imports@npm:^7.22.5": +"@babel/helper-module-imports@npm:^7.0.0, @babel/helper-module-imports@npm:^7.16.7, @babel/helper-module-imports@npm:^7.22.5": version: 7.22.15 resolution: "@babel/helper-module-imports@npm:7.22.15" dependencies: @@ -181,37 +141,13 @@ __metadata: languageName: node linkType: hard -"@babel/helper-module-transforms@npm:^7.23.0": - version: 7.23.0 - resolution: "@babel/helper-module-transforms@npm:7.23.0" - dependencies: - "@babel/helper-environment-visitor": ^7.22.20 - "@babel/helper-module-imports": ^7.22.15 - "@babel/helper-simple-access": ^7.22.5 - "@babel/helper-split-export-declaration": ^7.22.6 - "@babel/helper-validator-identifier": ^7.22.20 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 6e2afffb058cf3f8ce92f5116f710dda4341c81cfcd872f9a0197ea594f7ce0ab3cb940b0590af2fe99e60d2e5448bfba6bca8156ed70a2ed4be2adc8586c891 - languageName: node - linkType: hard - -"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.8.0": +"@babel/helper-plugin-utils@npm:^7.22.5": version: 7.22.5 resolution: "@babel/helper-plugin-utils@npm:7.22.5" checksum: c0fc7227076b6041acd2f0e818145d2e8c41968cc52fb5ca70eed48e21b8fe6dd88a0a91cbddf4951e33647336eb5ae184747ca706817ca3bef5e9e905151ff5 languageName: node linkType: hard -"@babel/helper-simple-access@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/helper-simple-access@npm:7.22.5" - dependencies: - "@babel/types": ^7.22.5 - checksum: fe9686714caf7d70aedb46c3cce090f8b915b206e09225f1e4dbc416786c2fdbbee40b38b23c268b7ccef749dd2db35f255338fb4f2444429874d900dede5ad2 - languageName: node - linkType: hard - "@babel/helper-split-export-declaration@npm:^7.22.6": version: 7.22.6 resolution: "@babel/helper-split-export-declaration@npm:7.22.6" @@ -242,17 +178,6 @@ __metadata: languageName: node linkType: hard -"@babel/helpers@npm:^7.23.2": - version: 7.23.2 - resolution: "@babel/helpers@npm:7.23.2" - dependencies: - "@babel/template": ^7.22.15 - "@babel/traverse": ^7.23.2 - "@babel/types": ^7.23.0 - checksum: aaf4828df75ec460eaa70e5c9f66e6dadc28dae3728ddb7f6c13187dbf38030e142194b83d81aa8a31bbc35a5529a5d7d3f3cf59d5d0b595f5dd7f9d8f1ced8e - languageName: node - linkType: hard - "@babel/highlight@npm:^7.22.13": version: 7.22.20 resolution: "@babel/highlight@npm:7.22.20" @@ -264,7 +189,7 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.22.15, @babel/parser@npm:^7.23.0": +"@babel/parser@npm:^7.22.15, @babel/parser@npm:^7.23.0": version: 7.23.0 resolution: "@babel/parser@npm:7.23.0" bin: @@ -273,62 +198,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-async-generators@npm:^7.8.4": - version: 7.8.4 - resolution: "@babel/plugin-syntax-async-generators@npm:7.8.4" - dependencies: - "@babel/helper-plugin-utils": ^7.8.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 7ed1c1d9b9e5b64ef028ea5e755c0be2d4e5e4e3d6cf7df757b9a8c4cfa4193d268176d0f1f7fbecdda6fe722885c7fda681f480f3741d8a2d26854736f05367 - languageName: node - linkType: hard - -"@babel/plugin-syntax-bigint@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-bigint@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": ^7.8.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 3a10849d83e47aec50f367a9e56a6b22d662ddce643334b087f9828f4c3dd73bdc5909aaeabe123fed78515767f9ca43498a0e621c438d1cd2802d7fae3c9648 - languageName: node - linkType: hard - -"@babel/plugin-syntax-class-properties@npm:^7.8.3": - version: 7.12.13 - resolution: "@babel/plugin-syntax-class-properties@npm:7.12.13" - dependencies: - "@babel/helper-plugin-utils": ^7.12.13 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 24f34b196d6342f28d4bad303612d7ff566ab0a013ce89e775d98d6f832969462e7235f3e7eaf17678a533d4be0ba45d3ae34ab4e5a9dcbda5d98d49e5efa2fc - languageName: node - linkType: hard - -"@babel/plugin-syntax-import-meta@npm:^7.8.3": - version: 7.10.4 - resolution: "@babel/plugin-syntax-import-meta@npm:7.10.4" - dependencies: - "@babel/helper-plugin-utils": ^7.10.4 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 166ac1125d10b9c0c430e4156249a13858c0366d38844883d75d27389621ebe651115cb2ceb6dc011534d5055719fa1727b59f39e1ab3ca97820eef3dcab5b9b - languageName: node - linkType: hard - -"@babel/plugin-syntax-json-strings@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-json-strings@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": ^7.8.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: bf5aea1f3188c9a507e16efe030efb996853ca3cadd6512c51db7233cc58f3ac89ff8c6bdfb01d30843b161cfe7d321e1bf28da82f7ab8d7e6bc5464666f354a - languageName: node - linkType: hard - -"@babel/plugin-syntax-jsx@npm:^7.22.5, @babel/plugin-syntax-jsx@npm:^7.7.2": +"@babel/plugin-syntax-jsx@npm:^7.22.5": version: 7.22.5 resolution: "@babel/plugin-syntax-jsx@npm:7.22.5" dependencies: @@ -339,95 +209,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-logical-assignment-operators@npm:^7.8.3": - version: 7.10.4 - resolution: "@babel/plugin-syntax-logical-assignment-operators@npm:7.10.4" - dependencies: - "@babel/helper-plugin-utils": ^7.10.4 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: aff33577037e34e515911255cdbb1fd39efee33658aa00b8a5fd3a4b903585112d037cce1cc9e4632f0487dc554486106b79ccd5ea63a2e00df4363f6d4ff886 - languageName: node - linkType: hard - -"@babel/plugin-syntax-nullish-coalescing-operator@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-nullish-coalescing-operator@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": ^7.8.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 87aca4918916020d1fedba54c0e232de408df2644a425d153be368313fdde40d96088feed6c4e5ab72aac89be5d07fef2ddf329a15109c5eb65df006bf2580d1 - languageName: node - linkType: hard - -"@babel/plugin-syntax-numeric-separator@npm:^7.8.3": - version: 7.10.4 - resolution: "@babel/plugin-syntax-numeric-separator@npm:7.10.4" - dependencies: - "@babel/helper-plugin-utils": ^7.10.4 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 01ec5547bd0497f76cc903ff4d6b02abc8c05f301c88d2622b6d834e33a5651aa7c7a3d80d8d57656a4588f7276eba357f6b7e006482f5b564b7a6488de493a1 - languageName: node - linkType: hard - -"@babel/plugin-syntax-object-rest-spread@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-object-rest-spread@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": ^7.8.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: fddcf581a57f77e80eb6b981b10658421bc321ba5f0a5b754118c6a92a5448f12a0c336f77b8abf734841e102e5126d69110a306eadb03ca3e1547cab31f5cbf - languageName: node - linkType: hard - -"@babel/plugin-syntax-optional-catch-binding@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-optional-catch-binding@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": ^7.8.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 910d90e72bc90ea1ce698e89c1027fed8845212d5ab588e35ef91f13b93143845f94e2539d831dc8d8ededc14ec02f04f7bd6a8179edd43a326c784e7ed7f0b9 - languageName: node - linkType: hard - -"@babel/plugin-syntax-optional-chaining@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-optional-chaining@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": ^7.8.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: eef94d53a1453361553c1f98b68d17782861a04a392840341bc91780838dd4e695209c783631cf0de14c635758beafb6a3a65399846ffa4386bff90639347f30 - languageName: node - linkType: hard - -"@babel/plugin-syntax-top-level-await@npm:^7.8.3": - version: 7.14.5 - resolution: "@babel/plugin-syntax-top-level-await@npm:7.14.5" - dependencies: - "@babel/helper-plugin-utils": ^7.14.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: bbd1a56b095be7820029b209677b194db9b1d26691fe999856462e66b25b281f031f3dfd91b1619e9dcf95bebe336211833b854d0fb8780d618e35667c2d0d7e - languageName: node - linkType: hard - -"@babel/plugin-syntax-typescript@npm:^7.7.2": - version: 7.22.5 - resolution: "@babel/plugin-syntax-typescript@npm:7.22.5" - dependencies: - "@babel/helper-plugin-utils": ^7.22.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 8ab7718fbb026d64da93681a57797d60326097fd7cb930380c8bffd9eb101689e90142c760a14b51e8e69c88a73ba3da956cb4520a3b0c65743aee5c71ef360a - languageName: node - linkType: hard - -"@babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.12.0, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.17.2, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.20.13, @babel/runtime@npm:^7.20.6, @babel/runtime@npm:^7.21.0, @babel/runtime@npm:^7.22.10, @babel/runtime@npm:^7.22.5, @babel/runtime@npm:^7.23.2, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.7.2, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2": +"@babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.12.0, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.17.2, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.20.13, @babel/runtime@npm:^7.20.6, @babel/runtime@npm:^7.21.0, @babel/runtime@npm:^7.22.10, @babel/runtime@npm:^7.22.5, @babel/runtime@npm:^7.23.2, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.7.2, @babel/runtime@npm:^7.8.7": version: 7.23.2 resolution: "@babel/runtime@npm:7.23.2" dependencies: @@ -436,7 +218,7 @@ __metadata: languageName: node linkType: hard -"@babel/template@npm:^7.22.15, @babel/template@npm:^7.3.3": +"@babel/template@npm:^7.22.15": version: 7.22.15 resolution: "@babel/template@npm:7.22.15" dependencies: @@ -447,7 +229,7 @@ __metadata: languageName: node linkType: hard -"@babel/traverse@npm:^7.23.2, @babel/traverse@npm:^7.4.5": +"@babel/traverse@npm:^7.4.5": version: 7.23.2 resolution: "@babel/traverse@npm:7.23.2" dependencies: @@ -465,7 +247,7 @@ __metadata: languageName: node linkType: hard -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.22.15, @babel/types@npm:^7.22.5, @babel/types@npm:^7.23.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.8.3": +"@babel/types@npm:^7.22.15, @babel/types@npm:^7.22.5, @babel/types@npm:^7.23.0, @babel/types@npm:^7.8.3": version: 7.23.0 resolution: "@babel/types@npm:7.23.0" dependencies: @@ -476,13 +258,6 @@ __metadata: languageName: node linkType: hard -"@bcoe/v8-coverage@npm:^0.2.3": - version: 0.2.3 - resolution: "@bcoe/v8-coverage@npm:0.2.3" - checksum: 850f9305536d0f2bd13e9e0881cb5f02e4f93fad1189f7b2d4bebf694e3206924eadee1068130d43c11b750efcc9405f88a8e42ef098b6d75239c0f047de1a27 - languageName: node - linkType: hard - "@chainsafe/is-ip@npm:^2.0.1": version: 2.0.2 resolution: "@chainsafe/is-ip@npm:2.0.2" @@ -811,6 +586,160 @@ __metadata: languageName: node linkType: hard +"@esbuild/android-arm64@npm:0.19.5": + version: 0.19.5 + resolution: "@esbuild/android-arm64@npm:0.19.5" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/android-arm@npm:0.19.5": + version: 0.19.5 + resolution: "@esbuild/android-arm@npm:0.19.5" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@esbuild/android-x64@npm:0.19.5": + version: 0.19.5 + resolution: "@esbuild/android-x64@npm:0.19.5" + conditions: os=android & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/darwin-arm64@npm:0.19.5": + version: 0.19.5 + resolution: "@esbuild/darwin-arm64@npm:0.19.5" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/darwin-x64@npm:0.19.5": + version: 0.19.5 + resolution: "@esbuild/darwin-x64@npm:0.19.5" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/freebsd-arm64@npm:0.19.5": + version: 0.19.5 + resolution: "@esbuild/freebsd-arm64@npm:0.19.5" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/freebsd-x64@npm:0.19.5": + version: 0.19.5 + resolution: "@esbuild/freebsd-x64@npm:0.19.5" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/linux-arm64@npm:0.19.5": + version: 0.19.5 + resolution: "@esbuild/linux-arm64@npm:0.19.5" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/linux-arm@npm:0.19.5": + version: 0.19.5 + resolution: "@esbuild/linux-arm@npm:0.19.5" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@esbuild/linux-ia32@npm:0.19.5": + version: 0.19.5 + resolution: "@esbuild/linux-ia32@npm:0.19.5" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/linux-loong64@npm:0.19.5": + version: 0.19.5 + resolution: "@esbuild/linux-loong64@npm:0.19.5" + conditions: os=linux & cpu=loong64 + languageName: node + linkType: hard + +"@esbuild/linux-mips64el@npm:0.19.5": + version: 0.19.5 + resolution: "@esbuild/linux-mips64el@npm:0.19.5" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + +"@esbuild/linux-ppc64@npm:0.19.5": + version: 0.19.5 + resolution: "@esbuild/linux-ppc64@npm:0.19.5" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/linux-riscv64@npm:0.19.5": + version: 0.19.5 + resolution: "@esbuild/linux-riscv64@npm:0.19.5" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + +"@esbuild/linux-s390x@npm:0.19.5": + version: 0.19.5 + resolution: "@esbuild/linux-s390x@npm:0.19.5" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + +"@esbuild/linux-x64@npm:0.19.5": + version: 0.19.5 + resolution: "@esbuild/linux-x64@npm:0.19.5" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/netbsd-x64@npm:0.19.5": + version: 0.19.5 + resolution: "@esbuild/netbsd-x64@npm:0.19.5" + conditions: os=netbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/openbsd-x64@npm:0.19.5": + version: 0.19.5 + resolution: "@esbuild/openbsd-x64@npm:0.19.5" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/sunos-x64@npm:0.19.5": + version: 0.19.5 + resolution: "@esbuild/sunos-x64@npm:0.19.5" + conditions: os=sunos & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/win32-arm64@npm:0.19.5": + version: 0.19.5 + resolution: "@esbuild/win32-arm64@npm:0.19.5" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/win32-ia32@npm:0.19.5": + version: 0.19.5 + resolution: "@esbuild/win32-ia32@npm:0.19.5" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/win32-x64@npm:0.19.5": + version: 0.19.5 + resolution: "@esbuild/win32-x64@npm:0.19.5" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@ethereumjs/common@npm:^3.2.0": version: 3.2.0 resolution: "@ethereumjs/common@npm:3.2.0" @@ -1035,308 +964,67 @@ __metadata: languageName: node linkType: hard -"@istanbuljs/load-nyc-config@npm:^1.0.0": - version: 1.1.0 - resolution: "@istanbuljs/load-nyc-config@npm:1.1.0" +"@jest/schemas@npm:^29.6.3": + version: 29.6.3 + resolution: "@jest/schemas@npm:29.6.3" dependencies: - camelcase: ^5.3.1 - find-up: ^4.1.0 - get-package-type: ^0.1.0 - js-yaml: ^3.13.1 - resolve-from: ^5.0.0 - checksum: d578da5e2e804d5c93228450a1380e1a3c691de4953acc162f387b717258512a3e07b83510a936d9fab03eac90817473917e24f5d16297af3867f59328d58568 + "@sinclair/typebox": ^0.27.8 + checksum: 910040425f0fc93cd13e68c750b7885590b8839066dfa0cd78e7def07bbb708ad869381f725945d66f2284de5663bbecf63e8fdd856e2ae6e261ba30b1687e93 languageName: node linkType: hard -"@istanbuljs/schema@npm:^0.1.2": - version: 0.1.3 - resolution: "@istanbuljs/schema@npm:0.1.3" - checksum: 5282759d961d61350f33d9118d16bcaed914ebf8061a52f4fa474b2cb08720c9c81d165e13b82f2e5a8a212cc5af482f0c6fc1ac27b9e067e5394c9a6ed186c9 +"@jkroso/type@npm:1": + version: 1.1.1 + resolution: "@jkroso/type@npm:1.1.1" + checksum: c2bb3cf56d8225e8e74ccb5e1dcc44132ab89056389f18ac05866c540873a4b330034e78cc3f95628f80ed576e58d4a6dea7dbcd09447992187ee3f0883a8509 languageName: node linkType: hard -"@jest/console@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/console@npm:29.7.0" +"@jridgewell/gen-mapping@npm:^0.3.2": + version: 0.3.3 + resolution: "@jridgewell/gen-mapping@npm:0.3.3" dependencies: - "@jest/types": ^29.6.3 - "@types/node": "*" - chalk: ^4.0.0 - jest-message-util: ^29.7.0 - jest-util: ^29.7.0 - slash: ^3.0.0 - checksum: 0e3624e32c5a8e7361e889db70b170876401b7d70f509a2538c31d5cd50deb0c1ae4b92dc63fe18a0902e0a48c590c21d53787a0df41a52b34fa7cab96c384d6 + "@jridgewell/set-array": ^1.0.1 + "@jridgewell/sourcemap-codec": ^1.4.10 + "@jridgewell/trace-mapping": ^0.3.9 + checksum: 4a74944bd31f22354fc01c3da32e83c19e519e3bbadafa114f6da4522ea77dd0c2842607e923a591d60a76699d819a2fbb6f3552e277efdb9b58b081390b60ab languageName: node linkType: hard -"@jest/core@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/core@npm:29.7.0" - dependencies: - "@jest/console": ^29.7.0 - "@jest/reporters": ^29.7.0 - "@jest/test-result": ^29.7.0 - "@jest/transform": ^29.7.0 - "@jest/types": ^29.6.3 - "@types/node": "*" - ansi-escapes: ^4.2.1 - chalk: ^4.0.0 - ci-info: ^3.2.0 - exit: ^0.1.2 - graceful-fs: ^4.2.9 - jest-changed-files: ^29.7.0 - jest-config: ^29.7.0 - jest-haste-map: ^29.7.0 - jest-message-util: ^29.7.0 - jest-regex-util: ^29.6.3 - jest-resolve: ^29.7.0 - jest-resolve-dependencies: ^29.7.0 - jest-runner: ^29.7.0 - jest-runtime: ^29.7.0 - jest-snapshot: ^29.7.0 - jest-util: ^29.7.0 - jest-validate: ^29.7.0 - jest-watcher: ^29.7.0 - micromatch: ^4.0.4 - pretty-format: ^29.7.0 - slash: ^3.0.0 - strip-ansi: ^6.0.0 - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - checksum: af759c9781cfc914553320446ce4e47775ae42779e73621c438feb1e4231a5d4862f84b1d8565926f2d1aab29b3ec3dcfdc84db28608bdf5f29867124ebcfc0d +"@jridgewell/resolve-uri@npm:^3.0.3, @jridgewell/resolve-uri@npm:^3.1.0": + version: 3.1.1 + resolution: "@jridgewell/resolve-uri@npm:3.1.1" + checksum: f5b441fe7900eab4f9155b3b93f9800a916257f4e8563afbcd3b5a5337b55e52bd8ae6735453b1b745457d9f6cdb16d74cd6220bbdd98cf153239e13f6cbb653 languageName: node linkType: hard -"@jest/environment@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/environment@npm:29.7.0" - dependencies: - "@jest/fake-timers": ^29.7.0 - "@jest/types": ^29.6.3 - "@types/node": "*" - jest-mock: ^29.7.0 - checksum: 6fb398143b2543d4b9b8d1c6dbce83fa5247f84f550330604be744e24c2bd2178bb893657d62d1b97cf2f24baf85c450223f8237cccb71192c36a38ea2272934 +"@jridgewell/set-array@npm:^1.0.1": + version: 1.1.2 + resolution: "@jridgewell/set-array@npm:1.1.2" + checksum: 69a84d5980385f396ff60a175f7177af0b8da4ddb81824cb7016a9ef914eee9806c72b6b65942003c63f7983d4f39a5c6c27185bbca88eb4690b62075602e28e languageName: node linkType: hard -"@jest/expect-utils@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/expect-utils@npm:29.7.0" - dependencies: - jest-get-type: ^29.6.3 - checksum: 75eb177f3d00b6331bcaa057e07c0ccb0733a1d0a1943e1d8db346779039cb7f103789f16e502f888a3096fb58c2300c38d1f3748b36a7fa762eb6f6d1b160ed +"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14, @jridgewell/sourcemap-codec@npm:^1.4.15": + version: 1.4.15 + resolution: "@jridgewell/sourcemap-codec@npm:1.4.15" + checksum: b881c7e503db3fc7f3c1f35a1dd2655a188cc51a3612d76efc8a6eb74728bef5606e6758ee77423e564092b4a518aba569bbb21c9bac5ab7a35b0c6ae7e344c8 languageName: node linkType: hard -"@jest/expect@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/expect@npm:29.7.0" +"@jridgewell/trace-mapping@npm:0.3.9": + version: 0.3.9 + resolution: "@jridgewell/trace-mapping@npm:0.3.9" dependencies: - expect: ^29.7.0 - jest-snapshot: ^29.7.0 - checksum: a01cb85fd9401bab3370618f4b9013b90c93536562222d920e702a0b575d239d74cecfe98010aaec7ad464f67cf534a353d92d181646a4b792acaa7e912ae55e + "@jridgewell/resolve-uri": ^3.0.3 + "@jridgewell/sourcemap-codec": ^1.4.10 + checksum: d89597752fd88d3f3480845691a05a44bd21faac18e2185b6f436c3b0fd0c5a859fbbd9aaa92050c4052caf325ad3e10e2e1d1b64327517471b7d51babc0ddef languageName: node linkType: hard -"@jest/fake-timers@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/fake-timers@npm:29.7.0" - dependencies: - "@jest/types": ^29.6.3 - "@sinonjs/fake-timers": ^10.0.2 - "@types/node": "*" - jest-message-util: ^29.7.0 - jest-mock: ^29.7.0 - jest-util: ^29.7.0 - checksum: caf2bbd11f71c9241b458d1b5a66cbe95debc5a15d96442444b5d5c7ba774f523c76627c6931cca5e10e76f0d08761f6f1f01a608898f4751a0eee54fc3d8d00 - languageName: node - linkType: hard - -"@jest/globals@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/globals@npm:29.7.0" - dependencies: - "@jest/environment": ^29.7.0 - "@jest/expect": ^29.7.0 - "@jest/types": ^29.6.3 - jest-mock: ^29.7.0 - checksum: 97dbb9459135693ad3a422e65ca1c250f03d82b2a77f6207e7fa0edd2c9d2015fbe4346f3dc9ebff1678b9d8da74754d4d440b7837497f8927059c0642a22123 - languageName: node - linkType: hard - -"@jest/reporters@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/reporters@npm:29.7.0" - dependencies: - "@bcoe/v8-coverage": ^0.2.3 - "@jest/console": ^29.7.0 - "@jest/test-result": ^29.7.0 - "@jest/transform": ^29.7.0 - "@jest/types": ^29.6.3 - "@jridgewell/trace-mapping": ^0.3.18 - "@types/node": "*" - chalk: ^4.0.0 - collect-v8-coverage: ^1.0.0 - exit: ^0.1.2 - glob: ^7.1.3 - graceful-fs: ^4.2.9 - istanbul-lib-coverage: ^3.0.0 - istanbul-lib-instrument: ^6.0.0 - istanbul-lib-report: ^3.0.0 - istanbul-lib-source-maps: ^4.0.0 - istanbul-reports: ^3.1.3 - jest-message-util: ^29.7.0 - jest-util: ^29.7.0 - jest-worker: ^29.7.0 - slash: ^3.0.0 - string-length: ^4.0.1 - strip-ansi: ^6.0.0 - v8-to-istanbul: ^9.0.1 - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - checksum: 7eadabd62cc344f629024b8a268ecc8367dba756152b761bdcb7b7e570a3864fc51b2a9810cd310d85e0a0173ef002ba4528d5ea0329fbf66ee2a3ada9c40455 - languageName: node - linkType: hard - -"@jest/schemas@npm:^29.6.3": - version: 29.6.3 - resolution: "@jest/schemas@npm:29.6.3" - dependencies: - "@sinclair/typebox": ^0.27.8 - checksum: 910040425f0fc93cd13e68c750b7885590b8839066dfa0cd78e7def07bbb708ad869381f725945d66f2284de5663bbecf63e8fdd856e2ae6e261ba30b1687e93 - languageName: node - linkType: hard - -"@jest/source-map@npm:^29.6.3": - version: 29.6.3 - resolution: "@jest/source-map@npm:29.6.3" - dependencies: - "@jridgewell/trace-mapping": ^0.3.18 - callsites: ^3.0.0 - graceful-fs: ^4.2.9 - checksum: bcc5a8697d471396c0003b0bfa09722c3cd879ad697eb9c431e6164e2ea7008238a01a07193dfe3cbb48b1d258eb7251f6efcea36f64e1ebc464ea3c03ae2deb - languageName: node - linkType: hard - -"@jest/test-result@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/test-result@npm:29.7.0" - dependencies: - "@jest/console": ^29.7.0 - "@jest/types": ^29.6.3 - "@types/istanbul-lib-coverage": ^2.0.0 - collect-v8-coverage: ^1.0.0 - checksum: 67b6317d526e335212e5da0e768e3b8ab8a53df110361b80761353ad23b6aea4432b7c5665bdeb87658ea373b90fb1afe02ed3611ef6c858c7fba377505057fa - languageName: node - linkType: hard - -"@jest/test-sequencer@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/test-sequencer@npm:29.7.0" - dependencies: - "@jest/test-result": ^29.7.0 - graceful-fs: ^4.2.9 - jest-haste-map: ^29.7.0 - slash: ^3.0.0 - checksum: 73f43599017946be85c0b6357993b038f875b796e2f0950487a82f4ebcb115fa12131932dd9904026b4ad8be131fe6e28bd8d0aa93b1563705185f9804bff8bd - languageName: node - linkType: hard - -"@jest/transform@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/transform@npm:29.7.0" - dependencies: - "@babel/core": ^7.11.6 - "@jest/types": ^29.6.3 - "@jridgewell/trace-mapping": ^0.3.18 - babel-plugin-istanbul: ^6.1.1 - chalk: ^4.0.0 - convert-source-map: ^2.0.0 - fast-json-stable-stringify: ^2.1.0 - graceful-fs: ^4.2.9 - jest-haste-map: ^29.7.0 - jest-regex-util: ^29.6.3 - jest-util: ^29.7.0 - micromatch: ^4.0.4 - pirates: ^4.0.4 - slash: ^3.0.0 - write-file-atomic: ^4.0.2 - checksum: 0f8ac9f413903b3cb6d240102db848f2a354f63971ab885833799a9964999dd51c388162106a807f810071f864302cdd8e3f0c241c29ce02d85a36f18f3f40ab - languageName: node - linkType: hard - -"@jest/types@npm:^29.6.3": - version: 29.6.3 - resolution: "@jest/types@npm:29.6.3" - dependencies: - "@jest/schemas": ^29.6.3 - "@types/istanbul-lib-coverage": ^2.0.0 - "@types/istanbul-reports": ^3.0.0 - "@types/node": "*" - "@types/yargs": ^17.0.8 - chalk: ^4.0.0 - checksum: a0bcf15dbb0eca6bdd8ce61a3fb055349d40268622a7670a3b2eb3c3dbafe9eb26af59938366d520b86907b9505b0f9b29b85cec11579a9e580694b87cd90fcc - languageName: node - linkType: hard - -"@jkroso/type@npm:1": - version: 1.1.1 - resolution: "@jkroso/type@npm:1.1.1" - checksum: c2bb3cf56d8225e8e74ccb5e1dcc44132ab89056389f18ac05866c540873a4b330034e78cc3f95628f80ed576e58d4a6dea7dbcd09447992187ee3f0883a8509 - languageName: node - linkType: hard - -"@jridgewell/gen-mapping@npm:^0.3.0, @jridgewell/gen-mapping@npm:^0.3.2": - version: 0.3.3 - resolution: "@jridgewell/gen-mapping@npm:0.3.3" - dependencies: - "@jridgewell/set-array": ^1.0.1 - "@jridgewell/sourcemap-codec": ^1.4.10 - "@jridgewell/trace-mapping": ^0.3.9 - checksum: 4a74944bd31f22354fc01c3da32e83c19e519e3bbadafa114f6da4522ea77dd0c2842607e923a591d60a76699d819a2fbb6f3552e277efdb9b58b081390b60ab - languageName: node - linkType: hard - -"@jridgewell/resolve-uri@npm:^3.0.3, @jridgewell/resolve-uri@npm:^3.1.0": - version: 3.1.1 - resolution: "@jridgewell/resolve-uri@npm:3.1.1" - checksum: f5b441fe7900eab4f9155b3b93f9800a916257f4e8563afbcd3b5a5337b55e52bd8ae6735453b1b745457d9f6cdb16d74cd6220bbdd98cf153239e13f6cbb653 - languageName: node - linkType: hard - -"@jridgewell/set-array@npm:^1.0.1": - version: 1.1.2 - resolution: "@jridgewell/set-array@npm:1.1.2" - checksum: 69a84d5980385f396ff60a175f7177af0b8da4ddb81824cb7016a9ef914eee9806c72b6b65942003c63f7983d4f39a5c6c27185bbca88eb4690b62075602e28e - languageName: node - linkType: hard - -"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14": - version: 1.4.15 - resolution: "@jridgewell/sourcemap-codec@npm:1.4.15" - checksum: b881c7e503db3fc7f3c1f35a1dd2655a188cc51a3612d76efc8a6eb74728bef5606e6758ee77423e564092b4a518aba569bbb21c9bac5ab7a35b0c6ae7e344c8 - languageName: node - linkType: hard - -"@jridgewell/trace-mapping@npm:0.3.9": - version: 0.3.9 - resolution: "@jridgewell/trace-mapping@npm:0.3.9" - dependencies: - "@jridgewell/resolve-uri": ^3.0.3 - "@jridgewell/sourcemap-codec": ^1.4.10 - checksum: d89597752fd88d3f3480845691a05a44bd21faac18e2185b6f436c3b0fd0c5a859fbbd9aaa92050c4052caf325ad3e10e2e1d1b64327517471b7d51babc0ddef - languageName: node - linkType: hard - -"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.17, @jridgewell/trace-mapping@npm:^0.3.18, @jridgewell/trace-mapping@npm:^0.3.9": - version: 0.3.20 - resolution: "@jridgewell/trace-mapping@npm:0.3.20" +"@jridgewell/trace-mapping@npm:^0.3.17, @jridgewell/trace-mapping@npm:^0.3.9": + version: 0.3.20 + resolution: "@jridgewell/trace-mapping@npm:0.3.20" dependencies: "@jridgewell/resolve-uri": ^3.1.0 "@jridgewell/sourcemap-codec": ^1.4.14 @@ -2623,6 +2311,90 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-android-arm-eabi@npm:4.3.0": + version: 4.3.0 + resolution: "@rollup/rollup-android-arm-eabi@npm:4.3.0" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@rollup/rollup-android-arm64@npm:4.3.0": + version: 4.3.0 + resolution: "@rollup/rollup-android-arm64@npm:4.3.0" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-darwin-arm64@npm:4.3.0": + version: 4.3.0 + resolution: "@rollup/rollup-darwin-arm64@npm:4.3.0" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-darwin-x64@npm:4.3.0": + version: 4.3.0 + resolution: "@rollup/rollup-darwin-x64@npm:4.3.0" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm-gnueabihf@npm:4.3.0": + version: 4.3.0 + resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.3.0" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm64-gnu@npm:4.3.0": + version: 4.3.0 + resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.3.0" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm64-musl@npm:4.3.0": + version: 4.3.0 + resolution: "@rollup/rollup-linux-arm64-musl@npm:4.3.0" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-x64-gnu@npm:4.3.0": + version: 4.3.0 + resolution: "@rollup/rollup-linux-x64-gnu@npm:4.3.0" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-x64-musl@npm:4.3.0": + version: 4.3.0 + resolution: "@rollup/rollup-linux-x64-musl@npm:4.3.0" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-win32-arm64-msvc@npm:4.3.0": + version: 4.3.0 + resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.3.0" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-win32-ia32-msvc@npm:4.3.0": + version: 4.3.0 + resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.3.0" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@rollup/rollup-win32-x64-msvc@npm:4.3.0": + version: 4.3.0 + resolution: "@rollup/rollup-win32-x64-msvc@npm:4.3.0" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@scure/base@npm:1.1.1": version: 1.1.1 resolution: "@scure/base@npm:1.1.1" @@ -2700,24 +2472,6 @@ __metadata: languageName: node linkType: hard -"@sinonjs/commons@npm:^3.0.0": - version: 3.0.0 - resolution: "@sinonjs/commons@npm:3.0.0" - dependencies: - type-detect: 4.0.8 - checksum: b4b5b73d4df4560fb8c0c7b38c7ad4aeabedd362f3373859d804c988c725889cde33550e4bcc7cd316a30f5152a2d1d43db71b6d0c38f5feef71fd8d016763f8 - languageName: node - linkType: hard - -"@sinonjs/fake-timers@npm:^10.0.2": - version: 10.3.0 - resolution: "@sinonjs/fake-timers@npm:10.3.0" - dependencies: - "@sinonjs/commons": ^3.0.0 - checksum: 614d30cb4d5201550c940945d44c9e0b6d64a888ff2cd5b357f95ad6721070d6b8839cd10e15b76bf5e14af0bcc1d8f9ec00d49a46318f1f669a4bec1d7f3148 - languageName: node - linkType: hard - "@socket.io/component-emitter@npm:~3.1.0": version: 3.1.0 resolution: "@socket.io/component-emitter@npm:3.1.0" @@ -3082,23 +2836,6 @@ __metadata: languageName: node linkType: hard -"@testing-library/jest-dom@npm:^5.16.5": - version: 5.17.0 - resolution: "@testing-library/jest-dom@npm:5.17.0" - dependencies: - "@adobe/css-tools": ^4.0.1 - "@babel/runtime": ^7.9.2 - "@types/testing-library__jest-dom": ^5.9.1 - aria-query: ^5.0.0 - chalk: ^3.0.0 - css.escape: ^1.5.1 - dom-accessibility-api: ^0.5.6 - lodash: ^4.17.15 - redent: ^3.0.0 - checksum: 9f28dbca8b50d7c306aae40c3aa8e06f0e115f740360004bd87d57f95acf7ab4b4f4122a7399a76dbf2bdaaafb15c99cc137fdcb0ae457a92e2de0f3fbf9b03b - languageName: node - linkType: hard - "@testing-library/react@npm:^14.0.0": version: 14.0.0 resolution: "@testing-library/react@npm:14.0.0" @@ -3113,13 +2850,6 @@ __metadata: languageName: node linkType: hard -"@tootallnate/once@npm:2": - version: 2.0.0 - resolution: "@tootallnate/once@npm:2.0.0" - checksum: ad87447820dd3f24825d2d947ebc03072b20a42bfc96cbafec16bff8bbda6c1a81fcb0be56d5b21968560c5359a0af4038a68ba150c3e1694fe4c109a063bed8 - languageName: node - linkType: hard - "@toruslabs/base-controllers@npm:^4.0.1, @toruslabs/base-controllers@npm:^4.2.0": version: 4.6.0 resolution: "@toruslabs/base-controllers@npm:4.6.0" @@ -3396,53 +3126,28 @@ __metadata: languageName: node linkType: hard -"@types/babel__core@npm:^7.1.14": - version: 7.20.3 - resolution: "@types/babel__core@npm:7.20.3" - dependencies: - "@babel/parser": ^7.20.7 - "@babel/types": ^7.20.7 - "@types/babel__generator": "*" - "@types/babel__template": "*" - "@types/babel__traverse": "*" - checksum: 8d14acc14d99b4b8bf36c00da368f6d597bd9ae3344aa7048f83f0f701b0463fa7c7bf2e50c3e4382fdbcfd1e4187b3452a0f0888b0f3ae8fad975591f7bdb94 - languageName: node - linkType: hard - -"@types/babel__generator@npm:*": - version: 7.6.6 - resolution: "@types/babel__generator@npm:7.6.6" - dependencies: - "@babel/types": ^7.0.0 - checksum: 36e8838c7e16eff611447579e840526946a8b14c794c82486cee2a5ad2257aa6cad746d8ecff3144e3721178837d2c25d0a435d384391eb67846b933c062b075 - languageName: node - linkType: hard - -"@types/babel__template@npm:*": - version: 7.4.3 - resolution: "@types/babel__template@npm:7.4.3" +"@types/bn.js@npm:^5.1.1": + version: 5.1.3 + resolution: "@types/bn.js@npm:5.1.3" dependencies: - "@babel/parser": ^7.1.0 - "@babel/types": ^7.0.0 - checksum: 55deb814c94d1bfb78c4d1de1de1b73eb17c79374602f3bd8aa14e356a77fca64d01646cebe25ec9b307f53a047acc6d53ad6e931019d0726422f5f911e945aa + "@types/node": "*" + checksum: 6cd144b8192b6655a009021a4f838a725ea3eb4c5e6425ffc5b144788f7612fb09018c2359954edef32ab7db15f7070b77d05499318b6d9824a55cb7e6776620 languageName: node linkType: hard -"@types/babel__traverse@npm:*, @types/babel__traverse@npm:^7.0.6": - version: 7.20.3 - resolution: "@types/babel__traverse@npm:7.20.3" +"@types/chai-subset@npm:^1.3.3": + version: 1.3.5 + resolution: "@types/chai-subset@npm:1.3.5" dependencies: - "@babel/types": ^7.20.7 - checksum: 6d0f70d8972647c9b78b51a54f0b6481c4f23f0bb2699ad276e6070678bd121fede99e8e2c8c3e409d2f31a0bf83ae511abc6fefb91f0630c8d728a3a9136790 + "@types/chai": "*" + checksum: 715c46d3e90f87482c2769389d560456bb257b225716ff44c275c231bdb62c8a30629f355f412bac0ecab07ebc036c1806d9ed9dde9792254f8ef4f07f76033b languageName: node linkType: hard -"@types/bn.js@npm:^5.1.1": - version: 5.1.3 - resolution: "@types/bn.js@npm:5.1.3" - dependencies: - "@types/node": "*" - checksum: 6cd144b8192b6655a009021a4f838a725ea3eb4c5e6425ffc5b144788f7612fb09018c2359954edef32ab7db15f7070b77d05499318b6d9824a55cb7e6776620 +"@types/chai@npm:*, @types/chai@npm:^4.3.5": + version: 4.3.9 + resolution: "@types/chai@npm:4.3.9" + checksum: 2300a2c7abd4cb590349927a759b3d0172211a69f363db06e585faf7874a47f125ef3b364cce4f6190e3668147587fc11164c791c9560cf9bce8478fb7019610 languageName: node linkType: hard @@ -3540,70 +3245,6 @@ __metadata: languageName: node linkType: hard -"@types/graceful-fs@npm:^4.1.3": - version: 4.1.8 - resolution: "@types/graceful-fs@npm:4.1.8" - dependencies: - "@types/node": "*" - checksum: 6e1ee9c119e075134696171b680fee7b627f3e077ec5e5ad9ba9359f1688a84fa35ea6804f96922c43ca30ab8d4ca9531a526b64f57fa13e1d721bf741884829 - languageName: node - linkType: hard - -"@types/hast@npm:^2.0.0": - version: 2.3.7 - resolution: "@types/hast@npm:2.3.7" - dependencies: - "@types/unist": ^2 - checksum: 3e63332825ed88117e7f355ba0cfd35367f1d951a1c381333b56188f7645947c3bbbe96abb4c8239324ba1317fd241d5afdb42e104a3654a424327340d49052c - languageName: node - linkType: hard - -"@types/istanbul-lib-coverage@npm:*, @types/istanbul-lib-coverage@npm:^2.0.0, @types/istanbul-lib-coverage@npm:^2.0.1": - version: 2.0.5 - resolution: "@types/istanbul-lib-coverage@npm:2.0.5" - checksum: 978eaf327f9a238eb1e2828b93b4b48e288ffb88c4be81330c74477ab8b93fac41a8784260d72bdd9995535d70608f738199b6364fd3344842e924a3ec3301e7 - languageName: node - linkType: hard - -"@types/istanbul-lib-report@npm:*": - version: 3.0.2 - resolution: "@types/istanbul-lib-report@npm:3.0.2" - dependencies: - "@types/istanbul-lib-coverage": "*" - checksum: 549e44e14a4dc98164ce477ca8650d33898e5c74a6bb8079cbec7f811567dcb805a3bfdbf83ce53222eaecc37ae53aa7f25bda1a7d8347449155c8f0b4f30232 - languageName: node - linkType: hard - -"@types/istanbul-reports@npm:^3.0.0": - version: 3.0.3 - resolution: "@types/istanbul-reports@npm:3.0.3" - dependencies: - "@types/istanbul-lib-report": "*" - checksum: 21d007be7dd09165ed24f5cc9947319ad435fc3b3e568f3eec0a42ee80fd2adccdeb929bc1311efb2cf7597835638cde865d3630d8b4c15d1390c9527bcad1a9 - languageName: node - linkType: hard - -"@types/jest@npm:*, @types/jest@npm:^29.5.0": - version: 29.5.6 - resolution: "@types/jest@npm:29.5.6" - dependencies: - expect: ^29.0.0 - pretty-format: ^29.0.0 - checksum: fa13a27bd1c8efd0381a419478769d0d6d3a8e93e1952d7ac3a16274e8440af6f73ed6f96ac1ff00761198badf2ee226b5ab5583a5d87a78d609ea78da5c5a24 - languageName: node - linkType: hard - -"@types/jsdom@npm:^20.0.0": - version: 20.0.1 - resolution: "@types/jsdom@npm:20.0.1" - dependencies: - "@types/node": "*" - "@types/tough-cookie": "*" - parse5: ^7.0.0 - checksum: d55402c5256ef451f93a6e3d3881f98339fe73a5ac2030588df056d6835df8367b5a857b48d27528289057e26dcdd3f502edc00cb877c79174cb3a4c7f2198c1 - languageName: node - linkType: hard - "@types/lodash-es@npm:^4.17.6": version: 4.17.10 resolution: "@types/lodash-es@npm:4.17.10" @@ -3784,29 +3425,6 @@ __metadata: languageName: node linkType: hard -"@types/stack-utils@npm:^2.0.0": - version: 2.0.2 - resolution: "@types/stack-utils@npm:2.0.2" - checksum: 777cc7ac0c1000c5a07561013bcf7bd8477a3d55f55f376ee2f0c586331f7b999f57788140cfbdb65f6d7d97c0c41fe8fe6c778fd3ed71859c9b681ea76fc621 - languageName: node - linkType: hard - -"@types/testing-library__jest-dom@npm:^5.9.1": - version: 5.14.9 - resolution: "@types/testing-library__jest-dom@npm:5.14.9" - dependencies: - "@types/jest": "*" - checksum: d364494fc2545316292e88861146146af1e3818792ca63b62a63758b2f737669b687f4aaddfcfbcb7d0e1ed7890a9bd05de23ff97f277d5e68de574497a9ee72 - languageName: node - linkType: hard - -"@types/tough-cookie@npm:*": - version: 4.0.4 - resolution: "@types/tough-cookie@npm:4.0.4" - checksum: 6be275b09f5fbf33f359fd6d5372c69357cf96dea5d7ba7a6563c76c6cce8b0c7f81caa4805810b0e67427cad381aeef00d8c060d614fee79ca245c2b9887c3a - languageName: node - linkType: hard - "@types/triple-beam@npm:^1.3.2": version: 1.3.4 resolution: "@types/triple-beam@npm:1.3.4" @@ -3814,13 +3432,6 @@ __metadata: languageName: node linkType: hard -"@types/unist@npm:^2": - version: 2.0.9 - resolution: "@types/unist@npm:2.0.9" - checksum: 53e63a9ecebc8dca8b9dbc69cd0369ea0c993188ebb6e3b41c222281b4e95d8e0b524bcb1556fd210ea7f39771551be0c1c8fe0000bdcc0cd184cd2cd2794256 - languageName: node - linkType: hard - "@types/websocket@npm:^1.0.5": version: 1.0.8 resolution: "@types/websocket@npm:1.0.8" @@ -3839,22 +3450,6 @@ __metadata: languageName: node linkType: hard -"@types/yargs-parser@npm:*": - version: 21.0.2 - resolution: "@types/yargs-parser@npm:21.0.2" - checksum: e979051aac91d778fdb3953aced8cf039d954c3936b910b57735b7b52a413d065e6b2aea1cb2c583f6c23296a6f8543d2541879d798f0afedd7409a562b7bdeb - languageName: node - linkType: hard - -"@types/yargs@npm:^17.0.8": - version: 17.0.29 - resolution: "@types/yargs@npm:17.0.29" - dependencies: - "@types/yargs-parser": "*" - checksum: 8bbc0edd573a5a084cb13a9985c124490fd74e73b1ed8a3058861c13124e103b00a19770dc55c53215653a7845d7033e0695917b75153cfe9618d5b2fd3cf86e - languageName: node - linkType: hard - "@vercel/og@npm:^0.5.19": version: 0.5.20 resolution: "@vercel/og@npm:0.5.20" @@ -3866,8 +3461,61 @@ __metadata: languageName: node linkType: hard -"@walletconnect/core@npm:2.10.4": - version: 2.10.4 +"@vitest/expect@npm:0.34.6": + version: 0.34.6 + resolution: "@vitest/expect@npm:0.34.6" + dependencies: + "@vitest/spy": 0.34.6 + "@vitest/utils": 0.34.6 + chai: ^4.3.10 + checksum: 37a526f4af7e73fc56b71ba1139d6d93ff1972315d0e0691de967179298d2ad086e8803d2b28defe0e97a1326d808cd886e4b802d1691d8894cb234e35ed5185 + languageName: node + linkType: hard + +"@vitest/runner@npm:0.34.6": + version: 0.34.6 + resolution: "@vitest/runner@npm:0.34.6" + dependencies: + "@vitest/utils": 0.34.6 + p-limit: ^4.0.0 + pathe: ^1.1.1 + checksum: 0357f0a11f4e1e170099f9125e379bbe8049a59faa7b34b919b3e5ee8927f30824c2b3ebb814b6a77c75ec35a30bf9adb8ec2b5e051525b4edd0d17be15725cc + languageName: node + linkType: hard + +"@vitest/snapshot@npm:0.34.6": + version: 0.34.6 + resolution: "@vitest/snapshot@npm:0.34.6" + dependencies: + magic-string: ^0.30.1 + pathe: ^1.1.1 + pretty-format: ^29.5.0 + checksum: c2f164b23741cdf10f449575a0f9996cf385675d0f76d2eb696f53b614743811f2fbefdc5eb0fd3f9544ccfbb566d57a5c50a70595167458579d56429b09151f + languageName: node + linkType: hard + +"@vitest/spy@npm:0.34.6": + version: 0.34.6 + resolution: "@vitest/spy@npm:0.34.6" + dependencies: + tinyspy: ^2.1.1 + checksum: b05e5906f2f489a3234a0380a21cb48635915aa7f28eac92a595e78e9ceefb95340311635e39684b32fff20f9c58fdc33488eeddee39a660cd94c9c6bc2febf7 + languageName: node + linkType: hard + +"@vitest/utils@npm:0.34.6": + version: 0.34.6 + resolution: "@vitest/utils@npm:0.34.6" + dependencies: + diff-sequences: ^29.4.3 + loupe: ^2.3.6 + pretty-format: ^29.5.0 + checksum: acf716af2bab66037e49bd6d3e8bae40b605b9bff515d4926c46d6f8cc2366decfac5a1756ea55029968e71fba1da1f992764c3a57c9b46eccce3f6db7197bd6 + languageName: node + linkType: hard + +"@walletconnect/core@npm:2.10.4": + version: 2.10.4 resolution: "@walletconnect/core@npm:2.10.4" dependencies: "@walletconnect/heartbeat": 1.2.1 @@ -4422,7 +4070,7 @@ __metadata: languageName: node linkType: hard -"@yornaath/batshit-devtools@npm:^1.4.1": +"@yornaath/batshit-devtools@npm:^1.4.1, @yornaath/batshit-devtools@npm:^1.5.0": version: 1.5.0 resolution: "@yornaath/batshit-devtools@npm:1.5.0" checksum: 7150f5ce94ec11d32c49eb20d7b709eb1505b70725f8807e416966f25c6f90cf636112d4a5b38b3b0d7c25b6abb5fdfd9ced43da5068cb1a839afb17c1c98d6f @@ -4438,6 +4086,15 @@ __metadata: languageName: node linkType: hard +"@yornaath/batshit@npm:^0.8.0": + version: 0.8.0 + resolution: "@yornaath/batshit@npm:0.8.0" + dependencies: + "@yornaath/batshit-devtools": ^1.5.0 + checksum: fb343dc54751689a63fa092bbe6932e5d99ecf2f5bd205161029cb256d65930bfedf25adf1e7929cdb3e2de45f0380f670ba9f7acfa88e55416749a352039941 + languageName: node + linkType: hard + "@zeitgeistpm/augment-api@npm:2.23.1, @zeitgeistpm/augment-api@npm:^2.23.1": version: 2.23.1 resolution: "@zeitgeistpm/augment-api@npm:2.23.1" @@ -4616,10 +4273,8 @@ __metadata: "@tanstack/query-core": ^4.29.1 "@tanstack/react-query": ^4.19.0 "@tanstack/react-query-devtools": ^4.19.1 - "@testing-library/jest-dom": ^5.16.5 "@testing-library/react": ^14.0.0 "@types/flexsearch": ^0.7.2 - "@types/jest": ^29.5.0 "@types/lodash-es": ^4.17.6 "@types/lodash.merge": ^4.6.6 "@types/object-hash": ^2.2.1 @@ -4629,7 +4284,7 @@ __metadata: "@vercel/og": ^0.5.19 "@walletconnect/sign-client": ^2.10.2 "@web3auth/modal": ^7.0.4 - "@yornaath/batshit": ^0.7.1 + "@yornaath/batshit": ^0.8.0 "@yornaath/batshit-devtools-react": ^0.5.4 "@zeitgeistpm/augment-api": 2.23.1 "@zeitgeistpm/avatara-nft-sdk": ^1.3.1 @@ -4651,8 +4306,6 @@ __metadata: fuse.js: ^6.6.2 graphql-request: ^5.0.0 ip-range-check: ^0.2.0 - jest: ^29.5.0 - jest-environment-jsdom: ^29.5.0 jotai: ^2.0.4 jotai-tanstack-query: ^0.7.0 lodash.merge: ^4.6.2 @@ -4684,7 +4337,6 @@ __metadata: react-resize-detector: ^7.0.0 react-select: ^5.7.0 react-spinners: ^0.10.6 - react-syntax-highlighter: ^15.5.0 react-table: ^7.7.0 react-test-renderer: ^18.2.0 recharts: ^2.4.3 @@ -4701,6 +4353,7 @@ __metadata: uri-js: ^4.4.1 use-debounce: ^7.0.1 validatorjs: ^3.22.1 + vitest: ^0.34.6 zod: ^3.21.4 languageName: unknown linkType: soft @@ -4757,13 +4410,6 @@ __metadata: languageName: node linkType: hard -"abab@npm:^2.0.6": - version: 2.0.6 - resolution: "abab@npm:2.0.6" - checksum: 6ffc1af4ff315066c62600123990d87551ceb0aafa01e6539da77b0f5987ac7019466780bf480f1787576d4385e3690c81ccc37cfda12819bf510b8ab47e5a3e - languageName: node - linkType: hard - "abbrev@npm:^2.0.0": version: 2.0.0 resolution: "abbrev@npm:2.0.0" @@ -4790,24 +4436,14 @@ __metadata: languageName: node linkType: hard -"acorn-globals@npm:^7.0.0": - version: 7.0.1 - resolution: "acorn-globals@npm:7.0.1" - dependencies: - acorn: ^8.1.0 - acorn-walk: ^8.0.2 - checksum: 2a2998a547af6d0db5f0cdb90acaa7c3cbca6709010e02121fb8b8617c0fbd8bab0b869579903fde358ac78454356a14fadcc1a672ecb97b04b1c2ccba955ce8 - languageName: node - linkType: hard - -"acorn-walk@npm:^8.0.0, acorn-walk@npm:^8.0.2, acorn-walk@npm:^8.1.1": +"acorn-walk@npm:^8.0.0, acorn-walk@npm:^8.1.1, acorn-walk@npm:^8.2.0": version: 8.3.0 resolution: "acorn-walk@npm:8.3.0" checksum: 15ea56ab6529135be05e7d018f935ca80a572355dd3f6d3cd717e36df3346e0f635a93ae781b1c7942607693e2e5f3ef81af5c6fc697bbadcc377ebda7b7f5f6 languageName: node linkType: hard -"acorn@npm:^8.0.4, acorn@npm:^8.1.0, acorn@npm:^8.4.1, acorn@npm:^8.8.1": +"acorn@npm:^8.0.4, acorn@npm:^8.10.0, acorn@npm:^8.4.1, acorn@npm:^8.9.0": version: 8.11.2 resolution: "acorn@npm:8.11.2" bin: @@ -4816,15 +4452,6 @@ __metadata: languageName: node linkType: hard -"agent-base@npm:6": - version: 6.0.2 - resolution: "agent-base@npm:6.0.2" - dependencies: - debug: 4 - checksum: f52b6872cc96fd5f622071b71ef200e01c7c4c454ee68bc9accca90c98cfb39f2810e3e9aa330435835eedc8c23f4f8a15267f67c6e245d2b33757575bdac49d - languageName: node - linkType: hard - "agent-base@npm:^7.0.2, agent-base@npm:^7.1.0": version: 7.1.0 resolution: "agent-base@npm:7.1.0" @@ -4853,15 +4480,6 @@ __metadata: languageName: node linkType: hard -"ansi-escapes@npm:^4.2.1": - version: 4.3.2 - resolution: "ansi-escapes@npm:4.3.2" - dependencies: - type-fest: ^0.21.3 - checksum: 93111c42189c0a6bed9cdb4d7f2829548e943827ee8479c74d6e0b22ee127b2a21d3f8b5ca57723b8ef78ce011fbfc2784350eb2bde3ccfccf2f575fa8489815 - languageName: node - linkType: hard - "ansi-regex@npm:^5.0.1": version: 5.0.1 resolution: "ansi-regex@npm:5.0.1" @@ -4932,7 +4550,7 @@ __metadata: languageName: node linkType: hard -"anymatch@npm:^3.0.3, anymatch@npm:~3.1.2": +"anymatch@npm:~3.1.2": version: 3.1.3 resolution: "anymatch@npm:3.1.3" dependencies: @@ -4956,15 +4574,6 @@ __metadata: languageName: node linkType: hard -"argparse@npm:^1.0.7": - version: 1.0.10 - resolution: "argparse@npm:1.0.10" - dependencies: - sprintf-js: ~1.0.2 - checksum: 7ca6e45583a28de7258e39e13d81e925cfa25d7d4aacbf806a382d3c02fcb13403a07fb8aeef949f10a7cfe4a62da0e2e807b348a5980554cc28ee573ef95945 - languageName: node - linkType: hard - "aria-query@npm:5.1.3": version: 5.1.3 resolution: "aria-query@npm:5.1.3" @@ -4974,15 +4583,6 @@ __metadata: languageName: node linkType: hard -"aria-query@npm:^5.0.0": - version: 5.3.0 - resolution: "aria-query@npm:5.3.0" - dependencies: - dequal: ^2.0.3 - checksum: 305bd73c76756117b59aba121d08f413c7ff5e80fa1b98e217a3443fcddb9a232ee790e24e432b59ae7625aebcf4c47cb01c2cac872994f0b426f5bdfcd96ba9 - languageName: node - linkType: hard - "array-buffer-byte-length@npm:^1.0.0": version: 1.0.0 resolution: "array-buffer-byte-length@npm:1.0.0" @@ -5025,6 +4625,13 @@ __metadata: languageName: node linkType: hard +"assertion-error@npm:^1.1.0": + version: 1.1.0 + resolution: "assertion-error@npm:1.1.0" + checksum: fd9429d3a3d4fd61782eb3962ae76b6d08aa7383123fca0596020013b3ebd6647891a85b05ce821c47d1471ed1271f00b0545cf6a4326cf2fc91efcc3b0fbecf + languageName: node + linkType: hard + "async-mutex@npm:^0.4.0": version: 0.4.0 resolution: "async-mutex@npm:0.4.0" @@ -5099,23 +4706,6 @@ __metadata: languageName: node linkType: hard -"babel-jest@npm:^29.7.0": - version: 29.7.0 - resolution: "babel-jest@npm:29.7.0" - dependencies: - "@jest/transform": ^29.7.0 - "@types/babel__core": ^7.1.14 - babel-plugin-istanbul: ^6.1.1 - babel-preset-jest: ^29.6.3 - chalk: ^4.0.0 - graceful-fs: ^4.2.9 - slash: ^3.0.0 - peerDependencies: - "@babel/core": ^7.8.0 - checksum: ee6f8e0495afee07cac5e4ee167be705c711a8cc8a737e05a587a131fdae2b3c8f9aa55dfd4d9c03009ac2d27f2de63d8ba96d3e8460da4d00e8af19ef9a83f7 - languageName: node - linkType: hard - "babel-plugin-emotion@npm:^10.0.27": version: 10.2.2 resolution: "babel-plugin-emotion@npm:10.2.2" @@ -5134,31 +4724,6 @@ __metadata: languageName: node linkType: hard -"babel-plugin-istanbul@npm:^6.1.1": - version: 6.1.1 - resolution: "babel-plugin-istanbul@npm:6.1.1" - dependencies: - "@babel/helper-plugin-utils": ^7.0.0 - "@istanbuljs/load-nyc-config": ^1.0.0 - "@istanbuljs/schema": ^0.1.2 - istanbul-lib-instrument: ^5.0.4 - test-exclude: ^6.0.0 - checksum: cb4fd95738219f232f0aece1116628cccff16db891713c4ccb501cddbbf9272951a5df81f2f2658dfdf4b3e7b236a9d5cbcf04d5d8c07dd5077297339598061a - languageName: node - linkType: hard - -"babel-plugin-jest-hoist@npm:^29.6.3": - version: 29.6.3 - resolution: "babel-plugin-jest-hoist@npm:29.6.3" - dependencies: - "@babel/template": ^7.3.3 - "@babel/types": ^7.3.3 - "@types/babel__core": ^7.1.14 - "@types/babel__traverse": ^7.0.6 - checksum: 51250f22815a7318f17214a9d44650ba89551e6d4f47a2dc259128428324b52f5a73979d010cefd921fd5a720d8c1d55ad74ff601cd94c7bd44d5f6292fde2d1 - languageName: node - linkType: hard - "babel-plugin-macros@npm:^2.0.0": version: 2.8.0 resolution: "babel-plugin-macros@npm:2.8.0" @@ -5203,40 +4768,6 @@ __metadata: languageName: node linkType: hard -"babel-preset-current-node-syntax@npm:^1.0.0": - version: 1.0.1 - resolution: "babel-preset-current-node-syntax@npm:1.0.1" - dependencies: - "@babel/plugin-syntax-async-generators": ^7.8.4 - "@babel/plugin-syntax-bigint": ^7.8.3 - "@babel/plugin-syntax-class-properties": ^7.8.3 - "@babel/plugin-syntax-import-meta": ^7.8.3 - "@babel/plugin-syntax-json-strings": ^7.8.3 - "@babel/plugin-syntax-logical-assignment-operators": ^7.8.3 - "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3 - "@babel/plugin-syntax-numeric-separator": ^7.8.3 - "@babel/plugin-syntax-object-rest-spread": ^7.8.3 - "@babel/plugin-syntax-optional-catch-binding": ^7.8.3 - "@babel/plugin-syntax-optional-chaining": ^7.8.3 - "@babel/plugin-syntax-top-level-await": ^7.8.3 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: d118c2742498c5492c095bc8541f4076b253e705b5f1ad9a2e7d302d81a84866f0070346662355c8e25fc02caa28dc2da8d69bcd67794a0d60c4d6fab6913cc8 - languageName: node - linkType: hard - -"babel-preset-jest@npm:^29.6.3": - version: 29.6.3 - resolution: "babel-preset-jest@npm:29.6.3" - dependencies: - babel-plugin-jest-hoist: ^29.6.3 - babel-preset-current-node-syntax: ^1.0.0 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: aa4ff2a8a728d9d698ed521e3461a109a1e66202b13d3494e41eea30729a5e7cc03b3a2d56c594423a135429c37bf63a9fa8b0b9ce275298be3095a88c69f6fb - languageName: node - linkType: hard - "balanced-match@npm:^1.0.0": version: 1.0.2 resolution: "balanced-match@npm:1.0.2" @@ -5510,22 +5041,6 @@ __metadata: languageName: node linkType: hard -"bser@npm:2.1.1": - version: 2.1.1 - resolution: "bser@npm:2.1.1" - dependencies: - node-int64: ^0.4.0 - checksum: 9ba4dc58ce86300c862bffc3ae91f00b2a03b01ee07f3564beeeaf82aa243b8b03ba53f123b0b842c190d4399b94697970c8e7cf7b1ea44b61aa28c3526a4449 - languageName: node - linkType: hard - -"buffer-from@npm:^1.0.0": - version: 1.1.2 - resolution: "buffer-from@npm:1.1.2" - checksum: 0448524a562b37d4d7ed9efd91685a5b77a50672c556ea254ac9a6d30e3403a517d8981f10e565db24e8339413b43c97ca2951f10e399c6125a0d8911f5679bb - languageName: node - linkType: hard - "buffer@npm:6.0.3, buffer@npm:^6.0.1, buffer@npm:^6.0.3, buffer@npm:~6.0.3": version: 6.0.3 resolution: "buffer@npm:6.0.3" @@ -5565,6 +5080,13 @@ __metadata: languageName: node linkType: hard +"cac@npm:^6.7.14": + version: 6.7.14 + resolution: "cac@npm:6.7.14" + checksum: 45a2496a9443abbe7f52a49b22fbe51b1905eff46e03fd5e6c98e3f85077be3f8949685a1849b1a9cd2bc3e5567dfebcf64f01ce01847baf918f1b37c839791a + languageName: node + linkType: hard + "cacache@npm:^18.0.0": version: 18.0.0 resolution: "cacache@npm:18.0.0" @@ -5628,13 +5150,6 @@ __metadata: languageName: node linkType: hard -"camelcase@npm:^6.2.0": - version: 6.3.0 - resolution: "camelcase@npm:6.3.0" - checksum: 8c96818a9076434998511251dcb2761a94817ea17dbdc37f47ac080bd088fc62c7369429a19e2178b993497132c8cbcf5cc1f44ba963e76782ba469c0474938d - languageName: node - linkType: hard - "camelize@npm:^1.0.0": version: 1.0.1 resolution: "camelize@npm:1.0.1" @@ -5658,6 +5173,21 @@ __metadata: languageName: node linkType: hard +"chai@npm:^4.3.10": + version: 4.3.10 + resolution: "chai@npm:4.3.10" + dependencies: + assertion-error: ^1.1.0 + check-error: ^1.0.3 + deep-eql: ^4.1.3 + get-func-name: ^2.0.2 + loupe: ^2.3.6 + pathval: ^1.1.1 + type-detect: ^4.0.8 + checksum: 536668c60a0d985a0fbd94418028e388d243a925d7c5e858c7443e334753511614a3b6a124bac9ca077dfc4c37acc367d62f8c294960f440749536dc181dfc6d + languageName: node + linkType: hard + "chalk@npm:^2.4.2": version: 2.4.2 resolution: "chalk@npm:2.4.2" @@ -5669,17 +5199,7 @@ __metadata: languageName: node linkType: hard -"chalk@npm:^3.0.0": - version: 3.0.0 - resolution: "chalk@npm:3.0.0" - dependencies: - ansi-styles: ^4.1.0 - supports-color: ^7.1.0 - checksum: 8e3ddf3981c4da405ddbd7d9c8d91944ddf6e33d6837756979f7840a29272a69a5189ecae0ff84006750d6d1e92368d413335eab4db5476db6e6703a1d1e0505 - languageName: node - linkType: hard - -"chalk@npm:^4.0.0, chalk@npm:^4.1.0": +"chalk@npm:^4.1.0": version: 4.1.2 resolution: "chalk@npm:4.1.2" dependencies: @@ -5689,31 +5209,12 @@ __metadata: languageName: node linkType: hard -"char-regex@npm:^1.0.2": - version: 1.0.2 - resolution: "char-regex@npm:1.0.2" - checksum: b563e4b6039b15213114626621e7a3d12f31008bdce20f9c741d69987f62aeaace7ec30f6018890ad77b2e9b4d95324c9f5acfca58a9441e3b1dcdd1e2525d17 - languageName: node - linkType: hard - -"character-entities-legacy@npm:^1.0.0": - version: 1.1.4 - resolution: "character-entities-legacy@npm:1.1.4" - checksum: fe03a82c154414da3a0c8ab3188e4237ec68006cbcd681cf23c7cfb9502a0e76cd30ab69a2e50857ca10d984d57de3b307680fff5328ccd427f400e559c3a811 - languageName: node - linkType: hard - -"character-entities@npm:^1.0.0": - version: 1.2.4 - resolution: "character-entities@npm:1.2.4" - checksum: e1545716571ead57beac008433c1ff69517cd8ca5b336889321c5b8ff4a99c29b65589a701e9c086cda8a5e346a67295e2684f6c7ea96819fe85cbf49bf8686d - languageName: node - linkType: hard - -"character-reference-invalid@npm:^1.0.0": - version: 1.1.4 - resolution: "character-reference-invalid@npm:1.1.4" - checksum: 20274574c70e05e2f81135f3b93285536bc8ff70f37f0809b0d17791a832838f1e49938382899ed4cb444e5bbd4314ca1415231344ba29f4222ce2ccf24fea0b +"check-error@npm:^1.0.3": + version: 1.0.3 + resolution: "check-error@npm:1.0.3" + dependencies: + get-func-name: ^2.0.2 + checksum: e2131025cf059b21080f4813e55b3c480419256914601750b0fee3bd9b2b8315b531e551ef12560419b8b6d92a3636511322752b1ce905703239e7cc451b6399 languageName: node linkType: hard @@ -5757,13 +5258,6 @@ __metadata: languageName: node linkType: hard -"ci-info@npm:^3.2.0": - version: 3.9.0 - resolution: "ci-info@npm:3.9.0" - checksum: 6b19dc9b2966d1f8c2041a838217299718f15d6c4b63ae36e4674edd2bee48f780e94761286a56aa59eb305a85fbea4ddffb7630ec063e7ec7e7e5ad42549a87 - languageName: node - linkType: hard - "cids@npm:^1.0.0, cids@npm:^1.1.5, cids@npm:^1.1.6, cids@npm:^1.1.9": version: 1.1.9 resolution: "cids@npm:1.1.9" @@ -5776,13 +5270,6 @@ __metadata: languageName: node linkType: hard -"cjs-module-lexer@npm:^1.0.0": - version: 1.2.3 - resolution: "cjs-module-lexer@npm:1.2.3" - checksum: 5ea3cb867a9bb609b6d476cd86590d105f3cfd6514db38ff71f63992ab40939c2feb68967faa15a6d2b1f90daa6416b79ea2de486e9e2485a6f8b66a21b4fb0a - languageName: node - linkType: hard - "class-is@npm:^1.1.0": version: 1.1.0 resolution: "class-is@npm:1.1.0" @@ -5822,17 +5309,6 @@ __metadata: languageName: node linkType: hard -"cliui@npm:^8.0.1": - version: 8.0.1 - resolution: "cliui@npm:8.0.1" - dependencies: - string-width: ^4.2.0 - strip-ansi: ^6.0.1 - wrap-ansi: ^7.0.0 - checksum: 79648b3b0045f2e285b76fb2e24e207c6db44323581e421c3acbd0e86454cba1b37aea976ab50195a49e7384b871e6dfb2247ad7dec53c02454ac6497394cb56 - languageName: node - linkType: hard - "clone@npm:2.x, clone@npm:^2.1.1": version: 2.1.2 resolution: "clone@npm:2.1.2" @@ -5840,13 +5316,6 @@ __metadata: languageName: node linkType: hard -"co@npm:^4.6.0": - version: 4.6.0 - resolution: "co@npm:4.6.0" - checksum: 5210d9223010eb95b29df06a91116f2cf7c8e0748a9013ed853b53f362ea0e822f1e5bb054fb3cefc645239a4cf966af1f6133a3b43f40d591f3b68ed6cf0510 - languageName: node - linkType: hard - "code-block-writer@npm:^11.0.0": version: 11.0.3 resolution: "code-block-writer@npm:11.0.3" @@ -5854,13 +5323,6 @@ __metadata: languageName: node linkType: hard -"collect-v8-coverage@npm:^1.0.0": - version: 1.0.2 - resolution: "collect-v8-coverage@npm:1.0.2" - checksum: c10f41c39ab84629d16f9f6137bc8a63d332244383fc368caf2d2052b5e04c20cd1fd70f66fcf4e2422b84c8226598b776d39d5f2d2a51867cc1ed5d1982b4da - languageName: node - linkType: hard - "color-convert@npm:^1.9.0, color-convert@npm:^1.9.3": version: 1.9.3 resolution: "color-convert@npm:1.9.3" @@ -5949,13 +5411,6 @@ __metadata: languageName: node linkType: hard -"comma-separated-tokens@npm:^1.0.0": - version: 1.0.8 - resolution: "comma-separated-tokens@npm:1.0.8" - checksum: 0adcb07174fa4d08cf0f5c8e3aec40a36b5ff0c2c720e5e23f50fe02e6789d1d00a67036c80e0c1e1539f41d3e7f0101b074039dd833b4e4a59031b659d6ca0d - languageName: node - linkType: hard - "commander@npm:^2.15.0, commander@npm:^2.20.3": version: 2.20.3 resolution: "commander@npm:2.20.3" @@ -5998,13 +5453,6 @@ __metadata: languageName: node linkType: hard -"convert-source-map@npm:^2.0.0": - version: 2.0.0 - resolution: "convert-source-map@npm:2.0.0" - checksum: 63ae9933be5a2b8d4509daca5124e20c14d023c820258e484e32dc324d34c2754e71297c94a05784064ad27615037ef677e3f0c00469fb55f409d2bb21261035 - languageName: node - linkType: hard - "copy-anything@npm:^3.0.2": version: 3.0.5 resolution: "copy-anything@npm:3.0.5" @@ -6070,23 +5518,6 @@ __metadata: languageName: node linkType: hard -"create-jest@npm:^29.7.0": - version: 29.7.0 - resolution: "create-jest@npm:29.7.0" - dependencies: - "@jest/types": ^29.6.3 - chalk: ^4.0.0 - exit: ^0.1.2 - graceful-fs: ^4.2.9 - jest-config: ^29.7.0 - jest-util: ^29.7.0 - prompts: ^2.0.1 - bin: - create-jest: bin/create-jest.js - checksum: 1427d49458adcd88547ef6fa39041e1fe9033a661293aa8d2c3aa1b4967cb5bf4f0c00436c7a61816558f28ba2ba81a94d5c962e8022ea9a883978fc8e1f2945 - languageName: node - linkType: hard - "create-require@npm:^1.1.0": version: 1.1.1 resolution: "create-require@npm:1.1.1" @@ -6158,13 +5589,6 @@ __metadata: languageName: node linkType: hard -"css.escape@npm:^1.5.1": - version: 1.5.1 - resolution: "css.escape@npm:1.5.1" - checksum: f6d38088d870a961794a2580b2b2af1027731bb43261cfdce14f19238a88664b351cc8978abc20f06cc6bbde725699dec8deb6fe9816b139fc3f2af28719e774 - languageName: node - linkType: hard - "cssesc@npm:^3.0.0": version: 3.0.0 resolution: "cssesc@npm:3.0.0" @@ -6174,29 +5598,6 @@ __metadata: languageName: node linkType: hard -"cssom@npm:^0.5.0": - version: 0.5.0 - resolution: "cssom@npm:0.5.0" - checksum: 823471aa30091c59e0a305927c30e7768939b6af70405808f8d2ce1ca778cddcb24722717392438329d1691f9a87cb0183b64b8d779b56a961546d54854fde01 - languageName: node - linkType: hard - -"cssom@npm:~0.3.6": - version: 0.3.8 - resolution: "cssom@npm:0.3.8" - checksum: 24beb3087c76c0d52dd458be9ee1fbc80ac771478a9baef35dd258cdeb527c68eb43204dd439692bb2b1ae5272fa5f2946d10946edab0d04f1078f85e06bc7f6 - languageName: node - linkType: hard - -"cssstyle@npm:^2.3.0": - version: 2.3.0 - resolution: "cssstyle@npm:2.3.0" - dependencies: - cssom: ~0.3.6 - checksum: 5f05e6fd2e3df0b44695c2f08b9ef38b011862b274e320665176467c0725e44a53e341bc4959a41176e83b66064ab786262e7380fd1cabeae6efee0d255bb4e3 - languageName: node - linkType: hard - "csstype@npm:^2.5.7": version: 2.6.21 resolution: "csstype@npm:2.6.21" @@ -6331,17 +5732,6 @@ __metadata: languageName: node linkType: hard -"data-urls@npm:^3.0.2": - version: 3.0.2 - resolution: "data-urls@npm:3.0.2" - dependencies: - abab: ^2.0.6 - whatwg-mimetype: ^3.0.0 - whatwg-url: ^11.0.0 - checksum: 033fc3dd0fba6d24bc9a024ddcf9923691dd24f90a3d26f6545d6a2f71ec6956f93462f2cdf2183cc46f10dc01ed3bcb36731a8208456eb1a08147e571fe2a76 - languageName: node - linkType: hard - "date-fns@npm:^2.29.3": version: 2.30.0 resolution: "date-fns@npm:2.30.0" @@ -6405,7 +5795,7 @@ __metadata: languageName: node linkType: hard -"decimal.js@npm:^10.3.1, decimal.js@npm:^10.4.2, decimal.js@npm:^10.4.3": +"decimal.js@npm:^10.3.1, decimal.js@npm:^10.4.3": version: 10.4.3 resolution: "decimal.js@npm:10.4.3" checksum: 796404dcfa9d1dbfdc48870229d57f788b48c21c603c3f6554a1c17c10195fc1024de338b0cf9e1efe0c7c167eeb18f04548979bcc5fdfabebb7cc0ae3287bae @@ -6428,18 +5818,6 @@ __metadata: languageName: node linkType: hard -"dedent@npm:^1.0.0": - version: 1.5.1 - resolution: "dedent@npm:1.5.1" - peerDependencies: - babel-plugin-macros: ^3.1.0 - peerDependenciesMeta: - babel-plugin-macros: - optional: true - checksum: c3c300a14edf1bdf5a873f9e4b22e839d62490bc5c8d6169c1f15858a1a76733d06a9a56930e963d677a2ceeca4b6b0894cc5ea2f501aa382ca5b92af3413c2a - languageName: node - linkType: hard - "deep-diff@npm:^1.0.2": version: 1.0.2 resolution: "deep-diff@npm:1.0.2" @@ -6447,6 +5825,15 @@ __metadata: languageName: node linkType: hard +"deep-eql@npm:^4.1.3": + version: 4.1.3 + resolution: "deep-eql@npm:4.1.3" + dependencies: + type-detect: ^4.0.0 + checksum: 7f6d30cb41c713973dc07eaadded848b2ab0b835e518a88b91bea72f34e08c4c71d167a722a6f302d3a6108f05afd8e6d7650689a84d5d29ec7fe6220420397f + languageName: node + linkType: hard + "deep-equal@npm:^1.0.1": version: 1.1.1 resolution: "deep-equal@npm:1.1.1" @@ -6558,13 +5945,6 @@ __metadata: languageName: node linkType: hard -"dequal@npm:^2.0.3": - version: 2.0.3 - resolution: "dequal@npm:2.0.3" - checksum: 8679b850e1a3d0ebbc46ee780d5df7b478c23f335887464023a631d1b9af051ad4a6595a44220f9ff8ff95a8ddccf019b5ad778a976fd7bbf77383d36f412f90 - languageName: node - linkType: hard - "detect-browser@npm:5.3.0": version: 5.3.0 resolution: "detect-browser@npm:5.3.0" @@ -6579,13 +5959,6 @@ __metadata: languageName: node linkType: hard -"detect-newline@npm:^3.0.0": - version: 3.1.0 - resolution: "detect-newline@npm:3.1.0" - checksum: ae6cd429c41ad01b164c59ea36f264a2c479598e61cba7c99da24175a7ab80ddf066420f2bec9a1c57a6bead411b4655ff15ad7d281c000a89791f48cbe939e7 - languageName: node - linkType: hard - "didyoumean@npm:^1.2.2": version: 1.2.2 resolution: "didyoumean@npm:1.2.2" @@ -6593,7 +5966,7 @@ __metadata: languageName: node linkType: hard -"diff-sequences@npm:^29.6.3": +"diff-sequences@npm:^29.4.3": version: 29.6.3 resolution: "diff-sequences@npm:29.6.3" checksum: f4914158e1f2276343d98ff5b31fc004e7304f5470bf0f1adb2ac6955d85a531a6458d33e87667f98f6ae52ebd3891bb47d420bb48a5bd8b7a27ee25b20e33aa @@ -6644,7 +6017,7 @@ __metadata: languageName: node linkType: hard -"dom-accessibility-api@npm:^0.5.6, dom-accessibility-api@npm:^0.5.9": +"dom-accessibility-api@npm:^0.5.9": version: 0.5.16 resolution: "dom-accessibility-api@npm:0.5.16" checksum: 005eb283caef57fc1adec4d5df4dd49189b628f2f575af45decb210e04d634459e3f1ee64f18b41e2dcf200c844bc1d9279d80807e686a30d69a4756151ad248 @@ -6670,15 +6043,6 @@ __metadata: languageName: node linkType: hard -"domexception@npm:^4.0.0": - version: 4.0.0 - resolution: "domexception@npm:4.0.0" - dependencies: - webidl-conversions: ^7.0.0 - checksum: ddbc1268edf33a8ba02ccc596735ede80375ee0cf124b30d2f05df5b464ba78ef4f49889b6391df4a04954e63d42d5631c7fcf8b1c4f12bc531252977a5f13d5 - languageName: node - linkType: hard - "dotenv@npm:^9.0.2": version: 9.0.2 resolution: "dotenv@npm:9.0.2" @@ -6752,13 +6116,6 @@ __metadata: languageName: node linkType: hard -"emittery@npm:^0.13.1": - version: 0.13.1 - resolution: "emittery@npm:0.13.1" - checksum: 2b089ab6306f38feaabf4f6f02792f9ec85fc054fda79f44f6790e61bbf6bc4e1616afb9b232e0c5ec5289a8a452f79bfa6d905a6fd64e94b49981f0934001c6 - languageName: node - linkType: hard - "emoji-regex@npm:^10.2.1": version: 10.3.0 resolution: "emoji-regex@npm:10.3.0" @@ -6842,13 +6199,6 @@ __metadata: languageName: node linkType: hard -"entities@npm:^4.4.0": - version: 4.5.0 - resolution: "entities@npm:4.5.0" - checksum: 853f8ebd5b425d350bffa97dd6958143179a5938352ccae092c62d1267c4e392a039be1bae7d51b6e4ffad25f51f9617531fedf5237f15df302ccfb452cbf2d7 - languageName: node - linkType: hard - "env-paths@npm:^2.2.0": version: 2.2.1 resolution: "env-paths@npm:2.2.1" @@ -6953,6 +6303,83 @@ __metadata: languageName: node linkType: hard +"esbuild@npm:^0.19.3": + version: 0.19.5 + resolution: "esbuild@npm:0.19.5" + dependencies: + "@esbuild/android-arm": 0.19.5 + "@esbuild/android-arm64": 0.19.5 + "@esbuild/android-x64": 0.19.5 + "@esbuild/darwin-arm64": 0.19.5 + "@esbuild/darwin-x64": 0.19.5 + "@esbuild/freebsd-arm64": 0.19.5 + "@esbuild/freebsd-x64": 0.19.5 + "@esbuild/linux-arm": 0.19.5 + "@esbuild/linux-arm64": 0.19.5 + "@esbuild/linux-ia32": 0.19.5 + "@esbuild/linux-loong64": 0.19.5 + "@esbuild/linux-mips64el": 0.19.5 + "@esbuild/linux-ppc64": 0.19.5 + "@esbuild/linux-riscv64": 0.19.5 + "@esbuild/linux-s390x": 0.19.5 + "@esbuild/linux-x64": 0.19.5 + "@esbuild/netbsd-x64": 0.19.5 + "@esbuild/openbsd-x64": 0.19.5 + "@esbuild/sunos-x64": 0.19.5 + "@esbuild/win32-arm64": 0.19.5 + "@esbuild/win32-ia32": 0.19.5 + "@esbuild/win32-x64": 0.19.5 + dependenciesMeta: + "@esbuild/android-arm": + optional: true + "@esbuild/android-arm64": + optional: true + "@esbuild/android-x64": + optional: true + "@esbuild/darwin-arm64": + optional: true + "@esbuild/darwin-x64": + optional: true + "@esbuild/freebsd-arm64": + optional: true + "@esbuild/freebsd-x64": + optional: true + "@esbuild/linux-arm": + optional: true + "@esbuild/linux-arm64": + optional: true + "@esbuild/linux-ia32": + optional: true + "@esbuild/linux-loong64": + optional: true + "@esbuild/linux-mips64el": + optional: true + "@esbuild/linux-ppc64": + optional: true + "@esbuild/linux-riscv64": + optional: true + "@esbuild/linux-s390x": + optional: true + "@esbuild/linux-x64": + optional: true + "@esbuild/netbsd-x64": + optional: true + "@esbuild/openbsd-x64": + optional: true + "@esbuild/sunos-x64": + optional: true + "@esbuild/win32-arm64": + optional: true + "@esbuild/win32-ia32": + optional: true + "@esbuild/win32-x64": + optional: true + bin: + esbuild: bin/esbuild + checksum: 5a0227cf6ffffa3076714d88230af1dfdd2fc363d91bd712a81fb91230c315a395e2c9b7588eee62986aeebf4999804b9b1b59eeab8e2457184eb0056bfe20c8 + languageName: node + linkType: hard + "escalade@npm:^3.1.1": version: 3.1.1 resolution: "escalade@npm:3.1.1" @@ -6974,13 +6401,6 @@ __metadata: languageName: node linkType: hard -"escape-string-regexp@npm:^2.0.0": - version: 2.0.0 - resolution: "escape-string-regexp@npm:2.0.0" - checksum: 9f8a2d5743677c16e85c810e3024d54f0c8dea6424fad3c79ef6666e81dd0846f7437f5e729dfcdac8981bc9e5294c39b4580814d114076b8d36318f46ae4395 - languageName: node - linkType: hard - "escape-string-regexp@npm:^4.0.0": version: 4.0.0 resolution: "escape-string-regexp@npm:4.0.0" @@ -6988,24 +6408,6 @@ __metadata: languageName: node linkType: hard -"escodegen@npm:^2.0.0": - version: 2.1.0 - resolution: "escodegen@npm:2.1.0" - dependencies: - esprima: ^4.0.1 - estraverse: ^5.2.0 - esutils: ^2.0.2 - source-map: ~0.6.1 - dependenciesMeta: - source-map: - optional: true - bin: - escodegen: bin/escodegen.js - esgenerate: bin/esgenerate.js - checksum: 096696407e161305cd05aebb95134ad176708bc5cb13d0dcc89a5fcbb959b8ed757e7f2591a5f8036f8f4952d4a724de0df14cd419e29212729fa6df5ce16bf6 - languageName: node - linkType: hard - "eslint-config-prettier@npm:^8.8.0": version: 8.10.0 resolution: "eslint-config-prettier@npm:8.10.0" @@ -7017,30 +6419,6 @@ __metadata: languageName: node linkType: hard -"esprima@npm:^4.0.0, esprima@npm:^4.0.1": - version: 4.0.1 - resolution: "esprima@npm:4.0.1" - bin: - esparse: ./bin/esparse.js - esvalidate: ./bin/esvalidate.js - checksum: b45bc805a613dbea2835278c306b91aff6173c8d034223fa81498c77dcbce3b2931bf6006db816f62eacd9fd4ea975dfd85a5b7f3c6402cfd050d4ca3c13a628 - languageName: node - linkType: hard - -"estraverse@npm:^5.2.0": - version: 5.3.0 - resolution: "estraverse@npm:5.3.0" - checksum: 072780882dc8416ad144f8fe199628d2b3e7bbc9989d9ed43795d2c90309a2047e6bc5979d7e2322a341163d22cfad9e21f4110597fe487519697389497e4e2b - languageName: node - linkType: hard - -"esutils@npm:^2.0.2": - version: 2.0.3 - resolution: "esutils@npm:2.0.3" - checksum: 22b5b08f74737379a840b8ed2036a5fb35826c709ab000683b092d9054e5c2a82c27818f12604bfc2a9a76b90b6834ef081edbc1c7ae30d1627012e067c6ec87 - languageName: node - linkType: hard - "eth-rpc-errors@npm:^4.0.3": version: 4.0.3 resolution: "eth-rpc-errors@npm:4.0.3" @@ -7122,7 +6500,7 @@ __metadata: languageName: node linkType: hard -"execa@npm:5.1.1, execa@npm:^5.0.0": +"execa@npm:5.1.1": version: 5.1.1 resolution: "execa@npm:5.1.1" dependencies: @@ -7139,13 +6517,6 @@ __metadata: languageName: node linkType: hard -"exit@npm:^0.1.2": - version: 0.1.2 - resolution: "exit@npm:0.1.2" - checksum: abc407f07a875c3961e4781dfcb743b58d6c93de9ab263f4f8c9d23bb6da5f9b7764fc773f86b43dd88030444d5ab8abcb611cb680fba8ca075362b77114bba3 - languageName: node - linkType: hard - "expand-template@npm:^2.0.3": version: 2.0.3 resolution: "expand-template@npm:2.0.3" @@ -7153,19 +6524,6 @@ __metadata: languageName: node linkType: hard -"expect@npm:^29.0.0, expect@npm:^29.7.0": - version: 29.7.0 - resolution: "expect@npm:29.7.0" - dependencies: - "@jest/expect-utils": ^29.7.0 - jest-get-type: ^29.6.3 - jest-matcher-utils: ^29.7.0 - jest-message-util: ^29.7.0 - jest-util: ^29.7.0 - checksum: 9257f10288e149b81254a0fda8ffe8d54a7061cd61d7515779998b012579d2b8c22354b0eb901daf0145f347403da582f75f359f4810c007182ad3fb318b5c0c - languageName: node - linkType: hard - "exponential-backoff@npm:^3.1.1": version: 3.1.1 resolution: "exponential-backoff@npm:3.1.1" @@ -7244,13 +6602,6 @@ __metadata: languageName: node linkType: hard -"fast-json-stable-stringify@npm:^2.1.0": - version: 2.1.0 - resolution: "fast-json-stable-stringify@npm:2.1.0" - checksum: b191531e36c607977e5b1c47811158733c34ccb3bfde92c44798929e9b4154884378536d26ad90dfecd32e1ffc09c545d23535ad91b3161a27ddbb8ebe0cbecb - languageName: node - linkType: hard - "fast-redact@npm:^3.0.0": version: 3.3.0 resolution: "fast-redact@npm:3.3.0" @@ -7288,24 +6639,6 @@ __metadata: languageName: node linkType: hard -"fault@npm:^1.0.0": - version: 1.0.4 - resolution: "fault@npm:1.0.4" - dependencies: - format: ^0.2.0 - checksum: 5ac610d8b09424e0f2fa8cf913064372f2ee7140a203a79957f73ed557c0e79b1a3d096064d7f40bde8132a69204c1fe25ec23634c05c6da2da2039cff26c4e7 - languageName: node - linkType: hard - -"fb-watchman@npm:^2.0.0": - version: 2.0.2 - resolution: "fb-watchman@npm:2.0.2" - dependencies: - bser: 2.1.1 - checksum: b15a124cef28916fe07b400eb87cbc73ca082c142abf7ca8e8de6af43eca79ca7bd13eb4d4d48240b3bd3136eaac40d16e42d6edf87a8e5d1dd8070626860c78 - languageName: node - linkType: hard - "fecha@npm:^4.2.0": version: 4.2.3 resolution: "fecha@npm:4.2.3" @@ -7360,7 +6693,7 @@ __metadata: languageName: node linkType: hard -"find-up@npm:^4.0.0, find-up@npm:^4.1.0": +"find-up@npm:^4.1.0": version: 4.1.0 resolution: "find-up@npm:4.1.0" dependencies: @@ -7442,13 +6775,6 @@ __metadata: languageName: node linkType: hard -"format@npm:^0.2.0": - version: 0.2.2 - resolution: "format@npm:0.2.2" - checksum: 646a60e1336250d802509cf24fb801e43bd4a70a07510c816fa133aa42cdbc9c21e66e9cc0801bb183c5b031c9d68be62e7fbb6877756e52357850f92aa28799 - languageName: node - linkType: hard - "formdata-polyfill@npm:^4.0.10": version: 4.0.10 resolution: "formdata-polyfill@npm:4.0.10" @@ -7542,7 +6868,7 @@ __metadata: languageName: node linkType: hard -"fsevents@npm:^2.3.2, fsevents@npm:~2.3.2": +"fsevents@npm:~2.3.2, fsevents@npm:~2.3.3": version: 2.3.3 resolution: "fsevents@npm:2.3.3" dependencies: @@ -7561,7 +6887,7 @@ __metadata: languageName: node linkType: hard -"fsevents@patch:fsevents@^2.3.2#~builtin, fsevents@patch:fsevents@~2.3.2#~builtin": +"fsevents@patch:fsevents@~2.3.2#~builtin, fsevents@patch:fsevents@~2.3.3#~builtin": version: 2.3.3 resolution: "fsevents@patch:fsevents@npm%3A2.3.3#~builtin::version=2.3.3&hash=18f3a7" dependencies: @@ -7591,20 +6917,20 @@ __metadata: languageName: node linkType: hard -"gensync@npm:^1.0.0-beta.2": - version: 1.0.0-beta.2 - resolution: "gensync@npm:1.0.0-beta.2" - checksum: a7437e58c6be12aa6c90f7730eac7fa9833dc78872b4ad2963d2031b00a3367a93f98aec75f9aaac7220848e4026d67a8655e870b24f20a543d103c0d65952ec - languageName: node - linkType: hard - -"get-caller-file@npm:^2.0.1, get-caller-file@npm:^2.0.5": +"get-caller-file@npm:^2.0.1": version: 2.0.5 resolution: "get-caller-file@npm:2.0.5" checksum: b9769a836d2a98c3ee734a88ba712e62703f1df31b94b784762c433c27a386dd6029ff55c2a920c392e33657d80191edbf18c61487e198844844516f843496b9 languageName: node linkType: hard +"get-func-name@npm:^2.0.1, get-func-name@npm:^2.0.2": + version: 2.0.2 + resolution: "get-func-name@npm:2.0.2" + checksum: 3f62f4c23647de9d46e6f76d2b3eafe58933a9b3830c60669e4180d6c601ce1b4aa310ba8366143f55e52b139f992087a9f0647274e8745621fa2af7e0acf13b + languageName: node + linkType: hard + "get-intrinsic@npm:^1.0.2, get-intrinsic@npm:^1.1.1, get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.0, get-intrinsic@npm:^1.2.1, get-intrinsic@npm:^1.2.2": version: 1.2.2 resolution: "get-intrinsic@npm:1.2.2" @@ -7631,13 +6957,6 @@ __metadata: languageName: node linkType: hard -"get-package-type@npm:^0.1.0": - version: 0.1.0 - resolution: "get-package-type@npm:0.1.0" - checksum: bba0811116d11e56d702682ddef7c73ba3481f114590e705fc549f4d868972263896af313c57a25c076e3c0d567e11d919a64ba1b30c879be985fc9d44f96148 - languageName: node - linkType: hard - "get-stream@npm:^6.0.0": version: 6.0.1 resolution: "get-stream@npm:6.0.1" @@ -7706,20 +7025,6 @@ __metadata: languageName: node linkType: hard -"glob@npm:^7.1.3, glob@npm:^7.1.4": - version: 7.2.3 - resolution: "glob@npm:7.2.3" - dependencies: - fs.realpath: ^1.0.0 - inflight: ^1.0.4 - inherits: 2 - minimatch: ^3.1.1 - once: ^1.3.0 - path-is-absolute: ^1.0.0 - checksum: 29452e97b38fa704dabb1d1045350fb2467cf0277e155aa9ff7077e90ad81d1ea9d53d3ee63bd37c05b09a065e90f16aec4a65f5b8de401d1dac40bc5605d133 - languageName: node - linkType: hard - "globals@npm:^11.1.0": version: 11.12.0 resolution: "globals@npm:11.12.0" @@ -7736,7 +7041,7 @@ __metadata: languageName: node linkType: hard -"graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": +"graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6": version: 4.2.11 resolution: "graceful-fs@npm:4.2.11" checksum: ac85f94da92d8eb6b7f5a8b20ce65e43d66761c55ce85ac96df6865308390da45a8d3f0296dd3a663de65d30ba497bd46c696cc1e248c72b13d6d567138a4fc7 @@ -7893,26 +7198,6 @@ __metadata: languageName: node linkType: hard -"hast-util-parse-selector@npm:^2.0.0": - version: 2.2.5 - resolution: "hast-util-parse-selector@npm:2.2.5" - checksum: 22ee4afbd11754562144cb3c4f3ec52524dafba4d90ee52512902d17cf11066d83b38f7bdf6ca571bbc2541f07ba30db0d234657b6ecb8ca4631587466459605 - languageName: node - linkType: hard - -"hastscript@npm:^6.0.0": - version: 6.0.0 - resolution: "hastscript@npm:6.0.0" - dependencies: - "@types/hast": ^2.0.0 - comma-separated-tokens: ^1.0.0 - hast-util-parse-selector: ^2.0.0 - property-information: ^5.0.0 - space-separated-tokens: ^1.0.0 - checksum: 5e50b85af0d2cb7c17979cb1ddca75d6b96b53019dd999b39e7833192c9004201c3cee6445065620ea05d0087d9ae147a4844e582d64868be5bc6b0232dfe52d - languageName: node - linkType: hard - "hex-rgb@npm:^4.1.0": version: 4.3.0 resolution: "hex-rgb@npm:4.3.0" @@ -7920,13 +7205,6 @@ __metadata: languageName: node linkType: hard -"highlight.js@npm:^10.4.1, highlight.js@npm:~10.7.0": - version: 10.7.3 - resolution: "highlight.js@npm:10.7.3" - checksum: defeafcd546b535d710d8efb8e650af9e3b369ef53e28c3dc7893eacfe263200bba4c5fcf43524ae66d5c0c296b1af0870523ceae3e3104d24b7abf6374a4fea - languageName: node - linkType: hard - "hmac-drbg@npm:^1.0.1": version: 1.0.1 resolution: "hmac-drbg@npm:1.0.1" @@ -7963,22 +7241,6 @@ __metadata: languageName: node linkType: hard -"html-encoding-sniffer@npm:^3.0.0": - version: 3.0.0 - resolution: "html-encoding-sniffer@npm:3.0.0" - dependencies: - whatwg-encoding: ^2.0.0 - checksum: 8d806aa00487e279e5ccb573366a951a9f68f65c90298eac9c3a2b440a7ffe46615aff2995a2f61c6746c639234e6179a97e18ca5ccbbf93d3725ef2099a4502 - languageName: node - linkType: hard - -"html-escaper@npm:^2.0.0": - version: 2.0.2 - resolution: "html-escaper@npm:2.0.2" - checksum: d2df2da3ad40ca9ee3a39c5cc6475ef67c8f83c234475f24d8e9ce0dc80a2c82df8e1d6fa78ddd1e9022a586ea1bd247a615e80a5cd9273d90111ddda7d9e974 - languageName: node - linkType: hard - "html-parse-stringify@npm:^3.0.1": version: 3.0.1 resolution: "html-parse-stringify@npm:3.0.1" @@ -7995,17 +7257,6 @@ __metadata: languageName: node linkType: hard -"http-proxy-agent@npm:^5.0.0": - version: 5.0.0 - resolution: "http-proxy-agent@npm:5.0.0" - dependencies: - "@tootallnate/once": 2 - agent-base: 6 - debug: 4 - checksum: e2ee1ff1656a131953839b2a19cd1f3a52d97c25ba87bd2559af6ae87114abf60971e498021f9b73f9fd78aea8876d1fb0d4656aac8a03c6caa9fc175f22b786 - languageName: node - linkType: hard - "http-proxy-agent@npm:^7.0.0": version: 7.0.0 resolution: "http-proxy-agent@npm:7.0.0" @@ -8016,16 +7267,6 @@ __metadata: languageName: node linkType: hard -"https-proxy-agent@npm:^5.0.1": - version: 5.0.1 - resolution: "https-proxy-agent@npm:5.0.1" - dependencies: - agent-base: 6 - debug: 4 - checksum: 571fccdf38184f05943e12d37d6ce38197becdd69e58d03f43637f7fa1269cf303a7d228aa27e5b27bbd3af8f09fd938e1c91dcfefff2df7ba77c20ed8dfc765 - languageName: node - linkType: hard - "https-proxy-agent@npm:^7.0.1": version: 7.0.2 resolution: "https-proxy-agent@npm:7.0.2" @@ -8084,7 +7325,7 @@ __metadata: languageName: node linkType: hard -"iconv-lite@npm:0.6.3, iconv-lite@npm:^0.6.2": +"iconv-lite@npm:^0.6.2": version: 0.6.3 resolution: "iconv-lite@npm:0.6.3" dependencies: @@ -8121,18 +7362,6 @@ __metadata: languageName: node linkType: hard -"import-local@npm:^3.0.2": - version: 3.1.0 - resolution: "import-local@npm:3.1.0" - dependencies: - pkg-dir: ^4.2.0 - resolve-cwd: ^3.0.0 - bin: - import-local-fixture: fixtures/cli.js - checksum: bfcdb63b5e3c0e245e347f3107564035b128a414c4da1172a20dc67db2504e05ede4ac2eee1252359f78b0bfd7b19ef180aec427c2fce6493ae782d73a04cddd - languageName: node - linkType: hard - "imurmurhash@npm:^0.1.4": version: 0.1.4 resolution: "imurmurhash@npm:0.1.4" @@ -8584,23 +7813,6 @@ __metadata: languageName: node linkType: hard -"is-alphabetical@npm:^1.0.0": - version: 1.0.4 - resolution: "is-alphabetical@npm:1.0.4" - checksum: 6508cce44fd348f06705d377b260974f4ce68c74000e7da4045f0d919e568226dc3ce9685c5a2af272195384df6930f748ce9213fc9f399b5d31b362c66312cb - languageName: node - linkType: hard - -"is-alphanumerical@npm:^1.0.0": - version: 1.0.4 - resolution: "is-alphanumerical@npm:1.0.4" - dependencies: - is-alphabetical: ^1.0.0 - is-decimal: ^1.0.0 - checksum: e2e491acc16fcf5b363f7c726f666a9538dba0a043665740feb45bba1652457a73441e7c5179c6768a638ed396db3437e9905f403644ec7c468fb41f4813d03f - languageName: node - linkType: hard - "is-arguments@npm:^1.0.4, is-arguments@npm:^1.1.1": version: 1.1.1 resolution: "is-arguments@npm:1.1.1" @@ -8696,13 +7908,6 @@ __metadata: languageName: node linkType: hard -"is-decimal@npm:^1.0.0": - version: 1.0.4 - resolution: "is-decimal@npm:1.0.4" - checksum: ed483a387517856dc395c68403a10201fddcc1b63dc56513fbe2fe86ab38766120090ecdbfed89223d84ca8b1cd28b0641b93cb6597b6e8f4c097a7c24e3fb96 - languageName: node - linkType: hard - "is-electron@npm:^2.2.0": version: 2.2.2 resolution: "is-electron@npm:2.2.2" @@ -8724,13 +7929,6 @@ __metadata: languageName: node linkType: hard -"is-generator-fn@npm:^2.0.0": - version: 2.1.0 - resolution: "is-generator-fn@npm:2.1.0" - checksum: a6ad5492cf9d1746f73b6744e0c43c0020510b59d56ddcb78a91cbc173f09b5e6beff53d75c9c5a29feb618bfef2bf458e025ecf3a57ad2268e2fb2569f56215 - languageName: node - linkType: hard - "is-generator-function@npm:^1.0.7": version: 1.0.10 resolution: "is-generator-function@npm:1.0.10" @@ -8756,13 +7954,6 @@ __metadata: languageName: node linkType: hard -"is-hexadecimal@npm:^1.0.0": - version: 1.0.4 - resolution: "is-hexadecimal@npm:1.0.4" - checksum: a452e047587b6069332d83130f54d30da4faf2f2ebaa2ce6d073c27b5703d030d58ed9e0b729c8e4e5b52c6f1dab26781bb77b7bc6c7805f14f320e328ff8cd5 - languageName: node - linkType: hard - "is-ip@npm:^3.1.0": version: 3.1.0 resolution: "is-ip@npm:3.1.0" @@ -8826,13 +8017,6 @@ __metadata: languageName: node linkType: hard -"is-potential-custom-element-name@npm:^1.0.1": - version: 1.0.1 - resolution: "is-potential-custom-element-name@npm:1.0.1" - checksum: ced7bbbb6433a5b684af581872afe0e1767e2d1146b2207ca0068a648fb5cab9d898495d1ac0583524faaf24ca98176a7d9876363097c2d14fee6dd324f3a1ab - languageName: node - linkType: hard - "is-regex@npm:^1.0.4, is-regex@npm:^1.1.4": version: 1.1.4 resolution: "is-regex@npm:1.1.4" @@ -8995,71 +8179,6 @@ __metadata: languageName: node linkType: hard -"istanbul-lib-coverage@npm:^3.0.0, istanbul-lib-coverage@npm:^3.2.0": - version: 3.2.0 - resolution: "istanbul-lib-coverage@npm:3.2.0" - checksum: a2a545033b9d56da04a8571ed05c8120bf10e9bce01cf8633a3a2b0d1d83dff4ac4fe78d6d5673c27fc29b7f21a41d75f83a36be09f82a61c367b56aa73c1ff9 - languageName: node - linkType: hard - -"istanbul-lib-instrument@npm:^5.0.4": - version: 5.2.1 - resolution: "istanbul-lib-instrument@npm:5.2.1" - dependencies: - "@babel/core": ^7.12.3 - "@babel/parser": ^7.14.7 - "@istanbuljs/schema": ^0.1.2 - istanbul-lib-coverage: ^3.2.0 - semver: ^6.3.0 - checksum: bf16f1803ba5e51b28bbd49ed955a736488381e09375d830e42ddeb403855b2006f850711d95ad726f2ba3f1ae8e7366de7e51d2b9ac67dc4d80191ef7ddf272 - languageName: node - linkType: hard - -"istanbul-lib-instrument@npm:^6.0.0": - version: 6.0.1 - resolution: "istanbul-lib-instrument@npm:6.0.1" - dependencies: - "@babel/core": ^7.12.3 - "@babel/parser": ^7.14.7 - "@istanbuljs/schema": ^0.1.2 - istanbul-lib-coverage: ^3.2.0 - semver: ^7.5.4 - checksum: fb23472e739cfc9b027cefcd7d551d5e7ca7ff2817ae5150fab99fe42786a7f7b56a29a2aa8309c37092e18297b8003f9c274f50ca4360949094d17fbac81472 - languageName: node - linkType: hard - -"istanbul-lib-report@npm:^3.0.0": - version: 3.0.1 - resolution: "istanbul-lib-report@npm:3.0.1" - dependencies: - istanbul-lib-coverage: ^3.0.0 - make-dir: ^4.0.0 - supports-color: ^7.1.0 - checksum: fd17a1b879e7faf9bb1dc8f80b2a16e9f5b7b8498fe6ed580a618c34df0bfe53d2abd35bf8a0a00e628fb7405462576427c7df20bbe4148d19c14b431c974b21 - languageName: node - linkType: hard - -"istanbul-lib-source-maps@npm:^4.0.0": - version: 4.0.1 - resolution: "istanbul-lib-source-maps@npm:4.0.1" - dependencies: - debug: ^4.1.1 - istanbul-lib-coverage: ^3.0.0 - source-map: ^0.6.1 - checksum: 21ad3df45db4b81852b662b8d4161f6446cd250c1ddc70ef96a585e2e85c26ed7cd9c2a396a71533cfb981d1a645508bc9618cae431e55d01a0628e7dec62ef2 - languageName: node - linkType: hard - -"istanbul-reports@npm:^3.1.3": - version: 3.1.6 - resolution: "istanbul-reports@npm:3.1.6" - dependencies: - html-escaper: ^2.0.0 - istanbul-lib-report: ^3.0.0 - checksum: 44c4c0582f287f02341e9720997f9e82c071627e1e862895745d5f52ec72c9b9f38e1d12370015d2a71dcead794f34c7732aaef3fab80a24bc617a21c3d911d6 - languageName: node - linkType: hard - "it-all@npm:^1.0.4, it-all@npm:^1.0.5": version: 1.0.6 resolution: "it-all@npm:1.0.6" @@ -9138,609 +8257,149 @@ __metadata: languageName: node linkType: hard -"it-map@npm:^1.0.4": - version: 1.0.6 - resolution: "it-map@npm:1.0.6" - checksum: 5eb9da69e5d58624c79cea13dd8eeffe8a1ab6a28a527ac4d0301304279ffbe8da94faf50aa269e2a1630c94dc30a6bfe7a135bfb0c7e887216efad7c41a9f52 - languageName: node - linkType: hard - -"it-map@npm:^2.0.0": - version: 2.0.1 - resolution: "it-map@npm:2.0.1" - checksum: d4309872e506c0eb33d9ab71ff12e31bb2a7234643d315b69320cc5adc74faaa96af81a200a5c95206041f7da2c7744e478e1278cd6f6018caaea2292d670d4a - languageName: node - linkType: hard - -"it-parallel-batch@npm:^1.0.9": - version: 1.0.11 - resolution: "it-parallel-batch@npm:1.0.11" - dependencies: - it-batch: ^1.0.9 - checksum: 4c4ad170e95f584c70a83ed39b582d1c574c24830242afbbcc948c151b6a0a7c9cff7067680b8b850662a2b52850c40e3b3ed765cf2027f92e01ce3e0f15bce3 - languageName: node - linkType: hard - -"it-peekable@npm:^1.0.1": - version: 1.0.3 - resolution: "it-peekable@npm:1.0.3" - checksum: 6e9d68cbf582e301f191b8ad2660957c12c8100804a298fd5732ee35f2dd466a6af64d88d91343f2614675b4d4fb546618335303e9356659a9a0868c08b1ca54 - languageName: node - linkType: hard - -"it-peekable@npm:^2.0.0": - version: 2.0.1 - resolution: "it-peekable@npm:2.0.1" - checksum: 4641c34ccbba19cbc25af89522e14e803528bf26cb684c87d05405ccbdc652fbdad64ab596335b364198fdb2f0d4d9446fa1a8f85b21e1c4def7853c7343a12e - languageName: node - linkType: hard - -"it-pushable@npm:^3.0.0, it-pushable@npm:^3.2.0": - version: 3.2.1 - resolution: "it-pushable@npm:3.2.1" - dependencies: - p-defer: ^4.0.0 - checksum: a23eaac8d1ec86785d0f3e71c67f1544cb1b99aff88c70d3043f3b87a9966c154ca387de76739f91dd744cd7815b40d20e9711a54079cc7ddaf36be54fd10c41 - languageName: node - linkType: hard - -"it-reader@npm:^2.0.0": - version: 2.1.0 - resolution: "it-reader@npm:2.1.0" - dependencies: - bl: ^4.0.0 - checksum: abfce087d17a422a514ba8dcd56bb51b26958cd61bed1d64121dd4133e3513fbd0c5d816461ee9173361c49f6ce3a3c14505af22a299d9a011b3186a97f0dcc2 - languageName: node - linkType: hard - -"it-stream-types@npm:^1.0.4": - version: 1.0.5 - resolution: "it-stream-types@npm:1.0.5" - checksum: 6a94443cd044e26f60c6eccb03f91ac5ffda3ab564f61f3cd36f497e7d33c249b6d74e5cb3b88d63350e864c75e24f20a75149f81533f5d5537cf1ed89751ba7 - languageName: node - linkType: hard - -"it-stream-types@npm:^2.0.1": - version: 2.0.1 - resolution: "it-stream-types@npm:2.0.1" - checksum: 14c5a13dbef08ae3a9b824ae9d05a8f3eb25ef46994ede25f763472f8367498395bd4be13c88b93846fd4b56c9a4763beb268ef8fa26575b17ef8f9327f9bf77 - languageName: node - linkType: hard - -"it-tar@npm:^1.2.2": - version: 1.2.2 - resolution: "it-tar@npm:1.2.2" - dependencies: - bl: ^4.0.0 - buffer: ^5.4.3 - iso-constants: ^0.1.2 - it-concat: ^1.0.0 - it-reader: ^2.0.0 - p-defer: ^3.0.0 - checksum: e6c92f90ec188f344541d2ea16d461d45c9a52c8dc0807ade3b4bfa44b07cc5f5c6b4118748cbf96ae94f45a52498519cecfb6f3a2eb92a781357c9b8cc32ec4 - languageName: node - linkType: hard - -"it-to-stream@npm:^0.1.2": - version: 0.1.2 - resolution: "it-to-stream@npm:0.1.2" - dependencies: - buffer: ^5.6.0 - fast-fifo: ^1.0.0 - get-iterator: ^1.0.2 - p-defer: ^3.0.0 - p-fifo: ^1.0.0 - readable-stream: ^3.6.0 - checksum: 20f715c6bc6cb284170b92ac4c0e5e3d3f9530085bd256f78c7c423768d273cb1bdc874aae557587e28398e50c9efeec1d79fef9a61a7f542a9697065935e876 - languageName: node - linkType: hard - -"it-to-stream@npm:^1.0.0": - version: 1.0.0 - resolution: "it-to-stream@npm:1.0.0" - dependencies: - buffer: ^6.0.3 - fast-fifo: ^1.0.0 - get-iterator: ^1.0.2 - p-defer: ^3.0.0 - p-fifo: ^1.0.0 - readable-stream: ^3.6.0 - checksum: e0c5a3f3c90d4bc52686217865b8fa202f64bd3af493dec0fdacd58b4237166fb68935ff2823ed0a16414ba5becb9a5fb8c98f3ec99584789776d7277c1d129f - languageName: node - linkType: hard - -"jackspeak@npm:^2.3.5": - version: 2.3.6 - resolution: "jackspeak@npm:2.3.6" - dependencies: - "@isaacs/cliui": ^8.0.2 - "@pkgjs/parseargs": ^0.11.0 - dependenciesMeta: - "@pkgjs/parseargs": - optional: true - checksum: 57d43ad11eadc98cdfe7496612f6bbb5255ea69fe51ea431162db302c2a11011642f50cfad57288bd0aea78384a0612b16e131944ad8ecd09d619041c8531b54 - languageName: node - linkType: hard - -"jayson@npm:^4.1.0": - version: 4.1.0 - resolution: "jayson@npm:4.1.0" - dependencies: - "@types/connect": ^3.4.33 - "@types/node": ^12.12.54 - "@types/ws": ^7.4.4 - JSONStream: ^1.3.5 - commander: ^2.20.3 - delay: ^5.0.0 - es6-promisify: ^5.0.0 - eyes: ^0.1.8 - isomorphic-ws: ^4.0.1 - json-stringify-safe: ^5.0.1 - uuid: ^8.3.2 - ws: ^7.4.5 - bin: - jayson: bin/jayson.js - checksum: 86464322fbdc6db65d2bb4fc278cb6c86fad5c2a506065490d39459f09ba0d30f2b4fb740b33828a1424791419b6c8bd295dc54d361a4ad959bf70cc62b1ca7e - languageName: node - linkType: hard - -"jest-changed-files@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-changed-files@npm:29.7.0" - dependencies: - execa: ^5.0.0 - jest-util: ^29.7.0 - p-limit: ^3.1.0 - checksum: 963e203893c396c5dfc75e00a49426688efea7361b0f0e040035809cecd2d46b3c01c02be2d9e8d38b1138357d2de7719ea5b5be21f66c10f2e9685a5a73bb99 - languageName: node - linkType: hard - -"jest-circus@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-circus@npm:29.7.0" - dependencies: - "@jest/environment": ^29.7.0 - "@jest/expect": ^29.7.0 - "@jest/test-result": ^29.7.0 - "@jest/types": ^29.6.3 - "@types/node": "*" - chalk: ^4.0.0 - co: ^4.6.0 - dedent: ^1.0.0 - is-generator-fn: ^2.0.0 - jest-each: ^29.7.0 - jest-matcher-utils: ^29.7.0 - jest-message-util: ^29.7.0 - jest-runtime: ^29.7.0 - jest-snapshot: ^29.7.0 - jest-util: ^29.7.0 - p-limit: ^3.1.0 - pretty-format: ^29.7.0 - pure-rand: ^6.0.0 - slash: ^3.0.0 - stack-utils: ^2.0.3 - checksum: 349437148924a5a109c9b8aad6d393a9591b4dac1918fc97d81b7fc515bc905af9918495055071404af1fab4e48e4b04ac3593477b1d5dcf48c4e71b527c70a7 - languageName: node - linkType: hard - -"jest-cli@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-cli@npm:29.7.0" - dependencies: - "@jest/core": ^29.7.0 - "@jest/test-result": ^29.7.0 - "@jest/types": ^29.6.3 - chalk: ^4.0.0 - create-jest: ^29.7.0 - exit: ^0.1.2 - import-local: ^3.0.2 - jest-config: ^29.7.0 - jest-util: ^29.7.0 - jest-validate: ^29.7.0 - yargs: ^17.3.1 - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - bin: - jest: bin/jest.js - checksum: 664901277a3f5007ea4870632ed6e7889db9da35b2434e7cb488443e6bf5513889b344b7fddf15112135495b9875892b156faeb2d7391ddb9e2a849dcb7b6c36 - languageName: node - linkType: hard - -"jest-config@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-config@npm:29.7.0" - dependencies: - "@babel/core": ^7.11.6 - "@jest/test-sequencer": ^29.7.0 - "@jest/types": ^29.6.3 - babel-jest: ^29.7.0 - chalk: ^4.0.0 - ci-info: ^3.2.0 - deepmerge: ^4.2.2 - glob: ^7.1.3 - graceful-fs: ^4.2.9 - jest-circus: ^29.7.0 - jest-environment-node: ^29.7.0 - jest-get-type: ^29.6.3 - jest-regex-util: ^29.6.3 - jest-resolve: ^29.7.0 - jest-runner: ^29.7.0 - jest-util: ^29.7.0 - jest-validate: ^29.7.0 - micromatch: ^4.0.4 - parse-json: ^5.2.0 - pretty-format: ^29.7.0 - slash: ^3.0.0 - strip-json-comments: ^3.1.1 - peerDependencies: - "@types/node": "*" - ts-node: ">=9.0.0" - peerDependenciesMeta: - "@types/node": - optional: true - ts-node: - optional: true - checksum: 4cabf8f894c180cac80b7df1038912a3fc88f96f2622de33832f4b3314f83e22b08fb751da570c0ab2b7988f21604bdabade95e3c0c041068ac578c085cf7dff - languageName: node - linkType: hard - -"jest-diff@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-diff@npm:29.7.0" - dependencies: - chalk: ^4.0.0 - diff-sequences: ^29.6.3 - jest-get-type: ^29.6.3 - pretty-format: ^29.7.0 - checksum: 08e24a9dd43bfba1ef07a6374e5af138f53137b79ec3d5cc71a2303515335898888fa5409959172e1e05de966c9e714368d15e8994b0af7441f0721ee8e1bb77 - languageName: node - linkType: hard - -"jest-docblock@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-docblock@npm:29.7.0" - dependencies: - detect-newline: ^3.0.0 - checksum: 66390c3e9451f8d96c5da62f577a1dad701180cfa9b071c5025acab2f94d7a3efc2515cfa1654ebe707213241541ce9c5530232cdc8017c91ed64eea1bd3b192 - languageName: node - linkType: hard - -"jest-each@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-each@npm:29.7.0" - dependencies: - "@jest/types": ^29.6.3 - chalk: ^4.0.0 - jest-get-type: ^29.6.3 - jest-util: ^29.7.0 - pretty-format: ^29.7.0 - checksum: e88f99f0184000fc8813f2a0aa79e29deeb63700a3b9b7928b8a418d7d93cd24933608591dbbdea732b473eb2021c72991b5cc51a17966842841c6e28e6f691c - languageName: node - linkType: hard - -"jest-environment-jsdom@npm:^29.5.0": - version: 29.7.0 - resolution: "jest-environment-jsdom@npm:29.7.0" - dependencies: - "@jest/environment": ^29.7.0 - "@jest/fake-timers": ^29.7.0 - "@jest/types": ^29.6.3 - "@types/jsdom": ^20.0.0 - "@types/node": "*" - jest-mock: ^29.7.0 - jest-util: ^29.7.0 - jsdom: ^20.0.0 - peerDependencies: - canvas: ^2.5.0 - peerDependenciesMeta: - canvas: - optional: true - checksum: 559aac134c196fccc1dfc794d8fc87377e9f78e894bb13012b0831d88dec0abd7ece99abec69da564b8073803be4f04a9eb4f4d1bb80e29eec0cb252c254deb8 - languageName: node - linkType: hard - -"jest-environment-node@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-environment-node@npm:29.7.0" - dependencies: - "@jest/environment": ^29.7.0 - "@jest/fake-timers": ^29.7.0 - "@jest/types": ^29.6.3 - "@types/node": "*" - jest-mock: ^29.7.0 - jest-util: ^29.7.0 - checksum: 501a9966292cbe0ca3f40057a37587cb6def25e1e0c5e39ac6c650fe78d3c70a2428304341d084ac0cced5041483acef41c477abac47e9a290d5545fd2f15646 - languageName: node - linkType: hard - -"jest-get-type@npm:^29.6.3": - version: 29.6.3 - resolution: "jest-get-type@npm:29.6.3" - checksum: 88ac9102d4679d768accae29f1e75f592b760b44277df288ad76ce5bf038c3f5ce3719dea8aa0f035dac30e9eb034b848ce716b9183ad7cc222d029f03e92205 +"it-map@npm:^1.0.4": + version: 1.0.6 + resolution: "it-map@npm:1.0.6" + checksum: 5eb9da69e5d58624c79cea13dd8eeffe8a1ab6a28a527ac4d0301304279ffbe8da94faf50aa269e2a1630c94dc30a6bfe7a135bfb0c7e887216efad7c41a9f52 languageName: node linkType: hard -"jest-haste-map@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-haste-map@npm:29.7.0" - dependencies: - "@jest/types": ^29.6.3 - "@types/graceful-fs": ^4.1.3 - "@types/node": "*" - anymatch: ^3.0.3 - fb-watchman: ^2.0.0 - fsevents: ^2.3.2 - graceful-fs: ^4.2.9 - jest-regex-util: ^29.6.3 - jest-util: ^29.7.0 - jest-worker: ^29.7.0 - micromatch: ^4.0.4 - walker: ^1.0.8 - dependenciesMeta: - fsevents: - optional: true - checksum: c2c8f2d3e792a963940fbdfa563ce14ef9e14d4d86da645b96d3cd346b8d35c5ce0b992ee08593939b5f718cf0a1f5a90011a056548a1dbf58397d4356786f01 +"it-map@npm:^2.0.0": + version: 2.0.1 + resolution: "it-map@npm:2.0.1" + checksum: d4309872e506c0eb33d9ab71ff12e31bb2a7234643d315b69320cc5adc74faaa96af81a200a5c95206041f7da2c7744e478e1278cd6f6018caaea2292d670d4a languageName: node linkType: hard -"jest-leak-detector@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-leak-detector@npm:29.7.0" +"it-parallel-batch@npm:^1.0.9": + version: 1.0.11 + resolution: "it-parallel-batch@npm:1.0.11" dependencies: - jest-get-type: ^29.6.3 - pretty-format: ^29.7.0 - checksum: e3950e3ddd71e1d0c22924c51a300a1c2db6cf69ec1e51f95ccf424bcc070f78664813bef7aed4b16b96dfbdeea53fe358f8aeaaea84346ae15c3735758f1605 + it-batch: ^1.0.9 + checksum: 4c4ad170e95f584c70a83ed39b582d1c574c24830242afbbcc948c151b6a0a7c9cff7067680b8b850662a2b52850c40e3b3ed765cf2027f92e01ce3e0f15bce3 languageName: node linkType: hard -"jest-matcher-utils@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-matcher-utils@npm:29.7.0" - dependencies: - chalk: ^4.0.0 - jest-diff: ^29.7.0 - jest-get-type: ^29.6.3 - pretty-format: ^29.7.0 - checksum: d7259e5f995d915e8a37a8fd494cb7d6af24cd2a287b200f831717ba0d015190375f9f5dc35393b8ba2aae9b2ebd60984635269c7f8cff7d85b077543b7744cd +"it-peekable@npm:^1.0.1": + version: 1.0.3 + resolution: "it-peekable@npm:1.0.3" + checksum: 6e9d68cbf582e301f191b8ad2660957c12c8100804a298fd5732ee35f2dd466a6af64d88d91343f2614675b4d4fb546618335303e9356659a9a0868c08b1ca54 languageName: node linkType: hard -"jest-message-util@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-message-util@npm:29.7.0" - dependencies: - "@babel/code-frame": ^7.12.13 - "@jest/types": ^29.6.3 - "@types/stack-utils": ^2.0.0 - chalk: ^4.0.0 - graceful-fs: ^4.2.9 - micromatch: ^4.0.4 - pretty-format: ^29.7.0 - slash: ^3.0.0 - stack-utils: ^2.0.3 - checksum: a9d025b1c6726a2ff17d54cc694de088b0489456c69106be6b615db7a51b7beb66788bea7a59991a019d924fbf20f67d085a445aedb9a4d6760363f4d7d09930 +"it-peekable@npm:^2.0.0": + version: 2.0.1 + resolution: "it-peekable@npm:2.0.1" + checksum: 4641c34ccbba19cbc25af89522e14e803528bf26cb684c87d05405ccbdc652fbdad64ab596335b364198fdb2f0d4d9446fa1a8f85b21e1c4def7853c7343a12e languageName: node linkType: hard -"jest-mock@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-mock@npm:29.7.0" +"it-pushable@npm:^3.0.0, it-pushable@npm:^3.2.0": + version: 3.2.1 + resolution: "it-pushable@npm:3.2.1" dependencies: - "@jest/types": ^29.6.3 - "@types/node": "*" - jest-util: ^29.7.0 - checksum: 81ba9b68689a60be1482212878973700347cb72833c5e5af09895882b9eb5c4e02843a1bbdf23f94c52d42708bab53a30c45a3482952c9eec173d1eaac5b86c5 - languageName: node - linkType: hard - -"jest-pnp-resolver@npm:^1.2.2": - version: 1.2.3 - resolution: "jest-pnp-resolver@npm:1.2.3" - peerDependencies: - jest-resolve: "*" - peerDependenciesMeta: - jest-resolve: - optional: true - checksum: db1a8ab2cb97ca19c01b1cfa9a9c8c69a143fde833c14df1fab0766f411b1148ff0df878adea09007ac6a2085ec116ba9a996a6ad104b1e58c20adbf88eed9b2 + p-defer: ^4.0.0 + checksum: a23eaac8d1ec86785d0f3e71c67f1544cb1b99aff88c70d3043f3b87a9966c154ca387de76739f91dd744cd7815b40d20e9711a54079cc7ddaf36be54fd10c41 languageName: node linkType: hard -"jest-regex-util@npm:^29.6.3": - version: 29.6.3 - resolution: "jest-regex-util@npm:29.6.3" - checksum: 0518beeb9bf1228261695e54f0feaad3606df26a19764bc19541e0fc6e2a3737191904607fb72f3f2ce85d9c16b28df79b7b1ec9443aa08c3ef0e9efda6f8f2a +"it-reader@npm:^2.0.0": + version: 2.1.0 + resolution: "it-reader@npm:2.1.0" + dependencies: + bl: ^4.0.0 + checksum: abfce087d17a422a514ba8dcd56bb51b26958cd61bed1d64121dd4133e3513fbd0c5d816461ee9173361c49f6ce3a3c14505af22a299d9a011b3186a97f0dcc2 languageName: node linkType: hard -"jest-resolve-dependencies@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-resolve-dependencies@npm:29.7.0" - dependencies: - jest-regex-util: ^29.6.3 - jest-snapshot: ^29.7.0 - checksum: aeb75d8150aaae60ca2bb345a0d198f23496494677cd6aefa26fc005faf354061f073982175daaf32b4b9d86b26ca928586344516e3e6969aa614cb13b883984 +"it-stream-types@npm:^1.0.4": + version: 1.0.5 + resolution: "it-stream-types@npm:1.0.5" + checksum: 6a94443cd044e26f60c6eccb03f91ac5ffda3ab564f61f3cd36f497e7d33c249b6d74e5cb3b88d63350e864c75e24f20a75149f81533f5d5537cf1ed89751ba7 languageName: node linkType: hard -"jest-resolve@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-resolve@npm:29.7.0" - dependencies: - chalk: ^4.0.0 - graceful-fs: ^4.2.9 - jest-haste-map: ^29.7.0 - jest-pnp-resolver: ^1.2.2 - jest-util: ^29.7.0 - jest-validate: ^29.7.0 - resolve: ^1.20.0 - resolve.exports: ^2.0.0 - slash: ^3.0.0 - checksum: 0ca218e10731aa17920526ec39deaec59ab9b966237905ffc4545444481112cd422f01581230eceb7e82d86f44a543d520a71391ec66e1b4ef1a578bd5c73487 +"it-stream-types@npm:^2.0.1": + version: 2.0.1 + resolution: "it-stream-types@npm:2.0.1" + checksum: 14c5a13dbef08ae3a9b824ae9d05a8f3eb25ef46994ede25f763472f8367498395bd4be13c88b93846fd4b56c9a4763beb268ef8fa26575b17ef8f9327f9bf77 languageName: node linkType: hard -"jest-runner@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-runner@npm:29.7.0" - dependencies: - "@jest/console": ^29.7.0 - "@jest/environment": ^29.7.0 - "@jest/test-result": ^29.7.0 - "@jest/transform": ^29.7.0 - "@jest/types": ^29.6.3 - "@types/node": "*" - chalk: ^4.0.0 - emittery: ^0.13.1 - graceful-fs: ^4.2.9 - jest-docblock: ^29.7.0 - jest-environment-node: ^29.7.0 - jest-haste-map: ^29.7.0 - jest-leak-detector: ^29.7.0 - jest-message-util: ^29.7.0 - jest-resolve: ^29.7.0 - jest-runtime: ^29.7.0 - jest-util: ^29.7.0 - jest-watcher: ^29.7.0 - jest-worker: ^29.7.0 - p-limit: ^3.1.0 - source-map-support: 0.5.13 - checksum: f0405778ea64812bf9b5c50b598850d94ccf95d7ba21f090c64827b41decd680ee19fcbb494007cdd7f5d0d8906bfc9eceddd8fa583e753e736ecd462d4682fb - languageName: node - linkType: hard - -"jest-runtime@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-runtime@npm:29.7.0" - dependencies: - "@jest/environment": ^29.7.0 - "@jest/fake-timers": ^29.7.0 - "@jest/globals": ^29.7.0 - "@jest/source-map": ^29.6.3 - "@jest/test-result": ^29.7.0 - "@jest/transform": ^29.7.0 - "@jest/types": ^29.6.3 - "@types/node": "*" - chalk: ^4.0.0 - cjs-module-lexer: ^1.0.0 - collect-v8-coverage: ^1.0.0 - glob: ^7.1.3 - graceful-fs: ^4.2.9 - jest-haste-map: ^29.7.0 - jest-message-util: ^29.7.0 - jest-mock: ^29.7.0 - jest-regex-util: ^29.6.3 - jest-resolve: ^29.7.0 - jest-snapshot: ^29.7.0 - jest-util: ^29.7.0 - slash: ^3.0.0 - strip-bom: ^4.0.0 - checksum: d19f113d013e80691e07047f68e1e3448ef024ff2c6b586ce4f90cd7d4c62a2cd1d460110491019719f3c59bfebe16f0e201ed005ef9f80e2cf798c374eed54e - languageName: node - linkType: hard - -"jest-snapshot@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-snapshot@npm:29.7.0" - dependencies: - "@babel/core": ^7.11.6 - "@babel/generator": ^7.7.2 - "@babel/plugin-syntax-jsx": ^7.7.2 - "@babel/plugin-syntax-typescript": ^7.7.2 - "@babel/types": ^7.3.3 - "@jest/expect-utils": ^29.7.0 - "@jest/transform": ^29.7.0 - "@jest/types": ^29.6.3 - babel-preset-current-node-syntax: ^1.0.0 - chalk: ^4.0.0 - expect: ^29.7.0 - graceful-fs: ^4.2.9 - jest-diff: ^29.7.0 - jest-get-type: ^29.6.3 - jest-matcher-utils: ^29.7.0 - jest-message-util: ^29.7.0 - jest-util: ^29.7.0 - natural-compare: ^1.4.0 - pretty-format: ^29.7.0 - semver: ^7.5.3 - checksum: 86821c3ad0b6899521ce75ee1ae7b01b17e6dfeff9166f2cf17f012e0c5d8c798f30f9e4f8f7f5bed01ea7b55a6bc159f5eda778311162cbfa48785447c237ad - languageName: node - linkType: hard - -"jest-util@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-util@npm:29.7.0" +"it-tar@npm:^1.2.2": + version: 1.2.2 + resolution: "it-tar@npm:1.2.2" dependencies: - "@jest/types": ^29.6.3 - "@types/node": "*" - chalk: ^4.0.0 - ci-info: ^3.2.0 - graceful-fs: ^4.2.9 - picomatch: ^2.2.3 - checksum: 042ab4980f4ccd4d50226e01e5c7376a8556b472442ca6091a8f102488c0f22e6e8b89ea874111d2328a2080083bf3225c86f3788c52af0bd0345a00eb57a3ca + bl: ^4.0.0 + buffer: ^5.4.3 + iso-constants: ^0.1.2 + it-concat: ^1.0.0 + it-reader: ^2.0.0 + p-defer: ^3.0.0 + checksum: e6c92f90ec188f344541d2ea16d461d45c9a52c8dc0807ade3b4bfa44b07cc5f5c6b4118748cbf96ae94f45a52498519cecfb6f3a2eb92a781357c9b8cc32ec4 languageName: node linkType: hard -"jest-validate@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-validate@npm:29.7.0" +"it-to-stream@npm:^0.1.2": + version: 0.1.2 + resolution: "it-to-stream@npm:0.1.2" dependencies: - "@jest/types": ^29.6.3 - camelcase: ^6.2.0 - chalk: ^4.0.0 - jest-get-type: ^29.6.3 - leven: ^3.1.0 - pretty-format: ^29.7.0 - checksum: 191fcdc980f8a0de4dbdd879fa276435d00eb157a48683af7b3b1b98b0f7d9de7ffe12689b617779097ff1ed77601b9f7126b0871bba4f776e222c40f62e9dae + buffer: ^5.6.0 + fast-fifo: ^1.0.0 + get-iterator: ^1.0.2 + p-defer: ^3.0.0 + p-fifo: ^1.0.0 + readable-stream: ^3.6.0 + checksum: 20f715c6bc6cb284170b92ac4c0e5e3d3f9530085bd256f78c7c423768d273cb1bdc874aae557587e28398e50c9efeec1d79fef9a61a7f542a9697065935e876 languageName: node linkType: hard -"jest-watcher@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-watcher@npm:29.7.0" +"it-to-stream@npm:^1.0.0": + version: 1.0.0 + resolution: "it-to-stream@npm:1.0.0" dependencies: - "@jest/test-result": ^29.7.0 - "@jest/types": ^29.6.3 - "@types/node": "*" - ansi-escapes: ^4.2.1 - chalk: ^4.0.0 - emittery: ^0.13.1 - jest-util: ^29.7.0 - string-length: ^4.0.1 - checksum: 67e6e7fe695416deff96b93a14a561a6db69389a0667e9489f24485bb85e5b54e12f3b2ba511ec0b777eca1e727235b073e3ebcdd473d68888650489f88df92f + buffer: ^6.0.3 + fast-fifo: ^1.0.0 + get-iterator: ^1.0.2 + p-defer: ^3.0.0 + p-fifo: ^1.0.0 + readable-stream: ^3.6.0 + checksum: e0c5a3f3c90d4bc52686217865b8fa202f64bd3af493dec0fdacd58b4237166fb68935ff2823ed0a16414ba5becb9a5fb8c98f3ec99584789776d7277c1d129f languageName: node linkType: hard -"jest-worker@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-worker@npm:29.7.0" +"jackspeak@npm:^2.3.5": + version: 2.3.6 + resolution: "jackspeak@npm:2.3.6" dependencies: - "@types/node": "*" - jest-util: ^29.7.0 - merge-stream: ^2.0.0 - supports-color: ^8.0.0 - checksum: 30fff60af49675273644d408b650fc2eb4b5dcafc5a0a455f238322a8f9d8a98d847baca9d51ff197b6747f54c7901daa2287799230b856a0f48287d131f8c13 + "@isaacs/cliui": ^8.0.2 + "@pkgjs/parseargs": ^0.11.0 + dependenciesMeta: + "@pkgjs/parseargs": + optional: true + checksum: 57d43ad11eadc98cdfe7496612f6bbb5255ea69fe51ea431162db302c2a11011642f50cfad57288bd0aea78384a0612b16e131944ad8ecd09d619041c8531b54 languageName: node linkType: hard -"jest@npm:^29.5.0": - version: 29.7.0 - resolution: "jest@npm:29.7.0" +"jayson@npm:^4.1.0": + version: 4.1.0 + resolution: "jayson@npm:4.1.0" dependencies: - "@jest/core": ^29.7.0 - "@jest/types": ^29.6.3 - import-local: ^3.0.2 - jest-cli: ^29.7.0 - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true + "@types/connect": ^3.4.33 + "@types/node": ^12.12.54 + "@types/ws": ^7.4.4 + JSONStream: ^1.3.5 + commander: ^2.20.3 + delay: ^5.0.0 + es6-promisify: ^5.0.0 + eyes: ^0.1.8 + isomorphic-ws: ^4.0.1 + json-stringify-safe: ^5.0.1 + uuid: ^8.3.2 + ws: ^7.4.5 bin: - jest: bin/jest.js - checksum: 17ca8d67504a7dbb1998cf3c3077ec9031ba3eb512da8d71cb91bcabb2b8995c4e4b292b740cb9bf1cbff5ce3e110b3f7c777b0cefb6f41ab05445f248d0ee0b + jayson: bin/jayson.js + checksum: 86464322fbdc6db65d2bb4fc278cb6c86fad5c2a506065490d39459f09ba0d30f2b4fb740b33828a1424791419b6c8bd295dc54d361a4ad959bf70cc62b1ca7e languageName: node linkType: hard @@ -9848,57 +8507,6 @@ __metadata: languageName: node linkType: hard -"js-yaml@npm:^3.13.1": - version: 3.14.1 - resolution: "js-yaml@npm:3.14.1" - dependencies: - argparse: ^1.0.7 - esprima: ^4.0.0 - bin: - js-yaml: bin/js-yaml.js - checksum: bef146085f472d44dee30ec34e5cf36bf89164f5d585435a3d3da89e52622dff0b188a580e4ad091c3341889e14cb88cac6e4deb16dc5b1e9623bb0601fc255c - languageName: node - linkType: hard - -"jsdom@npm:^20.0.0": - version: 20.0.3 - resolution: "jsdom@npm:20.0.3" - dependencies: - abab: ^2.0.6 - acorn: ^8.8.1 - acorn-globals: ^7.0.0 - cssom: ^0.5.0 - cssstyle: ^2.3.0 - data-urls: ^3.0.2 - decimal.js: ^10.4.2 - domexception: ^4.0.0 - escodegen: ^2.0.0 - form-data: ^4.0.0 - html-encoding-sniffer: ^3.0.0 - http-proxy-agent: ^5.0.0 - https-proxy-agent: ^5.0.1 - is-potential-custom-element-name: ^1.0.1 - nwsapi: ^2.2.2 - parse5: ^7.1.1 - saxes: ^6.0.0 - symbol-tree: ^3.2.4 - tough-cookie: ^4.1.2 - w3c-xmlserializer: ^4.0.0 - webidl-conversions: ^7.0.0 - whatwg-encoding: ^2.0.0 - whatwg-mimetype: ^3.0.0 - whatwg-url: ^11.0.0 - ws: ^8.11.0 - xml-name-validator: ^4.0.0 - peerDependencies: - canvas: ^2.5.0 - peerDependenciesMeta: - canvas: - optional: true - checksum: 6e2ae21db397133a061b270c26d2dbc0b9051733ea3b896a7ece78d79f475ff0974f766a413c1198a79c793159119169f2335ddb23150348fbfdcfa6f3105536 - languageName: node - linkType: hard - "jsesc@npm:^2.5.1": version: 2.5.2 resolution: "jsesc@npm:2.5.2" @@ -9954,7 +8562,7 @@ __metadata: languageName: node linkType: hard -"json5@npm:^2.1.3, json5@npm:^2.2.3": +"json5@npm:^2.1.3": version: 2.2.3 resolution: "json5@npm:2.2.3" bin: @@ -9963,6 +8571,13 @@ __metadata: languageName: node linkType: hard +"jsonc-parser@npm:^3.2.0": + version: 3.2.0 + resolution: "jsonc-parser@npm:3.2.0" + checksum: 946dd9a5f326b745aa326d48a7257e3f4a4b62c5e98ec8e49fa2bdd8d96cef7e6febf1399f5c7016114fd1f68a1c62c6138826d5d90bc650448e3cf0951c53c7 + languageName: node + linkType: hard + "jsonify@npm:^0.0.1": version: 0.0.1 resolution: "jsonify@npm:0.0.1" @@ -10012,13 +8627,6 @@ __metadata: languageName: node linkType: hard -"kleur@npm:^3.0.3": - version: 3.0.3 - resolution: "kleur@npm:3.0.3" - checksum: df82cd1e172f957bae9c536286265a5cdbd5eeca487cb0a3b2a7b41ef959fc61f8e7c0e9aeea9c114ccf2c166b6a8dd45a46fd619c1c569d210ecd2765ad5169 - languageName: node - linkType: hard - "kuler@npm:^2.0.0": version: 2.0.0 resolution: "kuler@npm:2.0.0" @@ -10033,13 +8641,6 @@ __metadata: languageName: node linkType: hard -"leven@npm:^3.1.0": - version: 3.1.0 - resolution: "leven@npm:3.1.0" - checksum: 638401d534585261b6003db9d99afd244dfe82d75ddb6db5c0df412842d5ab30b2ef18de471aaec70fe69a46f17b4ae3c7f01d8a4e6580ef7adb9f4273ad1e55 - languageName: node - linkType: hard - "libp2p-crypto@npm:^0.19.0": version: 0.19.7 resolution: "libp2p-crypto@npm:0.19.7" @@ -10083,6 +8684,13 @@ __metadata: languageName: node linkType: hard +"local-pkg@npm:^0.4.3": + version: 0.4.3 + resolution: "local-pkg@npm:0.4.3" + checksum: 7825aca531dd6afa3a3712a0208697aa4a5cd009065f32e3fb732aafcc42ed11f277b5ac67229222e96f4def55197171cdf3d5522d0381b489d2e5547b407d55 + languageName: node + linkType: hard + "locate-path@npm:^5.0.0": version: 5.0.0 resolution: "locate-path@npm:5.0.0" @@ -10194,13 +8802,12 @@ __metadata: languageName: node linkType: hard -"lowlight@npm:^1.17.0": - version: 1.20.0 - resolution: "lowlight@npm:1.20.0" +"loupe@npm:^2.3.6": + version: 2.3.7 + resolution: "loupe@npm:2.3.7" dependencies: - fault: ^1.0.0 - highlight.js: ~10.7.0 - checksum: 14a1815d6bae202ddee313fc60f06d46e5235c02fa483a77950b401d85b4c1e12290145ccd17a716b07f9328bd5864aa2d402b6a819ff3be7c833d9748ff8ba7 + get-func-name: ^2.0.1 + checksum: 96c058ec7167598e238bb7fb9def2f9339215e97d6685d9c1e3e4bdb33d14600e11fe7a812cf0c003dfb73ca2df374f146280b2287cae9e8d989e9d7a69a203b languageName: node linkType: hard @@ -10238,12 +8845,12 @@ __metadata: languageName: node linkType: hard -"make-dir@npm:^4.0.0": - version: 4.0.0 - resolution: "make-dir@npm:4.0.0" +"magic-string@npm:^0.30.1": + version: 0.30.5 + resolution: "magic-string@npm:0.30.5" dependencies: - semver: ^7.5.3 - checksum: bf0731a2dd3aab4db6f3de1585cea0b746bb73eb5a02e3d8d72757e376e64e6ada190b1eddcde5b2f24a81b688a9897efd5018737d05e02e2a671dda9cff8a8a + "@jridgewell/sourcemap-codec": ^1.4.15 + checksum: da10fecff0c0a7d3faf756913ce62bd6d5e7b0402be48c3b27bfd651b90e29677e279069a63b764bcdc1b8ecdcdb898f29a5c5ec510f2323e8d62ee057a6eb18 languageName: node linkType: hard @@ -10273,15 +8880,6 @@ __metadata: languageName: node linkType: hard -"makeerror@npm:1.0.12": - version: 1.0.12 - resolution: "makeerror@npm:1.0.12" - dependencies: - tmpl: 1.0.5 - checksum: b38a025a12c8146d6eeea5a7f2bf27d51d8ad6064da8ca9405fcf7bf9b54acd43e3b30ddd7abb9b1bfa4ddb266019133313482570ddb207de568f71ecfcf6060 - languageName: node - linkType: hard - "map-obj@npm:^1.0.0": version: 1.0.1 resolution: "map-obj@npm:1.0.1" @@ -10444,7 +9042,7 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:^3.0.4, minimatch@npm:^3.1.1": +"minimatch@npm:^3.0.4": version: 3.1.2 resolution: "minimatch@npm:3.1.2" dependencies: @@ -10580,6 +9178,18 @@ __metadata: languageName: node linkType: hard +"mlly@npm:^1.2.0, mlly@npm:^1.4.0": + version: 1.4.2 + resolution: "mlly@npm:1.4.2" + dependencies: + acorn: ^8.10.0 + pathe: ^1.1.1 + pkg-types: ^1.0.3 + ufo: ^1.3.0 + checksum: ad0813eca133e59ac03b356b87deea57da96083dce7dda58a8eeb2dce92b7cc2315bedd9268f3ff8e98effe1867ddb1307486d4c5cd8be162daa8e0fa0a98ed4 + languageName: node + linkType: hard + "mock-socket@npm:^9.2.1, mock-socket@npm:^9.3.1": version: 9.3.1 resolution: "mock-socket@npm:9.3.1" @@ -10827,13 +9437,6 @@ __metadata: languageName: node linkType: hard -"natural-compare@npm:^1.4.0": - version: 1.4.0 - resolution: "natural-compare@npm:1.4.0" - checksum: 23ad088b08f898fc9b53011d7bb78ec48e79de7627e01ab5518e806033861bef68d5b0cd0e2205c2f36690ac9571ff6bcb05eb777ced2eeda8d4ac5b44592c3d - languageName: node - linkType: hard - "negotiator@npm:^0.6.3": version: 0.6.3 resolution: "negotiator@npm:0.6.3" @@ -11062,13 +9665,6 @@ __metadata: languageName: node linkType: hard -"node-int64@npm:^0.4.0": - version: 0.4.0 - resolution: "node-int64@npm:0.4.0" - checksum: d0b30b1ee6d961851c60d5eaa745d30b5c95d94bc0e74b81e5292f7c42a49e3af87f1eb9e89f59456f80645d679202537de751b7d72e9e40ceea40c5e449057e - languageName: node - linkType: hard - "node-releases@npm:^2.0.13": version: 2.0.13 resolution: "node-releases@npm:2.0.13" @@ -11134,13 +9730,6 @@ __metadata: languageName: node linkType: hard -"nwsapi@npm:^2.2.2": - version: 2.2.7 - resolution: "nwsapi@npm:2.2.7" - checksum: cab25f7983acec7e23490fec3ef7be608041b460504229770e3bfcf9977c41d6fe58f518994d3bd9aa3a101f501089a3d4a63536f4ff8ae4b8c4ca23bdbfda4e - languageName: node - linkType: hard - "object-assign@npm:^4.0.1, object-assign@npm:^4.1.1": version: 4.1.1 resolution: "object-assign@npm:4.1.1" @@ -11292,12 +9881,12 @@ __metadata: languageName: node linkType: hard -"p-limit@npm:^3.1.0": - version: 3.1.0 - resolution: "p-limit@npm:3.1.0" +"p-limit@npm:^4.0.0": + version: 4.0.0 + resolution: "p-limit@npm:4.0.0" dependencies: - yocto-queue: ^0.1.0 - checksum: 7c3690c4dbf62ef625671e20b7bdf1cbc9534e83352a2780f165b0d3ceba21907e77ad63401708145ca4e25bfc51636588d89a8c0aeb715e6c37d1c066430360 + yocto-queue: ^1.0.0 + checksum: 01d9d70695187788f984226e16c903475ec6a947ee7b21948d6f597bed788e3112cc7ec2e171c1d37125057a5f45f3da21d8653e04a3a793589e12e9e80e756b languageName: node linkType: hard @@ -11380,21 +9969,7 @@ __metadata: languageName: node linkType: hard -"parse-entities@npm:^2.0.0": - version: 2.0.0 - resolution: "parse-entities@npm:2.0.0" - dependencies: - character-entities: ^1.0.0 - character-entities-legacy: ^1.0.0 - character-reference-invalid: ^1.0.0 - is-alphanumerical: ^1.0.0 - is-decimal: ^1.0.0 - is-hexadecimal: ^1.0.0 - checksum: 7addfd3e7d747521afac33c8121a5f23043c6973809756920d37e806639b4898385d386fcf4b3c8e2ecf1bc28aac5ae97df0b112d5042034efbe80f44081ebce - languageName: node - linkType: hard - -"parse-json@npm:^5.0.0, parse-json@npm:^5.2.0": +"parse-json@npm:^5.0.0": version: 5.2.0 resolution: "parse-json@npm:5.2.0" dependencies: @@ -11406,15 +9981,6 @@ __metadata: languageName: node linkType: hard -"parse5@npm:^7.0.0, parse5@npm:^7.1.1": - version: 7.1.2 - resolution: "parse5@npm:7.1.2" - dependencies: - entities: ^4.4.0 - checksum: 59465dd05eb4c5ec87b76173d1c596e152a10e290b7abcda1aecf0f33be49646ea74840c69af975d7887543ea45564801736356c568d6b5e71792fd0f4055713 - languageName: node - linkType: hard - "path-browserify@npm:^1.0.1": version: 1.0.1 resolution: "path-browserify@npm:1.0.1" @@ -11467,6 +10033,20 @@ __metadata: languageName: node linkType: hard +"pathe@npm:^1.1.0, pathe@npm:^1.1.1": + version: 1.1.1 + resolution: "pathe@npm:1.1.1" + checksum: 34ab3da2e5aa832ebc6a330ffe3f73d7ba8aec6e899b53b8ec4f4018de08e40742802deb12cf5add9c73b7bf719b62c0778246bd376ca62b0fb23e0dde44b759 + languageName: node + linkType: hard + +"pathval@npm:^1.1.1": + version: 1.1.1 + resolution: "pathval@npm:1.1.1" + checksum: 090e3147716647fb7fb5b4b8c8e5b55e5d0a6086d085b6cd23f3d3c01fcf0ff56fd3cc22f2f4a033bd2e46ed55d61ed8379e123b42afe7d531a2a5fc8bb556d6 + languageName: node + linkType: hard + "pause-stream@npm:0.0.11": version: 0.0.11 resolution: "pause-stream@npm:0.0.11" @@ -11511,7 +10091,7 @@ __metadata: languageName: node linkType: hard -"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.2.3, picomatch@npm:^2.3.1": +"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.3.1": version: 2.3.1 resolution: "picomatch@npm:2.3.1" checksum: 050c865ce81119c4822c45d3c84f1ced46f93a0126febae20737bd05ca20589c564d6e9226977df859ed5e03dc73f02584a2b0faad36e896936238238b0446cf @@ -11563,19 +10143,21 @@ __metadata: languageName: node linkType: hard -"pirates@npm:^4.0.1, pirates@npm:^4.0.4": +"pirates@npm:^4.0.1": version: 4.0.6 resolution: "pirates@npm:4.0.6" checksum: 46a65fefaf19c6f57460388a5af9ab81e3d7fd0e7bc44ca59d753cb5c4d0df97c6c6e583674869762101836d68675f027d60f841c105d72734df9dfca97cbcc6 languageName: node linkType: hard -"pkg-dir@npm:^4.2.0": - version: 4.2.0 - resolution: "pkg-dir@npm:4.2.0" +"pkg-types@npm:^1.0.3": + version: 1.0.3 + resolution: "pkg-types@npm:1.0.3" dependencies: - find-up: ^4.0.0 - checksum: 9863e3f35132bf99ae1636d31ff1e1e3501251d480336edb1c211133c8d58906bed80f154a1d723652df1fda91e01c7442c2eeaf9dc83157c7ae89087e43c8d6 + jsonc-parser: ^3.2.0 + mlly: ^1.2.0 + pathe: ^1.1.0 + checksum: 4b305c834b912ddcc8a0fe77530c0b0321fe340396f84cbb87aecdbc126606f47f2178f23b8639e71a4870f9631c7217aef52ffed0ae17ea2dbbe7e43d116a6e languageName: node linkType: hard @@ -11720,7 +10302,7 @@ __metadata: languageName: node linkType: hard -"postcss@npm:8.4.31, postcss@npm:^8.4.23": +"postcss@npm:8.4.31, postcss@npm:^8.4.23, postcss@npm:^8.4.31": version: 8.4.31 resolution: "postcss@npm:8.4.31" dependencies: @@ -11826,7 +10408,7 @@ __metadata: languageName: node linkType: hard -"pretty-format@npm:^29.0.0, pretty-format@npm:^29.7.0": +"pretty-format@npm:^29.5.0": version: 29.7.0 resolution: "pretty-format@npm:29.7.0" dependencies: @@ -11837,20 +10419,6 @@ __metadata: languageName: node linkType: hard -"prismjs@npm:^1.27.0": - version: 1.29.0 - resolution: "prismjs@npm:1.29.0" - checksum: 007a8869d4456ff8049dc59404e32d5666a07d99c3b0e30a18bd3b7676dfa07d1daae9d0f407f20983865fd8da56de91d09cb08e6aa61f5bc420a27c0beeaf93 - languageName: node - linkType: hard - -"prismjs@npm:~1.27.0": - version: 1.27.0 - resolution: "prismjs@npm:1.27.0" - checksum: 85c7f4a3e999073502cc9e1882af01e3709706369ec254b60bff1149eda701f40d02512acab956012dc7e61cfd61743a3a34c1bd0737e8dbacd79141e5698bbc - languageName: node - linkType: hard - "proc-log@npm:^3.0.0": version: 3.0.0 resolution: "proc-log@npm:3.0.0" @@ -11882,16 +10450,6 @@ __metadata: languageName: node linkType: hard -"prompts@npm:^2.0.1": - version: 2.4.2 - resolution: "prompts@npm:2.4.2" - dependencies: - kleur: ^3.0.3 - sisteransi: ^1.0.5 - checksum: d8fd1fe63820be2412c13bfc5d0a01909acc1f0367e32396962e737cb2fc52d004f3302475d5ce7d18a1e8a79985f93ff04ee03007d091029c3f9104bffc007d - languageName: node - linkType: hard - "prop-types@npm:^15.5.10, prop-types@npm:^15.5.7, prop-types@npm:^15.6.0, prop-types@npm:^15.6.2, prop-types@npm:^15.7.2": version: 15.8.1 resolution: "prop-types@npm:15.8.1" @@ -11910,15 +10468,6 @@ __metadata: languageName: node linkType: hard -"property-information@npm:^5.0.0": - version: 5.6.0 - resolution: "property-information@npm:5.6.0" - dependencies: - xtend: ^4.0.0 - checksum: fcf87c6542e59a8bbe31ca0b3255a4a63ac1059b01b04469680288998bcfa97f341ca989566adbb63975f4d85339030b82320c324a511532d390910d1c583893 - languageName: node - linkType: hard - "protobufjs@npm:^6.10.2, protobufjs@npm:^6.11.2": version: 6.11.4 resolution: "protobufjs@npm:6.11.4" @@ -11993,13 +10542,6 @@ __metadata: languageName: node linkType: hard -"psl@npm:^1.1.33": - version: 1.9.0 - resolution: "psl@npm:1.9.0" - checksum: 20c4277f640c93d393130673f392618e9a8044c6c7bf61c53917a0fddb4952790f5f362c6c730a9c32b124813e173733f9895add8d26f566ed0ea0654b2e711d - languageName: node - linkType: hard - "pump@npm:^3.0.0": version: 3.0.0 resolution: "pump@npm:3.0.0" @@ -12010,20 +10552,13 @@ __metadata: languageName: node linkType: hard -"punycode@npm:^2.1.0, punycode@npm:^2.1.1": +"punycode@npm:^2.1.0": version: 2.3.0 resolution: "punycode@npm:2.3.0" checksum: 39f760e09a2a3bbfe8f5287cf733ecdad69d6af2fe6f97ca95f24b8921858b91e9ea3c9eeec6e08cede96181b3bb33f95c6ffd8c77e63986508aa2e8159fa200 languageName: node linkType: hard -"pure-rand@npm:^6.0.0": - version: 6.0.4 - resolution: "pure-rand@npm:6.0.4" - checksum: e1c4e69f8bf7303e5252756d67c3c7551385cd34d94a1f511fe099727ccbab74c898c03a06d4c4a24a89b51858781057b83ebbfe740d984240cdc04fead36068 - languageName: node - linkType: hard - "pure-react-carousel@npm:^1.27.8": version: 1.30.1 resolution: "pure-react-carousel@npm:1.30.1" @@ -12073,13 +10608,6 @@ __metadata: languageName: node linkType: hard -"querystringify@npm:^2.1.1": - version: 2.2.0 - resolution: "querystringify@npm:2.2.0" - checksum: 5641ea231bad7ef6d64d9998faca95611ed4b11c2591a8cae741e178a974f6a8e0ebde008475259abe1621cb15e692404e6b6626e927f7b849d5c09392604b15 - languageName: node - linkType: hard - "queue-microtask@npm:^1.2.2": version: 1.2.3 resolution: "queue-microtask@npm:1.2.3" @@ -12449,21 +10977,6 @@ __metadata: languageName: node linkType: hard -"react-syntax-highlighter@npm:^15.5.0": - version: 15.5.0 - resolution: "react-syntax-highlighter@npm:15.5.0" - dependencies: - "@babel/runtime": ^7.3.1 - highlight.js: ^10.4.1 - lowlight: ^1.17.0 - prismjs: ^1.27.0 - refractor: ^3.6.0 - peerDependencies: - react: ">= 0.14.0" - checksum: c082b48f30f8ba8d0c55ed1d761910630860077c7ff5793c4c912adcb5760df06436ed0ad62be0de28113aac9ad2af55eccd995f8eee98df53382e4ced2072fb - languageName: node - linkType: hard - "react-table@npm:^7.7.0": version: 7.8.0 resolution: "react-table@npm:7.8.0" @@ -12655,17 +11168,6 @@ __metadata: languageName: node linkType: hard -"refractor@npm:^3.6.0": - version: 3.6.0 - resolution: "refractor@npm:3.6.0" - dependencies: - hastscript: ^6.0.0 - parse-entities: ^2.0.0 - prismjs: ~1.27.0 - checksum: 39b01c4168c77c5c8486f9bf8907bbb05f257f15026057ba5728535815a2d90eed620468a4bfbb2b8ceefbb3ce3931a1be8b17152dbdbc8b0eef92450ff750a2 - languageName: node - linkType: hard - "regenerator-runtime@npm:^0.14.0": version: 0.14.0 resolution: "regenerator-runtime@npm:0.14.0" @@ -12700,15 +11202,8 @@ __metadata: "require-main-filename@npm:^2.0.0": version: 2.0.0 - resolution: "require-main-filename@npm:2.0.0" - checksum: e9e294695fea08b076457e9ddff854e81bffbe248ed34c1eec348b7abbd22a0d02e8d75506559e2265e96978f3c4720bd77a6dad84755de8162b357eb6c778c7 - languageName: node - linkType: hard - -"requires-port@npm:^1.0.0": - version: 1.0.0 - resolution: "requires-port@npm:1.0.0" - checksum: eee0e303adffb69be55d1a214e415cf42b7441ae858c76dfc5353148644f6fd6e698926fc4643f510d5c126d12a705e7c8ed7e38061113bdf37547ab356797ff + resolution: "require-main-filename@npm:2.0.0" + checksum: e9e294695fea08b076457e9ddff854e81bffbe248ed34c1eec348b7abbd22a0d02e8d75506559e2265e96978f3c4720bd77a6dad84755de8162b357eb6c778c7 languageName: node linkType: hard @@ -12719,15 +11214,6 @@ __metadata: languageName: node linkType: hard -"resolve-cwd@npm:^3.0.0": - version: 3.0.0 - resolution: "resolve-cwd@npm:3.0.0" - dependencies: - resolve-from: ^5.0.0 - checksum: 546e0816012d65778e580ad62b29e975a642989108d9a3c5beabfb2304192fa3c9f9146fbdfe213563c6ff51975ae41bac1d3c6e047dd9572c94863a057b4d81 - languageName: node - linkType: hard - "resolve-from@npm:^4.0.0": version: 4.0.0 resolution: "resolve-from@npm:4.0.0" @@ -12735,21 +11221,7 @@ __metadata: languageName: node linkType: hard -"resolve-from@npm:^5.0.0": - version: 5.0.0 - resolution: "resolve-from@npm:5.0.0" - checksum: 4ceeb9113e1b1372d0cd969f3468fa042daa1dd9527b1b6bb88acb6ab55d8b9cd65dbf18819f9f9ddf0db804990901dcdaade80a215e7b2c23daae38e64f5bdf - languageName: node - linkType: hard - -"resolve.exports@npm:^2.0.0": - version: 2.0.2 - resolution: "resolve.exports@npm:2.0.2" - checksum: 1c7778ca1b86a94f8ab4055d196c7d87d1874b96df4d7c3e67bbf793140f0717fd506dcafd62785b079cd6086b9264424ad634fb904409764c3509c3df1653f2 - languageName: node - linkType: hard - -"resolve@npm:^1.1.7, resolve@npm:^1.10.0, resolve@npm:^1.12.0, resolve@npm:^1.19.0, resolve@npm:^1.20.0, resolve@npm:^1.22.2": +"resolve@npm:^1.1.7, resolve@npm:^1.10.0, resolve@npm:^1.12.0, resolve@npm:^1.19.0, resolve@npm:^1.22.2": version: 1.22.8 resolution: "resolve@npm:1.22.8" dependencies: @@ -12762,7 +11234,7 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@^1.1.7#~builtin, resolve@patch:resolve@^1.10.0#~builtin, resolve@patch:resolve@^1.12.0#~builtin, resolve@patch:resolve@^1.19.0#~builtin, resolve@patch:resolve@^1.20.0#~builtin, resolve@patch:resolve@^1.22.2#~builtin": +"resolve@patch:resolve@^1.1.7#~builtin, resolve@patch:resolve@^1.10.0#~builtin, resolve@patch:resolve@^1.12.0#~builtin, resolve@patch:resolve@^1.19.0#~builtin, resolve@patch:resolve@^1.22.2#~builtin": version: 1.22.8 resolution: "resolve@patch:resolve@npm%3A1.22.8#~builtin::version=1.22.8&hash=07638b" dependencies: @@ -12835,6 +11307,56 @@ __metadata: languageName: node linkType: hard +"rollup@npm:^4.2.0": + version: 4.3.0 + resolution: "rollup@npm:4.3.0" + dependencies: + "@rollup/rollup-android-arm-eabi": 4.3.0 + "@rollup/rollup-android-arm64": 4.3.0 + "@rollup/rollup-darwin-arm64": 4.3.0 + "@rollup/rollup-darwin-x64": 4.3.0 + "@rollup/rollup-linux-arm-gnueabihf": 4.3.0 + "@rollup/rollup-linux-arm64-gnu": 4.3.0 + "@rollup/rollup-linux-arm64-musl": 4.3.0 + "@rollup/rollup-linux-x64-gnu": 4.3.0 + "@rollup/rollup-linux-x64-musl": 4.3.0 + "@rollup/rollup-win32-arm64-msvc": 4.3.0 + "@rollup/rollup-win32-ia32-msvc": 4.3.0 + "@rollup/rollup-win32-x64-msvc": 4.3.0 + fsevents: ~2.3.2 + dependenciesMeta: + "@rollup/rollup-android-arm-eabi": + optional: true + "@rollup/rollup-android-arm64": + optional: true + "@rollup/rollup-darwin-arm64": + optional: true + "@rollup/rollup-darwin-x64": + optional: true + "@rollup/rollup-linux-arm-gnueabihf": + optional: true + "@rollup/rollup-linux-arm64-gnu": + optional: true + "@rollup/rollup-linux-arm64-musl": + optional: true + "@rollup/rollup-linux-x64-gnu": + optional: true + "@rollup/rollup-linux-x64-musl": + optional: true + "@rollup/rollup-win32-arm64-msvc": + optional: true + "@rollup/rollup-win32-ia32-msvc": + optional: true + "@rollup/rollup-win32-x64-msvc": + optional: true + fsevents: + optional: true + bin: + rollup: dist/bin/rollup + checksum: 8791b160407188a794fa4a529d1740e2310625254450753d2d8413cf26855ed8758146e110724492df8d6a108a5362c999f07a387c52143afc20cf27695b34c2 + languageName: node + linkType: hard + "rpc-websockets@npm:^7.5.1": version: 7.6.2 resolution: "rpc-websockets@npm:7.6.2" @@ -12938,15 +11460,6 @@ __metadata: languageName: node linkType: hard -"saxes@npm:^6.0.0": - version: 6.0.0 - resolution: "saxes@npm:6.0.0" - dependencies: - xmlchars: ^2.2.0 - checksum: d3fa3e2aaf6c65ed52ee993aff1891fc47d5e47d515164b5449cbf5da2cbdc396137e55590472e64c5c436c14ae64a8a03c29b9e7389fc6f14035cf4e982ef3b - languageName: node - linkType: hard - "scheduler@npm:^0.23.0": version: 0.23.0 resolution: "scheduler@npm:0.23.0" @@ -12977,7 +11490,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:^6.3.0, semver@npm:^6.3.1": +"semver@npm:^6.3.1": version: 6.3.1 resolution: "semver@npm:6.3.1" bin: @@ -12986,7 +11499,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.8, semver@npm:^7.5.3, semver@npm:^7.5.4": +"semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.8, semver@npm:^7.5.4": version: 7.5.4 resolution: "semver@npm:7.5.4" dependencies: @@ -13087,7 +11600,14 @@ __metadata: languageName: node linkType: hard -"signal-exit@npm:^3.0.3, signal-exit@npm:^3.0.7": +"siginfo@npm:^2.0.0": + version: 2.0.0 + resolution: "siginfo@npm:2.0.0" + checksum: 8aa5a98640ca09fe00d74416eca97551b3e42991614a3d1b824b115fc1401543650914f651ab1311518177e4d297e80b953f4cd4cd7ea1eabe824e8f2091de01 + languageName: node + linkType: hard + +"signal-exit@npm:^3.0.3": version: 3.0.7 resolution: "signal-exit@npm:3.0.7" checksum: a2f098f247adc367dffc27845853e9959b9e88b01cb301658cfe4194352d8d2bb32e18467c786a7fe15f1d44b233ea35633d076d5e737870b7139949d1ab6318 @@ -13148,20 +11668,6 @@ __metadata: languageName: node linkType: hard -"sisteransi@npm:^1.0.5": - version: 1.0.5 - resolution: "sisteransi@npm:1.0.5" - checksum: aba6438f46d2bfcef94cf112c835ab395172c75f67453fe05c340c770d3c402363018ae1ab4172a1026a90c47eaccf3af7b6ff6fa749a680c2929bd7fa2b37a4 - languageName: node - linkType: hard - -"slash@npm:^3.0.0": - version: 3.0.0 - resolution: "slash@npm:3.0.0" - checksum: 94a93fff615f25a999ad4b83c9d5e257a7280c90a32a7cb8b4a87996e4babf322e469c42b7f649fd5796edd8687652f3fb452a86dc97a816f01113183393f11c - languageName: node - linkType: hard - "smart-buffer@npm:^4.2.0": version: 4.2.0 resolution: "smart-buffer@npm:4.2.0" @@ -13237,16 +11743,6 @@ __metadata: languageName: node linkType: hard -"source-map-support@npm:0.5.13": - version: 0.5.13 - resolution: "source-map-support@npm:0.5.13" - dependencies: - buffer-from: ^1.0.0 - source-map: ^0.6.0 - checksum: 933550047b6c1a2328599a21d8b7666507427c0f5ef5eaadd56b5da0fd9505e239053c66fe181bf1df469a3b7af9d775778eee283cbb7ae16b902ddc09e93a97 - languageName: node - linkType: hard - "source-map@npm:^0.5.7": version: 0.5.7 resolution: "source-map@npm:0.5.7" @@ -13254,20 +11750,13 @@ __metadata: languageName: node linkType: hard -"source-map@npm:^0.6.0, source-map@npm:^0.6.1, source-map@npm:~0.6.1": +"source-map@npm:^0.6.1": version: 0.6.1 resolution: "source-map@npm:0.6.1" checksum: 59ce8640cf3f3124f64ac289012c2b8bd377c238e316fb323ea22fbfe83da07d81e000071d7242cad7a23cd91c7de98e4df8830ec3f133cb6133a5f6e9f67bc2 languageName: node linkType: hard -"space-separated-tokens@npm:^1.0.0": - version: 1.1.5 - resolution: "space-separated-tokens@npm:1.1.5" - checksum: 8ef68f1cfa8ccad316b7f8d0df0919d0f1f6d32101e8faeee34ea3a923ce8509c1ad562f57388585ee4951e92d27afa211ed0a077d3d5995b5ba9180331be708 - languageName: node - linkType: hard - "sparse-array@npm:^1.3.1": version: 1.3.2 resolution: "sparse-array@npm:1.3.2" @@ -13332,13 +11821,6 @@ __metadata: languageName: node linkType: hard -"sprintf-js@npm:~1.0.2": - version: 1.0.3 - resolution: "sprintf-js@npm:1.0.3" - checksum: 19d79aec211f09b99ec3099b5b2ae2f6e9cdefe50bc91ac4c69144b6d3928a640bb6ae5b3def70c2e85a2c3d9f5ec2719921e3a59d3ca3ef4b2fd1a4656a0df3 - languageName: node - linkType: hard - "ssri@npm:^10.0.0": version: 10.0.5 resolution: "ssri@npm:10.0.5" @@ -13362,12 +11844,10 @@ __metadata: languageName: node linkType: hard -"stack-utils@npm:^2.0.3": - version: 2.0.6 - resolution: "stack-utils@npm:2.0.6" - dependencies: - escape-string-regexp: ^2.0.0 - checksum: 052bf4d25bbf5f78e06c1d5e67de2e088b06871fa04107ca8d3f0e9d9263326e2942c8bedee3545795fc77d787d443a538345eef74db2f8e35db3558c6f91ff7 +"stackback@npm:0.0.2": + version: 0.0.2 + resolution: "stackback@npm:0.0.2" + checksum: 2d4dc4e64e2db796de4a3c856d5943daccdfa3dd092e452a1ce059c81e9a9c29e0b9badba91b43ef0d5ff5c04ee62feb3bcc559a804e16faf447bac2d883aa99 languageName: node linkType: hard @@ -13391,6 +11871,13 @@ __metadata: languageName: node linkType: hard +"std-env@npm:^3.3.3": + version: 3.4.3 + resolution: "std-env@npm:3.4.3" + checksum: bef186fb2baddda31911234b1e58fa18f181eb6930616aaec3b54f6d5db65f2da5daaa5f3b326b98445a7d50ca81d6fe8809ab4ebab85ecbe4a802f1b40921bf + languageName: node + linkType: hard + "stop-iteration-iterator@npm:^1.0.0": version: 1.0.0 resolution: "stop-iteration-iterator@npm:1.0.0" @@ -13446,17 +11933,7 @@ __metadata: languageName: node linkType: hard -"string-length@npm:^4.0.1": - version: 4.0.2 - resolution: "string-length@npm:4.0.2" - dependencies: - char-regex: ^1.0.2 - strip-ansi: ^6.0.0 - checksum: ce85533ef5113fcb7e522bcf9e62cb33871aa99b3729cec5595f4447f660b0cefd542ca6df4150c97a677d58b0cb727a3fe09ac1de94071d05526c73579bf505 - languageName: node - linkType: hard - -"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": +"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^4.1.0, string-width@npm:^4.2.0": version: 4.2.3 resolution: "string-width@npm:4.2.3" dependencies: @@ -13512,13 +11989,6 @@ __metadata: languageName: node linkType: hard -"strip-bom@npm:^4.0.0": - version: 4.0.0 - resolution: "strip-bom@npm:4.0.0" - checksum: 9dbcfbaf503c57c06af15fe2c8176fb1bf3af5ff65003851a102749f875a6dbe0ab3b30115eccf6e805e9d756830d3e40ec508b62b3f1ddf3761a20ebe29d3f3 - languageName: node - linkType: hard - "strip-final-newline@npm:^2.0.0": version: 2.0.0 resolution: "strip-final-newline@npm:2.0.0" @@ -13544,13 +12014,6 @@ __metadata: languageName: node linkType: hard -"strip-json-comments@npm:^3.1.1": - version: 3.1.1 - resolution: "strip-json-comments@npm:3.1.1" - checksum: 492f73e27268f9b1c122733f28ecb0e7e8d8a531a6662efbd08e22cccb3f9475e90a1b82cab06a392f6afae6d2de636f977e231296400d0ec5304ba70f166443 - languageName: node - linkType: hard - "strip-json-comments@npm:~2.0.1": version: 2.0.1 resolution: "strip-json-comments@npm:2.0.1" @@ -13558,6 +12021,15 @@ __metadata: languageName: node linkType: hard +"strip-literal@npm:^1.0.1": + version: 1.3.0 + resolution: "strip-literal@npm:1.3.0" + dependencies: + acorn: ^8.10.0 + checksum: f5fa7e289df8ebe82e90091fd393974faf8871be087ca50114327506519323cf15f2f8fee6ebe68b5e58bfc795269cae8bdc7cb5a83e27b02b3fe953f37b0a89 + languageName: node + linkType: hard + "styled-components@npm:^5.3.3": version: 5.3.11 resolution: "styled-components@npm:5.3.11" @@ -13669,15 +12141,6 @@ __metadata: languageName: node linkType: hard -"supports-color@npm:^8.0.0": - version: 8.1.1 - resolution: "supports-color@npm:8.1.1" - dependencies: - has-flag: ^4.0.0 - checksum: c052193a7e43c6cdc741eb7f378df605636e01ad434badf7324f17fb60c69a880d8d8fcdcb562cf94c2350e57b937d7425ab5b8326c67c2adc48f7c87c1db406 - languageName: node - linkType: hard - "supports-preserve-symlinks-flag@npm:^1.0.0": version: 1.0.0 resolution: "supports-preserve-symlinks-flag@npm:1.0.0" @@ -13692,13 +12155,6 @@ __metadata: languageName: node linkType: hard -"symbol-tree@npm:^3.2.4": - version: 3.2.4 - resolution: "symbol-tree@npm:3.2.4" - checksum: 6e8fc7e1486b8b54bea91199d9535bb72f10842e40c79e882fc94fb7b14b89866adf2fd79efa5ebb5b658bc07fb459ccce5ac0e99ef3d72f474e74aaf284029d - languageName: node - linkType: hard - "tailwindcss@npm:^3.1.8": version: 3.3.5 resolution: "tailwindcss@npm:3.3.5" @@ -13778,17 +12234,6 @@ __metadata: languageName: node linkType: hard -"test-exclude@npm:^6.0.0": - version: 6.0.0 - resolution: "test-exclude@npm:6.0.0" - dependencies: - "@istanbuljs/schema": ^0.1.2 - glob: ^7.1.4 - minimatch: ^3.0.4 - checksum: 3b34a3d77165a2cb82b34014b3aba93b1c4637a5011807557dc2f3da826c59975a5ccad765721c4648b39817e3472789f9b0fa98fc854c5c1c7a1e632aacdc28 - languageName: node - linkType: hard - "text-encoding-utf-8@npm:^1.0.2": version: 1.0.2 resolution: "text-encoding-utf-8@npm:1.0.2" @@ -13870,6 +12315,13 @@ __metadata: languageName: node linkType: hard +"tinybench@npm:^2.5.0": + version: 2.5.1 + resolution: "tinybench@npm:2.5.1" + checksum: 6d98526c00b68b50ab0a37590b3cc6713b96fee7dd6756a2a77bab071ed1b4a4fc54e7b11e28b35ec2f761c6a806c2befa95f10acf2fee111c49327b6fc3386f + languageName: node + linkType: hard + "tinycolor2@npm:^1.4.1": version: 1.6.0 resolution: "tinycolor2@npm:1.6.0" @@ -13877,6 +12329,20 @@ __metadata: languageName: node linkType: hard +"tinypool@npm:^0.7.0": + version: 0.7.0 + resolution: "tinypool@npm:0.7.0" + checksum: fdcccd5c750574fce51f8801a877f8284e145d12b79cd5f2d72bfbddfe20c895e915555bc848e122bb6aa968098e7ac4fe1e8e88104904d518dc01cccd18a510 + languageName: node + linkType: hard + +"tinyspy@npm:^2.1.1": + version: 2.2.0 + resolution: "tinyspy@npm:2.2.0" + checksum: 36431acaa648054406147a92b9bde494b7548d0f9f3ffbcc02113c25a6e59f3310cbe924353d7f4c51436299150bec2dbb3dc595748f58c4ddffea22d5baaadb + languageName: node + linkType: hard + "titleize@npm:^2.1.0": version: 2.1.0 resolution: "titleize@npm:2.1.0" @@ -13884,13 +12350,6 @@ __metadata: languageName: node linkType: hard -"tmpl@npm:1.0.5": - version: 1.0.5 - resolution: "tmpl@npm:1.0.5" - checksum: cd922d9b853c00fe414c5a774817be65b058d54a2d01ebb415840960406c669a0fc632f66df885e24cb022ec812739199ccbdb8d1164c3e513f85bfca5ab2873 - languageName: node - linkType: hard - "to-fast-properties@npm:^2.0.0": version: 2.0.0 resolution: "to-fast-properties@npm:2.0.0" @@ -13928,27 +12387,6 @@ __metadata: languageName: node linkType: hard -"tough-cookie@npm:^4.1.2": - version: 4.1.3 - resolution: "tough-cookie@npm:4.1.3" - dependencies: - psl: ^1.1.33 - punycode: ^2.1.1 - universalify: ^0.2.0 - url-parse: ^1.5.3 - checksum: c9226afff36492a52118432611af083d1d8493a53ff41ec4ea48e5b583aec744b989e4280bcf476c910ec1525a89a4a0f1cae81c08b18fb2ec3a9b3a72b91dcc - languageName: node - linkType: hard - -"tr46@npm:^3.0.0": - version: 3.0.0 - resolution: "tr46@npm:3.0.0" - dependencies: - punycode: ^2.1.1 - checksum: 44c3cc6767fb800490e6e9fd64fd49041aa4e49e1f6a012b34a75de739cc9ed3a6405296072c1df8b6389ae139c5e7c6496f659cfe13a04a4bff3a1422981270 - languageName: node - linkType: hard - "tr46@npm:~0.0.3": version: 0.0.3 resolution: "tr46@npm:0.0.3" @@ -14108,7 +12546,7 @@ __metadata: languageName: node linkType: hard -"type-detect@npm:4.0.8": +"type-detect@npm:^4.0.0, type-detect@npm:^4.0.8": version: 4.0.8 resolution: "type-detect@npm:4.0.8" checksum: 62b5628bff67c0eb0b66afa371bd73e230399a8d2ad30d852716efcc4656a7516904570cd8631a49a3ce57c10225adf5d0cbdcb47f6b0255fe6557c453925a15 @@ -14122,13 +12560,6 @@ __metadata: languageName: node linkType: hard -"type-fest@npm:^0.21.3": - version: 0.21.3 - resolution: "type-fest@npm:0.21.3" - checksum: e6b32a3b3877f04339bae01c193b273c62ba7bfc9e325b8703c4ee1b32dc8fe4ef5dfa54bf78265e069f7667d058e360ae0f37be5af9f153b22382cd55a9afe0 - languageName: node - linkType: hard - "type-fest@npm:^0.6.0": version: 0.6.0 resolution: "type-fest@npm:0.6.0" @@ -14186,6 +12617,13 @@ __metadata: languageName: node linkType: hard +"ufo@npm:^1.3.0": + version: 1.3.1 + resolution: "ufo@npm:1.3.1" + checksum: 2db2f9d24e3f572ddb9b2f4415eda679fd366cbb9eec4c56996651323737f17528b4aab2bb45c5f2effff2304f9b0c46e0981aee3e48f38ac51106a8993dff31 + languageName: node + linkType: hard + "uint8-varint@npm:^2.0.1": version: 2.0.2 resolution: "uint8-varint@npm:2.0.2" @@ -14286,13 +12724,6 @@ __metadata: languageName: node linkType: hard -"universalify@npm:^0.2.0": - version: 0.2.0 - resolution: "universalify@npm:0.2.0" - checksum: e86134cb12919d177c2353196a4cc09981524ee87abf621f7bc8d249dbbbebaec5e7d1314b96061497981350df786e4c5128dbf442eba104d6e765bc260678b5 - languageName: node - linkType: hard - "unload@npm:^2.4.1": version: 2.4.1 resolution: "unload@npm:2.4.1" @@ -14330,16 +12761,6 @@ __metadata: languageName: node linkType: hard -"url-parse@npm:^1.5.3": - version: 1.5.10 - resolution: "url-parse@npm:1.5.10" - dependencies: - querystringify: ^2.1.1 - requires-port: ^1.0.0 - checksum: fbdba6b1d83336aca2216bbdc38ba658d9cfb8fc7f665eb8b17852de638ff7d1a162c198a8e4ed66001ddbf6c9888d41e4798912c62b4fd777a31657989f7bdf - languageName: node - linkType: hard - "ursa-optional@npm:^0.10.1": version: 0.10.2 resolution: "ursa-optional@npm:0.10.2" @@ -14436,17 +12857,6 @@ __metadata: languageName: node linkType: hard -"v8-to-istanbul@npm:^9.0.1": - version: 9.1.3 - resolution: "v8-to-istanbul@npm:9.1.3" - dependencies: - "@jridgewell/trace-mapping": ^0.3.12 - "@types/istanbul-lib-coverage": ^2.0.1 - convert-source-map: ^2.0.0 - checksum: 5d592ab3d186b386065dace8e01c543a922a904b3cfac39667de172455a6b3d0e8e1401574fecb8a12092ad0809b5a8fd15f1cc14d0666139a1bb77cd6ac2cf8 - languageName: node - linkType: hard - "validate-npm-package-license@npm:^3.0.1": version: 3.0.4 resolution: "validate-npm-package-license@npm:3.0.4" @@ -14500,19 +12910,126 @@ __metadata: languageName: node linkType: hard -"void-elements@npm:3.1.0": - version: 3.1.0 - resolution: "void-elements@npm:3.1.0" - checksum: 0390f818107fa8fce55bb0a5c3f661056001c1d5a2a48c28d582d4d847347c2ab5b7f8272314cac58acf62345126b6b09bea623a185935f6b1c3bbce0dfd7f7f +"vite-node@npm:0.34.6": + version: 0.34.6 + resolution: "vite-node@npm:0.34.6" + dependencies: + cac: ^6.7.14 + debug: ^4.3.4 + mlly: ^1.4.0 + pathe: ^1.1.1 + picocolors: ^1.0.0 + vite: ^3.0.0 || ^4.0.0 || ^5.0.0-0 + bin: + vite-node: vite-node.mjs + checksum: 46eba82bf8b69c7dfeed901502533b172cc6303212f0f49f82c2f64758fa4b60acd1b1e37cb96aff944e36b510b0d1beedb50d9cb25ef39e0159b2b9d1136b1f languageName: node linkType: hard -"w3c-xmlserializer@npm:^4.0.0": - version: 4.0.0 - resolution: "w3c-xmlserializer@npm:4.0.0" +"vite@npm:^3.0.0 || ^4.0.0 || ^5.0.0-0, vite@npm:^3.1.0 || ^4.0.0 || ^5.0.0-0": + version: 5.0.0-beta.16 + resolution: "vite@npm:5.0.0-beta.16" + dependencies: + esbuild: ^0.19.3 + fsevents: ~2.3.3 + postcss: ^8.4.31 + rollup: ^4.2.0 + peerDependencies: + "@types/node": ^18.0.0 || >=20.0.0 + less: "*" + lightningcss: ^1.21.0 + sass: "*" + stylus: "*" + sugarss: "*" + terser: ^5.4.0 + dependenciesMeta: + fsevents: + optional: true + peerDependenciesMeta: + "@types/node": + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + bin: + vite: bin/vite.js + checksum: f93b309a37e4acb9dde54e127f58b69a7fd05cb1a94b6a390f2f680c287b9e9e074731cc6e0b2be0878d02574c4eb4c84167217d927815eb1fc8f527fd691df9 + languageName: node + linkType: hard + +"vitest@npm:^0.34.6": + version: 0.34.6 + resolution: "vitest@npm:0.34.6" dependencies: - xml-name-validator: ^4.0.0 - checksum: eba070e78deb408ae8defa4d36b429f084b2b47a4741c4a9be3f27a0a3d1845e277e3072b04391a138f7e43776842627d1334e448ff13ff90ad9fb1214ee7091 + "@types/chai": ^4.3.5 + "@types/chai-subset": ^1.3.3 + "@types/node": "*" + "@vitest/expect": 0.34.6 + "@vitest/runner": 0.34.6 + "@vitest/snapshot": 0.34.6 + "@vitest/spy": 0.34.6 + "@vitest/utils": 0.34.6 + acorn: ^8.9.0 + acorn-walk: ^8.2.0 + cac: ^6.7.14 + chai: ^4.3.10 + debug: ^4.3.4 + local-pkg: ^0.4.3 + magic-string: ^0.30.1 + pathe: ^1.1.1 + picocolors: ^1.0.0 + std-env: ^3.3.3 + strip-literal: ^1.0.1 + tinybench: ^2.5.0 + tinypool: ^0.7.0 + vite: ^3.1.0 || ^4.0.0 || ^5.0.0-0 + vite-node: 0.34.6 + why-is-node-running: ^2.2.2 + peerDependencies: + "@edge-runtime/vm": "*" + "@vitest/browser": "*" + "@vitest/ui": "*" + happy-dom: "*" + jsdom: "*" + playwright: "*" + safaridriver: "*" + webdriverio: "*" + peerDependenciesMeta: + "@edge-runtime/vm": + optional: true + "@vitest/browser": + optional: true + "@vitest/ui": + optional: true + happy-dom: + optional: true + jsdom: + optional: true + playwright: + optional: true + safaridriver: + optional: true + webdriverio: + optional: true + bin: + vitest: vitest.mjs + checksum: 45f5c1987fa8c76dbaf5db379bbdb4f6e3713c484e850149af38247b627e70016c1863286fd7fcfab08a1d98430f66ba1f45af6f14f5c467ded4b1ea6f26afa3 + languageName: node + linkType: hard + +"void-elements@npm:3.1.0": + version: 3.1.0 + resolution: "void-elements@npm:3.1.0" + checksum: 0390f818107fa8fce55bb0a5c3f661056001c1d5a2a48c28d582d4d847347c2ab5b7f8272314cac58acf62345126b6b09bea623a185935f6b1c3bbce0dfd7f7f languageName: node linkType: hard @@ -14531,15 +13048,6 @@ __metadata: languageName: node linkType: hard -"walker@npm:^1.0.8": - version: 1.0.8 - resolution: "walker@npm:1.0.8" - dependencies: - makeerror: 1.0.12 - checksum: ad7a257ea1e662e57ef2e018f97b3c02a7240ad5093c392186ce0bcf1f1a60bbadd520d073b9beb921ed99f64f065efb63dfc8eec689a80e569f93c1c5d5e16c - languageName: node - linkType: hard - "watchpack@npm:2.4.0": version: 2.4.0 resolution: "watchpack@npm:2.4.0" @@ -14577,13 +13085,6 @@ __metadata: languageName: node linkType: hard -"webidl-conversions@npm:^7.0.0": - version: 7.0.0 - resolution: "webidl-conversions@npm:7.0.0" - checksum: f05588567a2a76428515333eff87200fae6c83c3948a7482ebb109562971e77ef6dc49749afa58abb993391227c5697b3ecca52018793e0cb4620a48f10bd21b - languageName: node - linkType: hard - "webpack-bundle-analyzer@npm:4.3.0": version: 4.3.0 resolution: "webpack-bundle-analyzer@npm:4.3.0" @@ -14617,15 +13118,6 @@ __metadata: languageName: node linkType: hard -"whatwg-encoding@npm:^2.0.0": - version: 2.0.0 - resolution: "whatwg-encoding@npm:2.0.0" - dependencies: - iconv-lite: 0.6.3 - checksum: 7087810c410aa9b689cbd6af8773341a53cdc1f3aae2a882c163bd5522ec8ca4cdfc269aef417a5792f411807d5d77d50df4c24e3abb00bb60192858a40cc675 - languageName: node - linkType: hard - "whatwg-fetch@npm:^3.4.1": version: 3.6.19 resolution: "whatwg-fetch@npm:3.6.19" @@ -14633,23 +13125,6 @@ __metadata: languageName: node linkType: hard -"whatwg-mimetype@npm:^3.0.0": - version: 3.0.0 - resolution: "whatwg-mimetype@npm:3.0.0" - checksum: ce08bbb36b6aaf64f3a84da89707e3e6a31e5ab1c1a2379fd68df79ba712a4ab090904f0b50e6693b0dafc8e6343a6157e40bf18fdffd26e513cf95ee2a59824 - languageName: node - linkType: hard - -"whatwg-url@npm:^11.0.0": - version: 11.0.0 - resolution: "whatwg-url@npm:11.0.0" - dependencies: - tr46: ^3.0.0 - webidl-conversions: ^7.0.0 - checksum: ed4826aaa57e66bb3488a4b25c9cd476c46ba96052747388b5801f137dd740b73fde91ad207d96baf9f17fbcc80fc1a477ad65181b5eb5fa718d27c69501d7af - languageName: node - linkType: hard - "whatwg-url@npm:^5.0.0": version: 5.0.0 resolution: "whatwg-url@npm:5.0.0" @@ -14727,6 +13202,18 @@ __metadata: languageName: node linkType: hard +"why-is-node-running@npm:^2.2.2": + version: 2.2.2 + resolution: "why-is-node-running@npm:2.2.2" + dependencies: + siginfo: ^2.0.0 + stackback: 0.0.2 + bin: + why-is-node-running: cli.js + checksum: 50820428f6a82dfc3cbce661570bcae9b658723217359b6037b67e495255409b4c8bc7931745f5c175df71210450464517cab32b2f7458ac9c40b4925065200a + languageName: node + linkType: hard + "winston-transport@npm:^4.5.0": version: 4.6.0 resolution: "winston-transport@npm:4.6.0" @@ -14757,7 +13244,7 @@ __metadata: languageName: node linkType: hard -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, wrap-ansi@npm:^7.0.0": +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": version: 7.0.0 resolution: "wrap-ansi@npm:7.0.0" dependencies: @@ -14797,16 +13284,6 @@ __metadata: languageName: node linkType: hard -"write-file-atomic@npm:^4.0.2": - version: 4.0.2 - resolution: "write-file-atomic@npm:4.0.2" - dependencies: - imurmurhash: ^0.1.4 - signal-exit: ^3.0.7 - checksum: 5da60bd4eeeb935eec97ead3df6e28e5917a6bd317478e4a85a5285e8480b8ed96032bbcc6ecd07b236142a24f3ca871c924ec4a6575e623ec1b11bf8c1c253c - languageName: node - linkType: hard - "ws@npm:^7.3.1, ws@npm:^7.4.5, ws@npm:^7.5.1": version: 7.5.9 resolution: "ws@npm:7.5.9" @@ -14822,7 +13299,7 @@ __metadata: languageName: node linkType: hard -"ws@npm:^8.11.0, ws@npm:^8.14.1, ws@npm:^8.5.0, ws@npm:^8.8.1": +"ws@npm:^8.14.1, ws@npm:^8.5.0, ws@npm:^8.8.1": version: 8.14.2 resolution: "ws@npm:8.14.2" peerDependencies: @@ -14852,20 +13329,6 @@ __metadata: languageName: node linkType: hard -"xml-name-validator@npm:^4.0.0": - version: 4.0.0 - resolution: "xml-name-validator@npm:4.0.0" - checksum: af100b79c29804f05fa35aa3683e29a321db9b9685d5e5febda3fa1e40f13f85abc40f45a6b2bf7bee33f68a1dc5e8eaef4cec100a304a9db565e6061d4cb5ad - languageName: node - linkType: hard - -"xmlchars@npm:^2.2.0": - version: 2.2.0 - resolution: "xmlchars@npm:2.2.0" - checksum: 8c70ac94070ccca03f47a81fcce3b271bd1f37a591bf5424e787ae313fcb9c212f5f6786e1fa82076a2c632c0141552babcd85698c437506dfa6ae2d58723062 - languageName: node - linkType: hard - "xmlhttprequest-ssl@npm:~2.0.0": version: 2.0.0 resolution: "xmlhttprequest-ssl@npm:2.0.0" @@ -14880,13 +13343,6 @@ __metadata: languageName: node linkType: hard -"xtend@npm:^4.0.0": - version: 4.0.2 - resolution: "xtend@npm:4.0.2" - checksum: ac5dfa738b21f6e7f0dd6e65e1b3155036d68104e67e5d5d1bde74892e327d7e5636a076f625599dc394330a731861e87343ff184b0047fef1360a7ec0a5a36a - languageName: node - linkType: hard - "y18n@npm:^4.0.0": version: 4.0.3 resolution: "y18n@npm:4.0.3" @@ -14894,13 +13350,6 @@ __metadata: languageName: node linkType: hard -"y18n@npm:^5.0.5": - version: 5.0.8 - resolution: "y18n@npm:5.0.8" - checksum: 54f0fb95621ee60898a38c572c515659e51cc9d9f787fb109cef6fde4befbe1c4602dc999d30110feee37456ad0f1660fa2edcfde6a9a740f86a290999550d30 - languageName: node - linkType: hard - "yaeti@npm:^0.0.6": version: 0.0.6 resolution: "yaeti@npm:0.0.6" @@ -14953,13 +13402,6 @@ __metadata: languageName: node linkType: hard -"yargs-parser@npm:^21.1.1": - version: 21.1.1 - resolution: "yargs-parser@npm:21.1.1" - checksum: ed2d96a616a9e3e1cc7d204c62ecc61f7aaab633dcbfab2c6df50f7f87b393993fe6640d017759fe112d0cb1e0119f2b4150a87305cc873fd90831c6a58ccf1c - languageName: node - linkType: hard - "yargs@npm:^15.3.1": version: 15.4.1 resolution: "yargs@npm:15.4.1" @@ -14979,21 +13421,6 @@ __metadata: languageName: node linkType: hard -"yargs@npm:^17.3.1": - version: 17.7.2 - resolution: "yargs@npm:17.7.2" - dependencies: - cliui: ^8.0.1 - escalade: ^3.1.1 - get-caller-file: ^2.0.5 - require-directory: ^2.1.1 - string-width: ^4.2.3 - y18n: ^5.0.5 - yargs-parser: ^21.1.1 - checksum: 73b572e863aa4a8cbef323dd911d79d193b772defd5a51aab0aca2d446655216f5002c42c5306033968193bdbf892a7a4c110b0d77954a7fdf563e653967b56a - languageName: node - linkType: hard - "yn@npm:3.1.1": version: 3.1.1 resolution: "yn@npm:3.1.1" @@ -15001,10 +13428,10 @@ __metadata: languageName: node linkType: hard -"yocto-queue@npm:^0.1.0": - version: 0.1.0 - resolution: "yocto-queue@npm:0.1.0" - checksum: f77b3d8d00310def622123df93d4ee654fc6a0096182af8bd60679ddcdfb3474c56c6c7190817c84a2785648cdee9d721c0154eb45698c62176c322fb46fc700 +"yocto-queue@npm:^1.0.0": + version: 1.0.0 + resolution: "yocto-queue@npm:1.0.0" + checksum: 2cac84540f65c64ccc1683c267edce396b26b1e931aa429660aefac8fbe0188167b7aee815a3c22fa59a28a58d898d1a2b1825048f834d8d629f4c2a5d443801 languageName: node linkType: hard